Table of Contents
A national staffing and recruiting firm received a message that rendered as a Microsoft OneDrive document-share notice. The word OneDrive sat at the top in large grey text, a single Open button occupied the middle, and Microsoft's corporate mailing address closed it out. There was no attachment, but the body named a document, a policy and benefit report titled with the firm's own legal entity name.
The message was not the interesting artifact. The file was. Whoever assembled the HTML left the previous pretext inside it, still declared, alongside styling for a QR code that was not in the message and a stylesheet written for debugging. It was a reusable multi-pretext template caught mid-swap, and nobody cleaned it before pressing send.
Two Title Declarations, Two Unrelated Pretexts
The document head declared a title of sup, a throwaway placeholder. Then, mid-body, after the OneDrive block had already rendered, a second title element appeared and declared something else entirely: that the recipient had been promoted and assigned a new role within the firm. A promotion notice and a document share are separate campaigns that happen to share a chassis.
Two more leftovers sat in the same file. The head carried a debug stylesheet, h1 {color:red;} p {color:blue;}, matching no element the message used. And the body defined .qr-section and .qr-code rules, the latter a 200 by 200 pixel grey placeholder block, even though the record confirms no QR code and no image-text objects were present. That CSS is residue from a QR-code variant of the template, not evidence of one here.
The markup itself was built in a marketing campaign designer: an ESP campaign class on the container, an editor-version attribute, per-module identifiers on every block, and two images loading over plain HTTP from that ESP content delivery network. Yet no ESP hop appears anywhere in the delivery chain. The template was designed in one tool and delivered by a completely different path. A signature written against the promotion pretext would have missed this send, and one written against this document share will miss the next, because the operator is rotating stories inside a fixed shell.
The Safe-List Banner Was Part of the Payload
Above the lure sat a green-tinted table with a thick left border, styled to read as system chrome. It asserted that the sender was approved for the recipient's organization, and beneath that: "This message was delivered from a verified sender on your safe list."
No gateway said that. No mail client said that. The attacker wrote it, in HTML, inside the body. Nothing in a rendered message distinguishes a trust indicator written by an attacker from one added by the platform.
The personalization was equally cheap. The subject line began with the recipient's own mailbox local-part, then a generic reminder about one pending document and a random five-character reference token. No prior knowledge was required, only the address the mail was already going to.
See Your Risk: Calculate how many threats your SEG is missing
The Only Real Link Went to a Design Platform
The single Open button resolved, through the recipient gateway's URL-protection wrapper, to a subdomain of Adobe's Portfolio hosting service. Portfolio is a legitimate publishing product, which is exactly why it is useful here: the destination inherits a well-known apex domain and a reputable certificate, and there is no attacker-registered domain for a blocklist to score. Whether that subdomain was stood up by the operator or taken over is not established, and neither is what it served. Both links scanned clean and neither was screenshotted.
Three Hops, Three Different Verdicts
At the injection hop, the message was as unauthenticated as mail gets. SPF failed for the connecting address, DKIM was recorded as none because the message was not signed, DMARC failed under the sending domain's p=none policy, and there was no ARC chain. One hop later, at the recipient organization's inbound gateway, the same message evaluated as DKIM pass on a selector1 signature, SPF pass, ARC pass, and DMARC pass. In between, cloud mail infrastructure had signed the body as it stood at that first hop. An unauthenticated injection had been laundered into a full pass without the attacker ever holding a key.
The final hop reported the opposite again: SPF fail, DKIM fail with a body hash that did not verify, DMARC fail, and composite authentication of none. Both failures are mundane. The failing SPF address is the recipient gateway's own relay, and that same gateway rewrote every URL into its protection wrappers after the signature was applied, which alone invalidates a body hash. The record cannot separate that rewriting from attacker modification, so the body-hash failure is not evidence of tampering here. It is evidence that authentication results are per-hop facts about a path, not verdicts about a message. Under RFC 7489, a p=none policy asks for no enforcement anyway, so none of the three answers changed the outcome.
The sending domain deserves a word of defense. It is roughly a quarter-century old, and at the injection hop the message arrived unsigned and SPF-failing for it. Its infrastructure was used as a laundering hop, which makes it a bystander, not the adversary. The injecting address has no reverse-DNS registration record, so no attribution is available.
Nothing In The Path Stopped It
Every control the message passed through waved it on. Microsoft assigned it a spam confidence level of minus one with a skip verdict, the gateway scored it a one, and every impersonation-protection check returned false, including newly observed domain and reply-to mismatch, because there was no lookalike domain or reply-to trick to find.
Themis, our Adaptive AI analyst, flagged the message at 90 percent confidence with a credential-theft classification, drawing on content patterns, sender behavior, and community reputation. That is a classification, not an observation: no harvesting page was ever captured. The incident reached the platform through a community report and surfaced in a retroactive scan weeks after delivery, not inline, and the single affected mailbox shows no mitigation date, no action, and no status. The message sat in an inbox the whole time.
What Defenders Should Take From This
Kit hygiene is a detection surface attackers rarely audit. Duplicate title declarations, unused class definitions, debug styles matching nothing, and campaign-designer markup without a matching delivery hop are all cheap to extract. The 2024 Verizon Data Breach Investigations Report puts phishing in 15 percent of breaches and stolen credentials in 38 percent, and records a median of 21 seconds from opening a phishing message to clicking its link. That is less time than a reader needs to notice a green banner asserting its own trustworthiness.
Treat any in-body trust assertion as hostile until proven otherwise, and say so in awareness training rather than teaching users to hunt for badges. Evaluate authentication per hop, because a clean gateway verdict can be describing a laundered path. And detect on template structure and sender behavior rather than on the pretext, which is the one part of this file the operator changes weekly. CISA's phishing guidance and the NIST definition of phishing frame it the same way: the delivery shell is durable, the story is disposable. The 2023 FBI Internet Crime Report attributes roughly 2.9 billion dollars in reported losses to business email compromise, and campaigns like this one build the inventory of warm mailboxes behind it.
Indicators of Compromise
| Type | Indicator | Context |
|---|---|---|
| Domain | olerrelofd65[.]myportfolio[.]com | Sole CTA destination, a subdomain of Adobe's Portfolio platform. Never captured; scanned clean. |
| URL | hxxps://url[.]us[.]m[.]mimecastprotect[.]com/s/1qt8CrkWRBh7zDqBH7f0U4dY-J?domain=olerrelofd65[.]myportfolio[.]com | Delivered href behind the Open button, after gateway rewriting. |
| IP | 192[.]30[.]241[.]89 | Unauthenticated injection host at hop one. Ownership not established. |
| Hostname | wynne[.]ladsedon[.]com | Reverse-DNS name of the injecting address. No registration record; no attribution. |
| URL | hxxp://cdn[.]mcauto-images-production[.]sendgrid[.]net/07d9ac8cc71e2271/b7a41c25-c3a6-4092-9b17-fefec5f4a1f1/225x225[.]png | Template image over plain HTTP from an ESP CDN absent from the delivery chain. |
| URL | hxxp://cdn[.]mcauto-images-production[.]sendgrid[.]net/07d9ac8cc71e2271/abbccc15-8968-425b-89ef-32d234b65424/512x256[.]png | Second template image, same CDN, same plain HTTP. |
| Display name | Share Document 1614178157 | Generic share label plus a ten-digit string, on an unrelated third-party domain. |
| Subject pattern | {recipient local-part} Reminder: One pending document awaiting review and Ref-dBvGk | Mailbox local-part as the first word, plus a random five-character token. |
| Filename | {victim org} Updated Policy & Benefit Report.docx | Named in the body for an attachment that does not exist. |
| CSS artifact | .qr-section and .qr-code | Unused rules for a 200 by 200 pixel QR placeholder; no QR code present. |
| Style artifact | h1 {color:red;} p {color:blue;} | Debug stylesheet in the head, matching no rendered element. |
| Auth pattern | dkim=none then dkim=pass s=selector1 then dkim=fail (body hash) | One message, three hops, three verdicts. The final failure follows gateway URL rewriting. |
MITRE ATT&CK Mapping
| Technique | ID | Observed behavior |
|---|---|---|
| Phishing: Spearphishing Link | T1566.002 | One Open button as the only action, no attachment despite a named document. |
| Impersonation | T1656 | OneDrive wordmark, Microsoft's corporate address, a forged safe-list banner. |
| Acquire Infrastructure: Web Services | T1583.006 | Destination on a subdomain of a mainstream publishing platform. |
| Stage Capabilities: Link Target | T1608.005 | Landing host live and reachable at send time. |
| Masquerading: Match Legitimate Name or Location | T1036.005 | Filename built from the employer name, subject from the mailbox local-part. |
Related attacks
| Attack | What happened |
|---|---|
| An Attacker Phished Us Through Two Competing Security Vendors. Here's What Happened. | A credential theft campaign targeted IRONSCALES billing using a Trello e-signature template, SendGrid delivery infrastructure. |
| DocuSign Kit So Reused It Left a Hearing-Aid Signature | A DocuSign credential-phishing kit was recycled so carelessly it still carried a hearing-aid retailer's email signature. |
| Insurance Claim PDF Hides JavaScript Behind AcroForm Fields and SendGrid Redirects | A polished insurance claim notification delivers a PDF with interactive AcroForm fields and obfuscated JavaScript auto-execute tokens. |
| A Homoglyph Brand Spoof Rode Amazon SES and S3 | A fully authenticated Amazon SES email used Cyrillic homoglyphs to spoof a logistics brand. |
| A Real OneDrive Share Email, Built to Map an Inbox | A throwaway outlook.com account used Microsoft's own OneDrive share notification to reach a school district. |
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.