{
 "slug": "vendor-bank-account-change-fraud-controls",
 "topic_id": "TOPIC-004",
 "cluster": "B2B Wire, AP & Treasury Payment Release",
 "tier": "Tier B",
 "title": "The vendor invoice scam: deconstructing account details substitution",
 "summary": "Attackers compromise a vendor's email, send updated bank details on genuine letterhead, and slip the change into AP software where approvers do not notice the modified routing digits.",
 "lede": "This fraud does not require a forged invoice, a fake domain or a spoofed sender. It requires access to a real vendor's mailbox and the knowledge that account numbers are displayed truncated on the screen where they are approved.",
 "date": "2024-10-01",
 "category": "Compliance",
 "author_id": "tobias-lindqvist-rao",
 "tags": [
  "vendor impersonation",
  "bank details change",
  "accounts payable",
  "BEC",
  "payment fraud",
  "AP controls"
 ],
 "image_title": "Vendor Invoice Scam",
 "schema": "Article",
 "key_takeaways": [
  "The attacker sends from the vendor's real mailbox, so every email authentication check passes. There is no signal to detect.",
  "Approval screens truncate account numbers and bury change flags in sub-tabs, which is where the substituted digits live.",
  "Total rendering — showing every material field in full at the moment of approval — is the cheapest half of the fix and requires no cryptography."
 ],
 "body": [
  {
   "type": "h2",
   "text": "The sequence, with the detection opportunities marked"
  },
  {
   "type": "diagram",
   "kind": "flow",
   "alt": "Every element is authentic except the account number",
   "caption": "There is no forgery to detect. The attacker sends real documents from a real mailbox.",
   "nodes": [
    {
     "label": "Vendor mailbox compromised",
     "note": "weeks of quiet reading",
     "bad": true
    },
    {
     "label": "Genuine letterhead, genuine invoice",
     "note": "nothing to detect"
    },
    {
     "label": "One field changed",
     "note": "the account number",
     "bad": true
    },
    {
     "label": "AP updates the vendor master",
     "note": "routine change"
    },
    {
     "label": "Every future payment redirected",
     "note": "until reconciliation",
     "bad": true
    }
   ]
  },
  {
   "type": "ol",
   "items": [
    "<strong style=\"font-weight:600\">Vendor mailbox compromised.</strong> Typically through credential phishing at the vendor, not at you. <em>No detection opportunity on your side.</em>",
    "<strong style=\"font-weight:600\">Attacker observes.</strong> They read months of correspondence, learn invoice cadence, amounts, contacts and tone. <em>None.</em>",
    "<strong style=\"font-weight:600\">Change request sent.</strong> From the genuine mailbox, on genuine letterhead, referencing a real invoice. SPF, DKIM and DMARC all pass because the mail is genuine. <em>None from email authentication.</em>",
    "<strong style=\"font-weight:600\">AP updates the vendor record.</strong> Sometimes after a callback to a number in the email. <em>This is the control point, and it usually fails.</em>",
    "<strong style=\"font-weight:600\">Invoice approved.</strong> The approver sees vendor name, amount and reference. The account number is truncated. <em>This is the second control point, and the interface defeats it.</em>",
    "<strong style=\"font-weight:600\">Payment released.</strong> <em>Recovery window measured in hours for a wire.</em>"
   ]
  },
  {
   "type": "h2",
   "text": "Why every email control passes"
  },
  {
   "type": "p",
   "html": "Organisations invest heavily in email authentication, and it works against spoofing — a message claiming to be from a domain it did not originate from."
  },
  {
   "type": "p",
   "html": "This attack does not spoof. The message originates from the vendor's genuine infrastructure, signed by their genuine keys, from their genuine mailbox. Domain-based authentication confirms it is authentic, which it is. The compromise is upstream of everything your gateway can evaluate."
  },
  {
   "type": "h2",
   "text": "The account masking problem"
  },
  {
   "type": "p",
   "html": "Truncating account numbers in user interfaces is a habit imported from consumer banking, where it prevents shoulder-surfing of a customer's own account. In an approval screen it is actively harmful."
  },
  {
   "type": "p",
   "html": "Consider a genuine account number and a substituted one, displayed as most AP systems display them:"
  },
  {
   "type": "code",
   "text": "Genuine      GB29 NWBK 6016 1331 9268 19    displayed as  ****9268 19\nSubstituted  GB29 NWBK 6016 1331 4471 02    displayed as  ****4471 02\n\nGenuine      021000021 / 5847392016         displayed as  ****2016\nSubstituted  121000248 / 9932847016         displayed as  ****7016"
  },
  {
   "type": "p",
   "html": "In the second pair, the routing number changed entirely — a different bank, a different state — and the display shows only trailing digits of the account. An approver comparing against memory or against a prior payment sees a different suffix, which is exactly what a legitimate account change would also show."
  },
  {
   "type": "h2",
   "text": "Total rendering, which costs nothing"
  },
  {
   "type": "p",
   "html": "The first half of the fix requires no cryptography, no vendor enrolment and no new system. Change the approval screen to render every material field in full:"
  },
  {
   "type": "ul",
   "items": [
    "Beneficiary legal name, in full, as it will appear on the payment.",
    "Account number, complete and unmasked.",
    "Routing, sort code or SWIFT, complete.",
    "Beneficiary bank name and country.",
    "A prominent indicator where any of these changed since the last payment to this vendor, with the previous values shown alongside."
   ]
  },
  {
   "type": "p",
   "html": "The last item is the highest-value single change available, and most AP systems either do not surface it or bury it in a sub-tab an approver never opens."
  },
  {
   "type": "h2",
   "text": "The second half: verifying the change itself"
  },
  {
   "type": "p",
   "html": "Rendering helps the approver notice. It does not establish that the vendor requested the change, which is the underlying question."
  },
  {
   "type": "p",
   "html": "That requires a signal from the vendor that an attacker in their mailbox cannot produce: a signed change statement from the vendor's authorised officer, rendering the full old and new details, verifiable by you without calling anyone."
  },
  {
   "type": "p",
   "html": "The callback disappears from the critical path, which matters because the callback is the step that most often fails — the number came from the compromised mailbox."
  },
  {
   "type": "h2",
   "text": "What to do this week"
  },
  {
   "type": "ol",
   "items": [
    "Pull every vendor bank detail change from the last twelve months. Count them.",
    "For each, determine whether it was verified by any means beyond reading the request, and whether the contact used came from the request itself.",
    "Screenshot your own approval screen. Count how many of the five material fields are rendered in full.",
    "Compute your exposure: average payment value to a vendor over the interval between a details change and the next reconciliation."
   ]
  },
  {
   "type": "p",
   "html": "That fourth number is your loss per undetected substitution, and it is usually larger than people expect because it spans multiple invoices rather than one."
  },
  {
   "type": "h2",
   "text": "Why the usual controls miss it"
  },
  {
   "type": "table",
   "caption": "Control by control",
   "head": [
    "Control",
    "Why it misses"
   ],
   "rows": [
    [
     "Email authentication",
     "The mail is genuine — the account is compromised, not spoofed"
    ],
    [
     "Invoice matching",
     "The invoice is real and matches a real purchase order"
    ],
    [
     "Callback verification",
     "The number often comes from the fraudulent message"
    ],
    [
     "Anomaly detection",
     "A vendor changing banks is a normal, frequent event"
    ],
    [
     "Dual approval",
     "Two people compare the same masked field on the same screen"
    ]
   ]
  },
  {
   "type": "p",
   "html": "The single highest-value change is to gate the amendment rather than the payment, and to render the delta: what the details were, what they are becoming, when they last changed and through which path. A change plus a recent prior change is the strongest signal available."
  },
  {
   "type": "h2",
   "text": "Objections and honest limits"
  },
  {
   "type": "p",
   "html": "<strong style=\"font-weight:600\">“We verify every change by phone.”</strong> Then the control is only as good as where the number came from. Use a number from the vendor record as it stood before the change request, and record which number was used."
  },
  {
   "type": "p",
   "html": "<strong style=\"font-weight:600\">“The vendor should secure their email.”</strong> They should. You cannot make them, and your loss does not depend on their improving. The control has to work while their mailbox is compromised."
  }
 ],
 "faq": [
  {
   "q": "Would better email security stop this?",
   "a": "No. The message is genuine, sent from the vendor's real mailbox. Every authentication check passes correctly because there is nothing inauthentic about the message."
  },
  {
   "q": "Is the callback useless?",
   "a": "It is useful when the number comes from your own vendor record rather than from the request, and it still fails when the vendor's own systems and phone are compromised. Treat it as one signal, not as verification."
  },
  {
   "q": "Why is masking harmful here?",
   "a": "It hides the characters an attacker alters. Masking protects a customer viewing their own account; it degrades an approver verifying someone else's."
  },
  {
   "q": "What is the cheapest improvement?",
   "a": "Render all material fields in full and flag changes since the last payment with the old values shown. No new system, no vendor cooperation, immediate effect."
  },
  {
   "q": "Why doesn't email authentication help?",
   "a": "Because the mail is genuine. The vendor's own account is sending it; nothing is spoofed."
  },
  {
   "q": "Why gate the change rather than the payment?",
   "a": "The change redirects every future payment. A perfectly controlled payment to an altered record is still a loss."
  },
  {
   "q": "What is the strongest available signal?",
   "a": "A banking change, combined with how recently the details last changed and through which path."
  }
 ],
 "sources": [
  {
   "t": "FBI IC3 2025 Internet Crime Report",
   "u": "https://www.ic3.gov/AnnualReport/Reports/2025_IC3Report.pdf"
  },
  {
   "t": "AFP — Payments Fraud and Control Survey",
   "u": "https://www.afponline.org/training-resources/resources/survey-research-economic-data"
  },
  {
   "t": "Email authentication specifications: SPF, DKIM and DMARC, and their scope."
  },
  {
   "t": "Research on visual verification and truncated identifier comparison."
  },
  {
   "t": "Nacha Operating Rules",
   "u": "https://www.nacha.org/rules"
  }
 ],
 "related": [
  {
   "slug": "vendor-bank-change-fraud",
   "title": "Vendor email compromise: the invoice is real, the bank account is not",
   "category": "Fraud"
  },
  {
   "slug": "account-masking-ap-systems-directly-enables-wire",
   "title": "Why account masking enables wire fraud",
   "category": "Compliance"
  },
  {
   "slug": "homoglyphs-unicode-confusables-wire-payees-cheapest-attack-financial",
   "title": "Homoglyphs in wire payees",
   "category": "Compliance"
  },
  {
   "slug": "deepfake-wire-fraud-ucc-article-4a",
   "title": "The deepfake wire trap",
   "category": "Compliance"
  }
 ],
 "image": "https://cdn.twc.sh/images/igcache/Vendor%20Invoice%20Scam/1500_900/blog.jpg",
 "wordcount": 1055,
 "url": "/blog/vendor-bank-account-change-fraud-controls.html",
 "reading_time": "5 min read",
 "seo_title": "The vendor invoice scam: account detail substitution",
 "meta_description": "Attackers compromise a vendor's email, send updated bank details on genuine letterhead, and slip the change past AP approvers.",
 "hub": {
  "slug": "topics/payment-release-authorization",
  "title": "Payment release authorization"
 },
 "pair": {
  "slug": "vendor-bank-change-fraud",
  "title": "Vendor email compromise: the invoice is real, the bank account is not",
  "mode": "DIFF"
 },
 "answer": "Because nothing about it is anomalous. The invoice is genuine, the letterhead is genuine, the vendor's email account is genuine — it is simply controlled by someone else. The changed field arrives inside a legitimate document, through a legitimate channel, from a legitimate sender.",
 "answer_q": "Why is vendor bank change fraud so hard to stop?",
 "glossary": [
  {
   "term": "Vendor master",
   "def": "The stored supplier record including banking details. Amending it redirects every future payment."
  },
  {
   "term": "Business email compromise",
   "def": "Fraud conducted from a genuine, compromised mailbox rather than a spoofed one, which is why authentication controls do not detect it."
  },
  {
   "term": "Delta approval",
   "def": "Approving a change by reviewing what it changes from and to, rather than reviewing the resulting record."
  }
 ],
 "checklist": {
  "title": "Gating the amendment",
  "id": "gate",
  "desc": "Five steps focused on the change, not the payment.",
  "steps": [
   {
    "name": "Treat a banking change as its own approval event.",
    "text": "Separate from invoice approval, with its own evidence."
   },
   {
    "name": "Render the delta in full.",
    "text": "Old and new account, old and new bank, last change date and path."
   },
   {
    "name": "Call a number from the pre-change record.",
    "text": "And record which number was used, not just that a call occurred."
   },
   {
    "name": "Ask the vendor to countersign.",
    "text": "For your top twenty payees by value, which is most of the exposure."
   },
   {
    "name": "Hold the first payment after a change.",
    "text": "A short delay costs little and removes the attacker's timeline."
   }
  ]
 },
 "cta": {
  "title": "Where this fits in Manav",
  "html": "Manav renders the full beneficiary details and the delta from what was on file, binds the approver's signature to that exact payload, and has the payment service recompute the digest before it releases funds.",
  "href": "../docs.html",
  "label": "See payment gating"
 }
}