Table of Contents
A shared accounts-payable mailbox at a healthcare services company received one message from a consumer webmail account. The subject line read "[EXTERNAL]: circling back on the email that came in", asserting a conversation already in progress. The platform recorded a first-time sender at high risk, with no prior contact in either direction. There was nothing to circle back to.
It made no request. Two attachments came with it, a PDF and a Word document, both with fifteen-character random uppercase filenames holding no vendor name, invoice reference or date. Both scanned clean, in the least useful sense: there was nothing inside to read.
The Same Picture, Delivered Twice
MF45BTE4HIOPJTY.pdf was 125,191 bytes. U2OOBYP7XZ0G1F5.docx was 143,987 bytes. Extract the single image out of each and the two are byte for byte identical: 123,759 bytes, the same MD5 in both containers.
One rendered asset, two wrappers. Coverage, not sloppiness: whichever viewer the clerk reaches for, the picture appears, and building both costs nothing once the image exists. The JPEG was a plain JFIF with an APP0 segment and no EXIF block, so no camera or software trail survived either.
A PDF With No Fonts and No Links
Direct inspection of the PDF bytes returned a short list. One page, one image XObject, DCTDecode compressed. Zero font objects, the structural confirmation that there is no text layer at all. Zero occurrences of a URI action, JavaScript, an additional-actions dictionary, an open action, a launch action or an embedded file. A link scanner found no link because there was none, and a sandbox no code for the same reason.
Its creation and modification timestamps were identical and landed two seconds before the message's own Date header. This was not a file exported from a billing system; it was generated as the message was composed.
The Word File Was Built by a Library
The DOCX told an even plainer story. Its document properties named python-docx as the creator and carried the description "generated by python-docx". The application statistics reported zero words, zero characters and zero paragraphs, and the document body was 2,369 bytes containing no text runs at all. Its relationship map held only internal package targets: no hyperlink, no external template reference, no OLE object, so the file makes no network request when it opens.
Two metadata fields deserve caution, not a conclusion. The created and modified stamps read as a date more than a decade old, and the application string claimed a Macintosh build of Word. Neither is evidence. Both are defaults baked into the library's starter template, so the file's apparent age and authoring tool are artifacts of the generator, and MITRE ATT&CK counts format choices that obscure content from analysis as a technique in their own right.
What the Picture Actually Said
Opening the extracted image is the only way to learn what the message wanted, and it was not an invoice. It was a QuickBooks branded account suspension notice: a generic "Dear Customer" greeting, a full service subscription plan, a billing date matching the very day the message arrived, and an invoice number matching no record. One section heading was misspelled as "Immidiate Action Required", a proofreading failure that survives only because nobody spellchecks pixels.
There was no payee, no bank account, no routing number, no payment-change request and no URL. The notice held one toll-free phone number, printed four times: on an orange call-to-action button, in the action paragraph, in the auto-renewal small print, and in a signature attributed to a billing team.
That number appears nowhere else. Not in the message text, not in a header, not in any platform field. The record's optical-character-recognition and QR extraction arrays are both empty, so nothing ever turned the image into text and the one malicious artifact in the message went unread.
Dialling it is the whole attack. Callback lures, tracked by MITRE ATT&CK as spearphishing voice and known to defenders as vishing, move the fraud onto a channel with no logging, where a live operator steers toward remote access or a card capture framed as cancelling the charge. The number is not among the vendor's published support lines, but the record holds no lookup against that directory, so treat it as unverified.
See Your Risk: Calculate how many threats your SEG is missing
Every Check Passed, and None Was About the Brand
Authentication at the receiving hop was flawless: SPF pass, DKIM pass with a verified signature for hotmail[.]com, DMARC pass, composite authentication 100. The outer ARC set validated, while the inner set recorded no SPF, no DKIM and no DMARC at all.
None of that is suspicious, and none of it is reassuring. An ordinary webmail account sent ordinary mail through its provider's outbound infrastructure, exactly as designed, which is why every signature verified. The policy that passed is the provider's own permissive consumer DMARC policy, and alignment as defined in RFC 7489 answers only whether the From domain authorized the message. It did. The QuickBooks brand inside the attachment was authenticated by nothing, because it was a drawing. The provider's filter did engage, appending a warning banner rather than blocking, and that banner's three links were the only links in the message.
One relational detail remains. The To header, and the ARC recipient-domain field, named a sibling corporate domain rather than the one the delivered mailbox belongs to. Invisible to a content check, plain in the envelope.
A Person Caught It
Nothing technical did. Both attachments scanned clean, all links scanned clean, every authentication and reputation check passed, and no confidence label was produced at all. The catch was human: the clerk on that shared mailbox reported it with a short comment amounting to not recognizing the sender. That is a relationship judgement, not a content judgement, and the same one the platform had already encoded as a first-time sender at high risk. Quarantine and permanent deletion completed roughly six minutes after arrival.
The 2024 Verizon Data Breach Investigations Report puts a human element in 68 percent of breaches. This case inverts that framing: the human element was the only functioning sensor, because it was the only one evaluating something other than text.
Where the Control Has to Sit
Three moves follow. Convert images in attachments to text and run body rules against the result, so a phone number in pixels lands in the same searchable field as one in prose. Score attachment structure in its own right, since no extractable text, a random filename, a send-time creation stamp and a generator string are all evaluable without reading the content, which is the structural work Themis, the IRONSCALES Adaptive AI analyst, does instead of waiting on a payload verdict. And stop reading a clean verdict as an examined one.
Then give finance teams one rule, consistent with CISA phishing guidance and the behavior NIST describes: never dial a number from an unsolicited billing notice. Look the vendor up independently. A callback lure only pays if somebody calls.
Indicators of Compromise
| Type | Indicator | Context |
|---|---|---|
| **95235@hotmail[.]com | Attacker-controlled consumer webmail sender, also the verbatim Return-Path with no Reply-To divergence; alias masked because the local-part concatenates a two-word personal name, five-digit suffix retained as a pivot | |
| Phone | 8449612648 | The entire payload; toll-free callback number rendered only as pixels inside the image, repeated four times, present in no header or text field |
| File | MF45BTE4HIOPJTY.pdf | One-page PDF, 125,191 bytes, single DCTDecode image, zero font objects, zero URI or JavaScript or launch actions, generated at send time |
| Hash | b32c2248edd2e49d76dffe586031ec7f | MD5 of the PDF container, verified on re-download |
| File | U2OOBYP7XZ0G1F5.docx | Word file, 143,987 bytes, zero text runs, zero words reported in document statistics, one embedded image, no external relationships |
| Hash | f0f9b67bf33900334b771c5489f6f2d4 | MD5 of the DOCX container, verified on re-download |
| Hash | 51c561da95babf01f8d910c769db72f4 | MD5 of the lure JPEG, 123,759 bytes at 1024 by 781; byte-identical inside both containers and the strongest pivot for this campaign |
| Subject | "[EXTERNAL]: circling back on the email that came in" | False-familiarity pretext implying a prior thread, contradicted by a first-time-sender flag and no correspondence in either direction |
| Artifact | Filenames of fifteen random uppercase alphanumeric characters | No vendor name, invoice number or date, inconsistent with any real billing workflow |
| Artifact | Document creator and description strings naming python-docx | Programmatic generation of the Word container; the accompanying old creation stamp and Macintosh application string are library template defaults, not provenance |
| Artifact | "Immidiate Action Required" | Misspelled section heading inside the image, a proofreading tell that no spellchecker will ever see |
| Artifact | Invoice number INV - 427113128 | Printed inside the image with no matching record, alongside a billing date matching the day the message arrived |
| Artifact | Full service subscription plan named in a QuickBooks branded suspension notice | Impersonated brand present only as pixels; no vendor domain sent, signed or was linked from this message |
| Behavior | SPF pass, DKIM pass for hotmail[.]com, DMARC pass under a permissive consumer policy, composite authentication 100 | Genuine webmail account sending genuine mail; certifies the sender, certifies nothing about the impersonated brand |
| Behavior | Provider safety-tip spoof code recorded alongside a low spam confidence level | Filter engaged and appended a warning banner instead of blocking; the banner supplied the only links in the message |
| Behavior | Empty optical-character-recognition and QR extraction arrays | The image was never converted to text, which is why the callback number entered no searchable field anywhere |
| Behavior | To header and ARC recipient domain naming a sibling corporate domain, delivered into a different mailbox | Envelope-level relational anomaly invisible to every content check |
MITRE ATT&CK Mapping
| Technique | ID | Application |
|---|---|---|
| Phishing: Spearphishing Attachment | T1566.001 | Two attachments carrying the whole lure, delivered to a shared finance mailbox |
| Phishing: Spearphishing Voice | T1566.004 | One toll-free number as the only available action, moving the fraud onto a voice channel |
| Impersonation | T1656 | Accounting brand impersonated in a fabricated account suspension notice with no vendor infrastructure involved |
| Obfuscated Files or Information | T1027 | Text-free image payload in two container formats, defeating every string and code check in the path |
See You Next Time
Every scan result on this message was accurate. The lure was a picture, and nobody looked at it. Check back tomorrow.
Related attacks
| Attack | What happened |
|---|---|
| A Real Zoom Alert, Resent by the Attacker Who Asked for It | Zoom really sent this sign-in alert. |
| A Same-Day Domain, a McAfee Calendar Invite, Two Prices | A McAfee renewal scam arrived as a Google Calendar invite from a domain registered the same day. |
| The PayPal Phish With No Link and No Brand Name | The brand was typed only in leetspeak, the substituted glyphs were shrunk a few pixels so they read as letters, and the sole payload was a phone number. |
| McAfee Renewal Scam Sent Under the Victim's Own Name | A fake McAfee renewal receipt carried no link and no attachment. |
| A Real Squarespace Invite Carried a Fake Norton Bill | A genuine Squarespace contributor invitation, sent through SendGrid with every authentication check passing. |
Explore More Articles
Say goodbye to Phishing, BEC, and QR code attacks. Our Adaptive AI automatically learns and evolves to keep your employees safe from email attacks.