TL;DR A short Meeting Notification reached the CFO of a cybersecurity software vendor from a real small-business Microsoft 365 mailbox the attacker had access to, so SPF, DKIM, DMARC and ARC all passed. It offered a voice recording on a throwaway .es domain, above a pasted Microsoft Teams join block whose links all pointed at genuine Microsoft hosts. The block contradicted itself: its printed Meeting ID was a different number from the meeting ID in its own join URL and launcher deeplink. Themis auto-resolved the message as phishing at 89 confidence.
Severity: High Phishing Brand Impersonation Account Takeover MITRE: T1566.002 MITRE: T1078 MITRE: T1684.001 MITRE: T1204.001

The Teams block printed one Meeting ID. Its own join link carried another.

The printed line read Meeting ID: 569 381 411 118 418. The join URL directly above it pointed at teams.microsoft.com/meet/275667226324609, and the Teams launcher deeplink in the same block carried 275667226324609 too. Two numbers, one block, sitting in an email that passed every authentication check the recipient's gateway ran.

That mismatch is the whole story. Everything else about this message was built to look clean, and mostly did.

A clean envelope addressed to the CFO

The message landed in late October 2026 with the subject "Meeting Notification". It went to the CFO of a cybersecurity software vendor focused on API security.

It came from a legitimate small-business Microsoft 365 mailbox the attacker had access to. The headers show MAPI submission from inside that sender's own tenant, X-MS-Exchange-CrossTenant-AuthAs: Internal. Nobody spoofed anything. At the recipient's Google Workspace gateway, SPF passed, DKIM passed under the sender's own selector, and ARC passed with DMARC recorded as pass at the earlier hop. The DKIM body hash matched across both ARC instances, so the body arrived exactly as sent.

Sender-reputation logic had nothing to grab. Link reputation had nothing either: all six URLs in the message scored clean.

What the record did show was a stranger. First-time sender. No mail from the sender to the recipient, none in the other direction, none to anyone else in the organization. And the recipient was the person who approves payments.

Anatomy of a two-part body

The body was short. No signature, no stolen thread, no padding.

The top half was a call to action: a headphone emoji, "LISTEN TO RECORDING", and a stated duration of "1:42 Sec". The duration is lure text, not a measured file length. The link pointed at recording2987372364.es/voice/, which showed a Cloudflare "Verify you are human" interstitial at scan time, so the scanner never saw what sat behind it.

The bottom half, below a horizontal rule, was styled as a Microsoft Teams meeting block: a Join link, a Meeting ID, a Passcode, a "Need help?" link to Microsoft support, a "System reference" line, and a Meeting options link. Every href in that block resolved to a Microsoft host.

That is where the contradiction lived. Not between a link's display text and its destination (the join hrefs here are honest and really do point at teams.microsoft.com), but between the printed number and the number inside the URL.

See Your Risk: Calculate how many threats your SEG is missing

Mapping it to MITRE ATT&CK

TechniqueIDHow it shows up here
Phishing: Spearphishing LinkT1566.002Recording CTA linking to an attacker-controlled .es domain
Valid AccountsT1078Lure submitted from a real mailbox inside a legitimate tenant
User Execution: Malicious LinkT1204.001The attack depends on the CFO clicking "listen"

The 2026 Verizon Data Breach Investigations Report puts the human element in 62% of breaches and credentials in 39% across the full kill chain. A message like this one targets both: a person who acts on a notification, and a session that follows the click.

Why the numbers are the tell

We are not claiming anything about how Teams formats its own invitations. What we can say is narrower and harder to argue with: this block, as delivered, disagrees with itself.

That matters because of what it implies about how the block was made. Someone assembled it. Whether they pasted a real invite and edited a line, or stitched pieces from different sources, the text and the link no longer describe the same meeting. Whether the meeting at 275667226324609 exists at all was not established, and it does not need to be. The inconsistency stands on its own.

It also matters because of where it sits. The Teams block is the part of the message designed to be trusted, the part a reader glances at and files under "routine meeting traffic". A recipient who stops on it for five seconds and compares the two numbers has caught the attack without opening a single link.

The Microsoft Digital Defense Report 2024 puts identity attacks at the center of the threat landscape. When the envelope is real and the links are real, the remaining evidence is internal consistency. That is where this one broke.

How Themis read it without a bad link

Every URL scored clean. Every authentication check passed. A rules-based filter keyed on reputation or DMARC alignment had no reason to stop this message.

Themis auto-resolved it as phishing anyway, with 89 confidence and two labels in the record: Credential Theft and VIP Recipient. The signals it weighed were behavioral: a first-time sender with zero prior correspondence in any direction, a finance executive as the only recipient, and a pre-formatted notification pointing at an unrelated throwaway domain. The incident was closed with a final phishing verdict.

That pattern is the core problem of account takeover from the defender's side. When mail comes from a real account, authentication tells you who sent it, not whether you should trust it. A passing DMARC result proves the domain is the domain. It proves nothing about intent.

The money at stake is not abstract. The FBI IC3 2024 report recorded $2.77 billion in business email compromise losses, and IBM's Cost of a Data Breach 2024 put the global average breach at $4.88 million. CFOs sit at the center of both numbers.

Indicators

TypeIndicatorContext
URLhxxps://recording2987372364[.]es/voice/"Listen to recording" CTA; Cloudflare human-verification page at scan time
Domainrecording2987372364[.]esNumeric-label .es domain; no WHOIS data available
URLhxxps://teams[.]microsoft[.]com/meet/275667226324609Genuine Microsoft host; lure artefact, not a block indicator. Its ID does not match the printed Meeting ID
TextMeeting ID: 569 381 411 118 418Printed Meeting ID that disagrees with the join URL
SubjectMeeting NotificationGeneric notification subject

Teach the five-second check

Training that says "hover over links" does not help when every link in the meeting block really is Microsoft. Give people a check that does:

  • Compare the printed Meeting ID to the number in the join link. If they differ, report it.
  • Treat a recording link outside the meeting block as the real payload. The Teams furniture is there to vouch for it.
  • Route executive-targeted notifications from first-time senders to review, regardless of authentication results.
  • Report, don't reply. CISA phishing guidance is clear that fast reporting is what breaks the attack cycle.

IRONSCALES platform data from 36,000+ security professionals across 18,000+ organizations shows 67.5 phishing emails per 100 mailboxes each month. Some of those will arrive fully authenticated, with nothing but clean links inside. The ones that give themselves away will do it in details like a number that does not match itself.

Email Attack of the Day is a daily series from IRONSCALES spotlighting real phishing attacks caught by Adaptive AI and our community of 35,000+ security professionals. Each post breaks down a real attack. What it looked like, why it worked, and what to do about it.

Related attacks

Attack What happened
DKIM Pass, SPF Pass, DMARC Pass: The Phish That Aced Every Authentication CheckA phishing email passed DKIM, SPF, and DMARC by routing through a compromised Microsoft 365 tenant.
The B2B Content Marketing Email That Borrowed a Brand, a Relay Allow-List, and a Security Vendor's Own URL WrapperA polished B2B research report offer used SelectHub branding, passed through an allow-listed mail relay at SCL -1.
The Fake IRS Notice That Disproved ItselfA forged IRS notice reached a commercial construction contractor with a formal detail table naming a tax year whose return has not been filed.
The Punycode Host That Imitated NothingA patient-portal reward lure pointed at an internationalized-domain subdomain.
The GitLab Alert That Passed Every Filter (Except One Detail Nobody Checked)A GitLab sign-in alert cleared Proofpoint URL Defense and passed SPF/DMARC — then listed a private RFC1918 IP as the sign-in source.

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.