<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Wasif Faisal</title>
    <description>The latest articles on DEV Community by Wasif Faisal (@cswasif).</description>
    <link>https://dev.to/cswasif</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3670219%2F091579aa-4282-490f-882f-c6ff9cd6f38f.jpg</url>
      <title>DEV Community: Wasif Faisal</title>
      <link>https://dev.to/cswasif</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/cswasif"/>
    <language>en</language>
    <item>
      <title>Why BIN Attacks Don't Fear Your Firewall — But Do Fear Your Issuer</title>
      <dc:creator>Wasif Faisal</dc:creator>
      <pubDate>Sat, 06 Jun 2026 06:27:40 +0000</pubDate>
      <link>https://dev.to/cswasif/why-bin-attacks-dont-fear-your-firewall-but-do-fear-your-issuer-3e1f</link>
      <guid>https://dev.to/cswasif/why-bin-attacks-dont-fear-your-firewall-but-do-fear-your-issuer-3e1f</guid>
      <description>&lt;p&gt;&lt;em&gt;Written for: Payment Gateway Product Managers · Bank Risk &amp;amp; Compliance Officers · Fintech Security Architects&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;I'm an undergraduate security researcher at BRAC University, and payment security has become something of an obsession over the past few months. I've been working through the primary documentation of major payment gateways — developer docs, knowledge base articles, network compliance bulletins — trying to build a clear picture of how card-not-present fraud actually works at an architectural level, not just conceptually.&lt;/p&gt;

&lt;p&gt;Some of what I found I didn't expect. I'm writing this up because I think parts of it are underappreciated even by people working inside these systems, and honestly because I want pushback from people with direct industry experience — there's only so far you can get reading documentation.&lt;/p&gt;




&lt;h2&gt;
  
  
  CVV Checking Is Optional. That's the Whole Problem.
&lt;/h2&gt;

&lt;p&gt;I went through the developer documentation of six major payment gateways — Visa/CyberSource, Stripe, Braintree, Adyen, Square, and Checkout.com — expecting to find differences in how they handle CVV mismatches. What I found instead was a near-identical pattern across all of them:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Not a single gateway enforces CVV matching as a hard, mandatory block by default.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Every one of them treats CVV mismatch blocking as something the merchant has to opt into. The default is to flag the mismatch and let the merchant decide. I kept checking this expecting to find an exception. There isn't one.&lt;/p&gt;

&lt;p&gt;This isn't a bug or an oversight — it's a deliberate design decision, mostly driven by conversion rate optimization. But it creates an attack surface that card enumeration operations are specifically built around.&lt;/p&gt;




&lt;h2&gt;
  
  
  Where This Shows Up in the Docs: Reason Code 230
&lt;/h2&gt;

&lt;p&gt;The clearest documentation of how this works comes from &lt;a href="https://support.cybersource.com/knowledgebase/Knowledgearticle/?code=000002479" rel="noopener noreferrer"&gt;Knowledge Article 000002479&lt;/a&gt; in the Visa/CyberSource knowledge base. It defines Reason Code 230 like this:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"The authorization was approved by the issuing bank, but declined during processing due to CVN mismatch. This is considered a soft decline."&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Read that carefully: "approved by the issuing bank." By the time you see Reason Code 230, the bank has already said yes. The CVV mismatch gets caught at the gateway layer, after the bank has authorized the funds. The merchant then decides whether to proceed or reverse.&lt;/p&gt;

&lt;p&gt;This creates what I'd call a double-blind problem. The merchant with CVV checks disabled assumes the bank's authorization means the transaction is legitimate. The bank, having approved it based on its own fraud signals, assumes the merchant's side has done appropriate authentication. Neither is checking what the other is doing. Both are making decisions with incomplete information — and both can end up holding the loss.&lt;/p&gt;

&lt;p&gt;CyberSource also ships explicit API fields for bypassing the check entirely — these aren't hidden, they're in the public docs:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;API&lt;/th&gt;
&lt;th&gt;Bypass Field&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;REST API&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ignoreCvResult: true&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SCMP / Secure Acceptance&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ignore_bad_cv=yes&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Simple Order API&lt;/td&gt;
&lt;td&gt;&lt;code&gt;businessRules_ignoreCVResult=true&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;This is not a hidden backdoor. It is published, supported functionality with a legitimate purpose: preventing false declines for valued customers who mistype at checkout.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Same Pattern, Six Times Over
&lt;/h2&gt;

