Skip to content

Case 07 — VEC Vendor Email Compromise

Sources: FBI IC3 Internet Crime Report 2024, Abnormal Security VEC report (2024), Microsoft Digital Defense Report 2024.

Background

VEC is the highest-loss variant of BEC. The FBI IC3 2024 report places BEC at 38% of all cybercrime losses; within BEC, VEC averages over $120K per incident — far higher than CEO-impersonation BEC.

The flow: attacker compromises a vendor mailbox via phishing or AiTM, lurks for 1-3 months observing the email pattern, and then replies inside an existing payment thread with a "we changed banks" message. Sender, SPF, DKIM, DMARC, signature, and full thread history are all genuine.

Email indicators

  • Sender mailbox is real and previously communicated with the victim
  • All authentication passes
  • The thread history is real (the prior RE: chain genuinely exists)
  • Signature format matches the contact's historical mail
  • Attachments (W-9, bank letter) are convincingly forged
  • The new ACH account routes to a money-mule chain

This is the hardest BEC variant to detect. There is no malicious domain, no malicious attachment, and no traditional anomaly to trigger.

Animated walkthrough

Attack Simulation

VEC vendor account takeover invoice fraud

  1. 1Attacker
    Compromise vendor mailbox via phishing or AiTM
  2. 2Attacker
    Lurk 30-90 days, hide alerts via inbox rules
  3. 3Attacker
    Learn the approval workflow, amount thresholds, contacts
  4. 4Attacker
    Reply inside a real thread, requesting bank-account change
  5. 5Victim
    AP trusts: this is Sarah
  6. 6Victim
    Wire/ACH to attacker-controlled account
  7. 7Vigilyx
    Vigilyx flags via behavior baselines
    Vigilyx detectsbehavior_baseline notices the contact has never discussed bank changes before, content_scan triggers the banking_change rule, identity_anomaly flags first-time payment-change content in an otherwise real thread, attach_content detects newly-created PDF metadata in the W-9; DS-Murphy fuses to High and AP sees the alert before paying
Illustrative animation — all indicators sanitized, for research & training only

Vigilyx detection coverage

VEC is the email-security blind spot every traditional gateway shares. Vigilyx covers it through behavior baselines, semantic dedicated rules, and attachment metadata analysis:

  • Banking-change rulecontent_scan dedicated rule: routing plus ACH or wire plus change / update / new co-occurring → Medium baseline (crates/vigilyx-engine/src/modules/content_scan/detectors.rs)
  • Behavior baselinebehavior_baseline checks the historical session table and raises risk when this contact discusses payment-change topics for the first time (crates/vigilyx-engine/src/modules/behavior_baseline.rs)
  • Identity anomalyidentity_anomaly flags real reply chains that suddenly introduce payment-change or urgency language (crates/vigilyx-engine/src/modules/identity_anomaly.rs)
  • Attachment metadata analysisattach_content examines PDF/Office creation timestamps, authors, and revision history; freshly-created "official" documents are suspicious (crates/vigilyx-engine/src/modules/attach_content.rs)
  • Historical conversation queries — DB indexes support fast queries over the sender/recipient relationship's topic history and frequency (crates/vigilyx-db/src/infra/session.rs::count_sender_domain_history)
  • Cross-organization reply-chain inspectionheader_scan parses References and In-Reply-To to distinguish "real thread injection" from forged replies (crates/vigilyx-engine/src/modules/header_scan.rs)

Traditional gateways are blind to VEC (every authentication signal passes, domain reputation is clean). Vigilyx flags it via "this real contact has never discussed bank-account changes before" — the kind of baseline judgment that has successfully alerted finance teams in multiple 2025 replay cases.

Defense

  • Process layer (most important) — any bank-account change must be confirmed by calling back a known phone number (not the number in the email signature). This is the only reliable defense against VEC.
  • Identity layer — require all vendors to enable FIDO2 / passkey MFA on their mailboxes, reducing the upstream compromise rate.
  • Gateway — keep banking_change and behavior_baseline modules enabled and require manual review for any routing/ACH/wire change request.

End-user training

  • "We changed banks" requires a callback to a known number — never reply by email
  • Urgency words ("please process today", "sorry for the late notice") plus account change is extremely high risk
  • A W-9 PDF created in the last few hours is suspicious

Released under AGPL-3.0-only.