&lt;p&gt;CyberSource isn't an outlier. I found the same design across every gateway I looked at.&lt;/p&gt;

&lt;h3&gt;
  
  
  Stripe
&lt;/h3&gt;

&lt;p&gt;Stripe handles CVV through &lt;strong&gt;&lt;a href="https://docs.stripe.com/radar/rules" rel="noopener noreferrer"&gt;Stripe Radar&lt;/a&gt;&lt;/strong&gt;, its rules engine. Out of the box, a payment goes through even if the CVC check fails. Stripe's own docs are pretty direct about this:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"Without a specific block rule in place, a charge can still be approved by the customer's bank, even if the CVC or ZIP code (AVS) check fails. Banks take a variety of signals into account in their own systems and may see a charge as being legitimate despite the check not passing."&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;There are two built-in block rules available, but both have to be manually enabled:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Legacy rule&lt;/strong&gt; (pre-December 2024): &lt;code&gt;if CVC verification fails&lt;/code&gt; — hard block on failure&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Newer rule&lt;/strong&gt; (post-December 2024): &lt;code&gt;if CVC verification fails based on risk score&lt;/code&gt; — blocks CVC failures &lt;em&gt;unless&lt;/em&gt; Stripe's ML model thinks the transaction looks low-risk&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The second one is interesting because it means even when you've turned the block rule on, Stripe can still let a CVC failure through if its model disagrees. Neither is active by default.&lt;/p&gt;

&lt;p&gt;Worth noting: if no CVC is submitted at all, Stripe returns &lt;code&gt;check_not_performed&lt;/code&gt; rather than a failure — so merchants who don't collect CVC at checkout don't even see a mismatch signal.&lt;/p&gt;

&lt;h3&gt;
  
  
  Braintree (PayPal)
&lt;/h3&gt;

&lt;p&gt;Braintree's handling is probably the most explicit. The &lt;a href="https://developer.paypal.com/braintree/docs/guides/fraud-tools/basic/avs-cvv-rules" rel="noopener noreferrer"&gt;official docs&lt;/a&gt; just say it plainly:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"If you do not have AVS or CVV rules enabled, we will ignore the response code."&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;CVV rules live under &lt;strong&gt;Fraud Management &amp;gt; Basic Credit Card Fraud Tools &amp;gt; CVV&lt;/strong&gt; in the Control Panel, and they're off by default. When you do turn them on, you can configure exactly what triggers a rejection — mismatch, not provided, specific card types, transaction amounts, etc.&lt;/p&gt;

&lt;p&gt;There's also a transaction-level override in the API:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;options&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;skip_cvv&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This lets developers skip CVV on individual transactions programmatically, even if account-level rules are enabled. Braintree also routes UnionPay and Maestro cards through CVV-exempt paths since those card types don't carry CVV numbers.&lt;/p&gt;

&lt;h3&gt;
  
  
  Adyen
&lt;/h3&gt;

&lt;p&gt;Adyen splits CVV checking into pre-authorization and post-authorization phases, and both are off by default.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://docs.adyen.com/risk-management/configure-risk-rules" rel="noopener noreferrer"&gt;Adyen's risk management docs&lt;/a&gt; are straightforward about this:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"All post-authorization rules are disabled by default."&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The CVC post-authorization rule — which can block a transaction after the issuer has approved it but before settlement — must be manually enabled by the merchant in their Customer Area under &lt;strong&gt;Revenue &amp;amp; Risk &amp;gt; Risk Profiles &amp;gt; Block&lt;/strong&gt;. When configuring the rule, merchants choose from options including whether to block transactions where CVC is missing, mismatched, or unchecked.&lt;/p&gt;

&lt;p&gt;Adyen's help documentation confirms the default state explicitly:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"The risk rule is disabled by default."&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;One thing that caught my attention: the CVC rule doesn't apply to recurring transactions at all — it only fires on the initial charge. So if a card gets tokenized without a CVC check (say, a subscription signup where CVV wasn't collected), every subsequent recurring charge processes with no CVC verification. That's by design.&lt;/p&gt;

&lt;p&gt;There's also an odd note in the Recurly/Adyen integration docs saying merchants need to contact Adyen support to &lt;em&gt;disable&lt;/em&gt; the CVC requirement for recurring billing — framing CVV collection as an operational inconvenience to turn off, rather than a baseline to keep on.&lt;/p&gt;

&lt;h3&gt;
  
  
  Square
&lt;/h3&gt;

&lt;p&gt;Square's &lt;strong&gt;&lt;a href="https://squareup.com/help/us/en/article/6077-risk-manager-overview" rel="noopener noreferrer"&gt;Risk Manager&lt;/a&gt;&lt;/strong&gt; lets merchants build rules based on CVV results, but it's optional. From the docs:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"You can also set your rule to be based on factors such as Square's own risk evaluation, AVS mismatch, invalid CVV, or suspicious transaction amounts."&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;"Invalid CVV" is one condition you can choose to act on — it's not something that triggers automatically. Without a configured rule, Square passes CVV result codes through without blocking anything (&lt;code&gt;CVV_NOT_CHECKED&lt;/code&gt; shows up in API responses). Standard payment flows don't enforce CVV matching at all unless you've set up a Risk Manager rule.&lt;/p&gt;

&lt;h3&gt;
  
  
  Checkout.com
&lt;/h3&gt;

&lt;p&gt;Checkout.com returns structured CVV result codes through their &lt;a href="https://www.checkout.com/docs/four/payments/payment-response-codes" rel="noopener noreferrer"&gt;API&lt;/a&gt;:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Code&lt;/th&gt;
&lt;th&gt;Meaning&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Y&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;CVV matched&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;D&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;CVV did not match&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;N&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;CVV should be present but was not provided&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;P&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;CVV check was not performed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;U&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Issuer does not support CVV&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;X&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;CVV information not available&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;A &lt;code&gt;D&lt;/code&gt; (mismatch) doesn't trigger a decline on its own. It feeds into the merchant's Fraud Detection risk strategies, where the merchant decides what to do with it. If you haven't configured a rule that says "decline on D", the transaction goes through.&lt;/p&gt;

&lt;p&gt;There's also a note in their docs that a &lt;code&gt;Declined - Do not honour&lt;/code&gt; response &lt;em&gt;can&lt;/em&gt; occur when CVV fails, but that's an issuer-level decline — not something Checkout.com enforces itself.&lt;/p&gt;




&lt;h2&gt;
  
  
  How BIN Attacks Actually Use This
&lt;/h2&gt;

&lt;p&gt;This is where the gateway documentation findings connect to real attack behavior.&lt;/p&gt;

&lt;p&gt;A BIN attack doesn't hit one merchant. It spreads across dozens or hundreds of checkouts simultaneously — specifically targeting merchants that haven't configured CVV blocking, which based on these defaults is most of them. Here's how the attack cycle works:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Phase 1 — Target selection&lt;/strong&gt;&lt;br&gt;
Small-to-mid e-commerce stores and subscription platforms on default gateway configurations. The attacker knows which gateways default to permissive CVV states because the documentation is public.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Phase 2 — Card number generation&lt;/strong&gt;&lt;br&gt;
Luhn-valid candidate numbers generated from a target BIN range. BIN databases are commercially available — they map BIN prefixes to issuing bank, card product tier, geography.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Phase 3 — Distributed probing&lt;/strong&gt;&lt;br&gt;
Candidates submitted through checkouts via rotating residential proxy networks. Each request comes from a different IP. Most merchant velocity controls are useless here because the per-IP volume is one or two requests — well below any threshold.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Phase 4 — Using response codes as an oracle&lt;/strong&gt;&lt;br&gt;
This is the part that makes CVV architecture directly relevant. A CVV mismatch on a valid, active card number comes back as a soft decline. A hard decline means the number is unissued. The attacker is using the gateway's own response signal to sort valid cards from invalid ones at scale.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Phase 5 — CVV enumeration on confirmed cards&lt;/strong&gt;&lt;br&gt;
Once a valid card number is confirmed, CVV is a constrained problem: 1,000 possible values (000–999). On a gateway returning soft declines for mismatches rather than hard blocks, the attacker gets a confirmatory signal on every attempt.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why IP rotation defeats merchant-side defenses&lt;/strong&gt;&lt;br&gt;
IP throttling, CAPTCHA, device fingerprinting — all of these operate at a layer the attacker routes around entirely. Residential proxy networks provide real ISP-assigned IPs from real users. A probe from Dhaka, then Tokyo, then São Paulo produces no velocity signal at any individual merchant.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Part Merchants Usually Don't Know: You Lose Your Chargeback Rights Too
&lt;/h2&gt;

&lt;p&gt;There's a second liability problem here that operates completely separately from the issuer side — and it falls on the merchant.&lt;/p&gt;

&lt;p&gt;The standard argument for disabling CVV checks is conversion: blocking on CVV mismatch means declining some legitimate customers who mistyped. Accept slightly more fraud risk, reduce false declines, improve revenue. The problem is this calculus ignores what happens when the fraud chargebacks actually arrive.&lt;/p&gt;

&lt;p&gt;Under Visa Dispute Condition 10.4: Other Fraud — Card-Absent Environment, a merchant's ability to defend against a fraud chargeback in the pre-arbitration phase depends on submitting valid qualification data. Specifically, the Visa Rules require the merchant to provide:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Data Element&lt;/th&gt;
&lt;th&gt;Requirements&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Customer account / login ID&lt;/td&gt;
&lt;td&gt;Unique identifier used at time of transaction; cleartext, not hashed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;IP address&lt;/td&gt;
&lt;td&gt;Cardholder's public IP; cleartext; valid IPV4 or IPV6 format&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Device ID&lt;/td&gt;
&lt;td&gt;Unique device identifier (e.g., IMEI); minimum 15 characters; cleartext&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Device fingerprint&lt;/td&gt;
&lt;td&gt;Derived from ≥2 hardware/software attributes; minimum 20 characters&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Shipping address&lt;/td&gt;
&lt;td&gt;Full address including street, city, state/province, postal code, country&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;This qualification data is the merchant's remedy — the evidence package that allows an acquirer to contest a Dispute Condition 10.4 chargeback on behalf of the merchant. If that data is valid and accurately submitted, the merchant has a defense path. If it is not submitted, or if it is found invalid or falsified, the remedy is forfeit.&lt;/p&gt;

&lt;p&gt;In October 2023, Visa operationalized the &lt;a href="https://usa.visa.com/support/merchant/library/visa-business-news.html" rel="noopener noreferrer"&gt;Visa Fraud Dispute Monitoring Program (VFDMP)&lt;/a&gt; to specifically audit this qualification data. If the VFDMP finds submitted data is invalid or falsified: the acquirer, merchant, and service providers get notified, and the merchant's BIN gets suspended from using the Dispute Condition 10.4 remedy entirely until the acquirer confirms to Visa in writing that the issues are fixed.&lt;/p&gt;

&lt;p&gt;The connection to CVV bypass is direct. A merchant operating with CVV checks disabled is, by design, processing transactions where the card authentication signal is weak or absent. These are precisely the transactions most likely to generate Dispute Condition 10.4 fraud chargebacks — CNP fraud in a card-absent environment. And when those chargebacks arrive, the merchant's defense depends on the quality of session-layer authentication data collected at the time of the transaction.&lt;/p&gt;

&lt;p&gt;A merchant who disables CVV checks and also fails to collect robust device fingerprint, IP, and session data has eliminated their two main lines of fraud defense simultaneously: first-line authentication at the payment layer, and post-fraud chargeback remedy at the dispute layer. The conversion rate optimization translates directly into an unrecoverable revenue loss position.&lt;/p&gt;

&lt;p&gt;The liability picture ends up being almost symmetrically bad. The issuer who approved a CVV mismatch transaction can't file a standard chargeback — the liability shift rules prevent it. The merchant who processed it without valid session data can't defend the chargeback — no qualifying evidence. In a CNP fraud scenario where both parties have weak authentication postures, whoever has the weaker documentary position at dispute time absorbs the loss. Under current Visa rules, that's usually the merchant.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why the Attack Fails at the Bank Level
&lt;/h2&gt;

&lt;p&gt;Merchant defenses don't stop large-scale BIN attacks. The issuing bank is what actually kills them — because &lt;strong&gt;the bank sees the full picture that no individual merchant can see&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cross-merchant velocity aggregation&lt;/strong&gt;&lt;br&gt;
The issuer sees every authorization attempt against a specific card number regardless of the merchant, gateway, IP address, or session context. A card number receiving 35 authorization attempts from 15 different merchants in 80 minutes is a visible pattern at the issuer — and invisible to any individual merchant.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Card network fraud intelligence layers&lt;/strong&gt;&lt;br&gt;
Visa Advanced Authorization (VAA) and Mastercard Safety Net operate at the network level, aggregating behavioral signals across all participating acquirers and issuers. Coordinated BIN probing against a single BIN range — even distributed across many merchants — appears as a correlated pattern to network-level analytics that no individual gateway can replicate.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;BIN-range velocity locks&lt;/strong&gt;&lt;br&gt;
When an enumeration attack is detected, issuers can apply velocity controls to the entire BIN prefix, effectively blackholing the attack's remaining candidate set across all merchants simultaneously. A lock on a 6- to 8-digit prefix can neutralize thousands of pending probe attempts with a single policy change.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The liability rule as a fraud-detection incentive&lt;/strong&gt;&lt;br&gt;
This is the mechanism documented in &lt;a href="https://support.cybersource.com/knowledgebase/Knowledgearticle/?code=000002479" rel="noopener noreferrer"&gt;Visa/CyberSource KA-000002479&lt;/a&gt; — and it is the one with the most direct financial consequence for issuers.&lt;/p&gt;

&lt;p&gt;The network liability shift rules are:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Network&lt;/th&gt;
&lt;th&gt;Effective Date&lt;/th&gt;
&lt;th&gt;Rule&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Visa&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;April 2018&lt;/td&gt;
&lt;td&gt;Issuers cannot chargeback a transaction solely on CVV2 mismatch grounds&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Mastercard&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;April 12, 2024&lt;/td&gt;
&lt;td&gt;Issuers cannot seek fraud chargebacks for approved authorizations with CVC2 mismatches&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;American Express&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;April 2024&lt;/td&gt;
&lt;td&gt;Amex will not place chargeback liability on the merchant for CNP transactions with CID mismatch&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Discover&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Ongoing&lt;/td&gt;
&lt;td&gt;Settling CVV mismatch transactions increases fraud risk; no automatic settlement recommended&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The implication is precise: an issuer that approves an authorization despite a known CVV mismatch — and that transaction later proves fraudulent — cannot file a standard fraud chargeback. The loss is the issuer's to absorb.&lt;/p&gt;

&lt;p&gt;This creates a direct financial incentive for issuers to become active fraud detection stakeholders rather than passive authorization machines. An issuer operating with loose CVV approval policies is not just taking a compliance risk — it is pricing in an asymmetric fraud liability with no chargeback recovery mechanism.&lt;/p&gt;




&lt;h2&gt;
  
  
  What This Suggests for Risk Teams
&lt;/h2&gt;

&lt;p&gt;I want to be clear that I'm working from documentation, not from running payment infrastructure. But the pattern is consistent enough across six gateways and multiple network rule sets that it seems worth flagging for people in a position to act on it.&lt;/p&gt;

&lt;h3&gt;
  
  
  For merchants
&lt;/h3&gt;

&lt;p&gt;If you've disabled CVV checking for conversion reasons, the risk isn't just the fraud — it's that you may have also eliminated your ability to fight the chargebacks when they arrive. Under Visa Dispute Condition 10.4, defending a CNP fraud chargeback requires valid session-layer data: IP address, device fingerprint, device ID, login ID, shipping address. If that data is absent or invalid, you can't use the remedy regardless of how the transaction was processed.&lt;/p&gt;

&lt;p&gt;Session data should be treated like a legal record. Every transaction needs the full Visa qualification dataset captured in cleartext — not hashed, not synthetic. The VFDMP exists specifically to audit this.&lt;/p&gt;

&lt;p&gt;The actual cost of CVV bypass also takes time to materialize. The conversion lift shows up immediately in your metrics. The chargeback losses, processing fees, and potential suspension of dispute remedy rights show up weeks or months later. Most unit economics models I've seen don't capture the full cycle.&lt;/p&gt;

&lt;h3&gt;
  
  
  For payment gateway product managers
&lt;/h3&gt;

&lt;p&gt;The default states matter more than most people realize. If your gateway ships with CVV blocking off, your onboarding flow is the de facto first line of defense for most of your merchants — and most of them will never go looking for the setting on their own.&lt;/p&gt;

&lt;p&gt;Fields like &lt;code&gt;ignoreCvResult: true&lt;/code&gt; and &lt;code&gt;skip_cvv&lt;/code&gt; are high-risk configurations. A merchant who enables these without compensating fraud signals (3DS, behavioral analytics, device fingerprinting) is carrying elevated enumeration exposure. These probably shouldn't be invisible in your merchant dashboards.&lt;/p&gt;

&lt;p&gt;Reason Code 230 velocity is also a detectable attack signal at the gateway layer that most merchants never see surfaced. A spike in soft declines across a narrow BIN prefix from multiple sessions and IPs is a BIN attack in progress — this could be exposed in near real-time.&lt;/p&gt;

&lt;h3&gt;
  
  
  For bank risk and compliance officers
&lt;/h3&gt;

&lt;p&gt;The liability shift rules have been in place longer than many people realize — Visa since April 2018, Mastercard and Amex since April 2024. Every CVV mismatch authorization your bank approves and that later proves fraudulent is a loss you can't recover through standard chargeback channels. Your CVV mismatch approval rate is worth tracking as a KRI — a rising trend, especially concentrated in specific BIN ranges, is an early signal of either targeted enumeration or compromised card data.&lt;/p&gt;

&lt;p&gt;Cross-merchant velocity is the signal that makes the attack visible. Without Visa Advanced Authorization or Mastercard Safety Net feeds providing that cross-merchant dimension, your fraud engine is missing the single most important indicator in a distributed BIN attack. Issuer-level data alone isn't enough.&lt;/p&gt;




&lt;h2&gt;
  
  
  Wrapping Up
&lt;/h2&gt;

&lt;p&gt;The finding across all six gateways is consistent: CVV verification is not a system-enforced gate. It's a merchant-configurable preference that defaults to off. Attackers have clearly internalized this — the distributed BIN attack methodology is built around it.&lt;/p&gt;

&lt;p&gt;The bank is what actually stops large-scale attacks, not merchant controls. Cross-merchant visibility, network-level velocity intelligence, and the liability shift rules that make approving bad CVV data financially painful — these are the mechanisms that matter.&lt;/p&gt;

&lt;p&gt;But there's a second layer to this that I didn't fully appreciate going in: the VFDMP means merchants who disable CVV checks are also degrading their ability to defend fraud chargebacks. The conversion optimization and the dispute remedy forfeiture are part of the same decision — they're just separated in time, which makes the tradeoff easy to miss.&lt;/p&gt;

&lt;p&gt;The rules are all in place. Visa's liability shift has been active since 2018. The VFDMP enforcement on merchants went live in October 2023. What I can't tell from documentation is how consistently these are being applied in practice — that's where I'd genuinely benefit from input from people working inside these systems.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;If you work in payment security, fraud operations, or gateway engineering and something here is wrong or incomplete — I genuinely want to know. I'm an undergrad working from documentation and there's real limit to what you can see without operational experience. Comments or a LinkedIn message both work.&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;If you found this useful or want to exchange notes on payment security research, connect with me on &lt;a href="https://www.linkedin.com/in/cswasif/" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Sources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://support.cybersource.com/knowledgebase/Knowledgearticle/?code=000002479" rel="noopener noreferrer"&gt;Visa/CyberSource Knowledge Article 000002479 — Reason Code 230&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.stripe.com/radar/rules" rel="noopener noreferrer"&gt;Stripe Radar Rules Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developer.paypal.com/braintree/docs/guides/fraud-tools/basic/avs-cvv-rules" rel="noopener noreferrer"&gt;Braintree CVV and AVS Rules Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.adyen.com/risk-management/configure-risk-rules" rel="noopener noreferrer"&gt;Adyen Post-Authorization Risk Rules Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://squareup.com/help/us/en/article/6077-risk-manager-overview" rel="noopener noreferrer"&gt;Square Risk Manager Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.checkout.com/docs/four/payments/payment-response-codes" rel="noopener noreferrer"&gt;Checkout.com CVV Response Codes Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://usa.visa.com/support/merchant/library/visa-business-news.html" rel="noopener noreferrer"&gt;Visa Business News: Introduction of Monitoring Rule for Dispute Condition 10.4 (October 2023)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>security</category>
      <category>webdev</category>
      <category>api</category>
      <category>fintech</category>
    </item>
  </channel>
</rss>
