Synthesized by Clarity (Claude) from 29 sources · May contain errors — spot one? [email protected] · Methodology →
Device-Code Phishing Kits Drain M365 Tokens With MFA Intact
- Sources
- 29
- Words
- 1,513
- Read
- 8min
◆ The signal
Two actors, Kali365 and EvilTokens, are working hundreds of tenants through Microsoft's own device-code sign-in page. No credentials were phished and MFA was not defeated; the flow issues tokens by design, which is why a passkey rollout does not close it. The path shuts only by blocking the device-code flow in Entra Conditional Access, and prior issuance is worth reviewing across the last 60 days.
◆ INTELLIGENCE MAP
Intelligence map
01 Token Theft That Satisfies Your Controls
act nowTwo off-the-shelf kits, Kali365 and EvilTokens, are abusing Microsoft's device-code sign-in flow across hundreds of M365 tenants. Victims authenticate on the genuine Microsoft page, so MFA is satisfied and the attacker leaves with valid access and refresh tokens. A phishing-resistant MFA rollout does not close this — disabling the flow in Entra Conditional Access does. The same pattern shows up in Zimbra, where attackers mint legacy app passcodes that skip MFA entirely.
- Named kits
- Tenants affected
- Fix effort
02 Iran-Linked PLC Campaign Adds Two Vendors
monitorCISA's July 22 advisory update expands the Iran-linked PLC campaign beyond Rockwell Automation to Schneider Electric and Siemens, and adds guidance on detecting malicious changes in reusable code modules. Thousands of PLCs are still discoverable on Shodan. In the same window, Houthi forces struck two Saudi tankers near Bab el-Mandeb and President Trump threatened 'major military punishment' on Iran — escalation that has historically preceded Iranian cyber retaliation against energy and finance.
- Advisory update
- Exposure
- Oil price
- Original advisoryRockwell Automation PLCs only
- July 22 updateAdds Schneider Electric and Siemens
03 Evasion by Staying Inside Legitimate Mechanisms
monitorCrowdStrike's SANDWORM_MODE research documents an npm worm that mimics a release pipeline so closely that only 2 of 14 observed behaviors crossed the alerting bar. Separately, China-linked JadeProx executes its TriBack Loader through Windows callback functions rather than thread creation, the route most EDR engines profile. Neither has a patch. Coverage here comes from behavioral hunting and purple-team validation, not signature updates.
- Correlation lag
- Loader variants
- New backdoor
- SANDWORM_MODE behaviors that triggered an alert14
04 The CVE Queue Broke at Machine Speed
backgroundOracle shipped 1,449 fixes and the Linux kernel team published 432 CVEs inside 48 hours — 1,881 in a single cycle, with AI-assisted bug hunting cited as a driver. CISA revoked BOD 22-01 and replaced it with BOD 26-04, which mandates risk-based prioritization over count. Your patch-everything SLA is now arithmetically impossible, so exposure and exploitability have to become the queue's sort order.
- Oracle CPU fixes
- Linux kernel CVEs
- Directive change
05 AI Tooling Is Now External Attack Surface
monitorCensys counted 294,000+ internet-exposed IPs running 43 AI and LLM tools, up more than 60% in nine months, led by Langflow and LiteLLM. Anthropic's Claude Cowork carries CVE-2026-46331: the macOS host filesystem is shared read-write into the agent's Linux VM, putting SSH keys and cloud credentials in reach of guest-root. Zenity also showed one click silently wiring an attacker-controlled ChatGPT agent into Outlook, Teams, Slack and SharePoint. None of it is in most ASM scopes.
- Tools tracked
- Growth
- Named CVE
◆ DEEP DIVES
Deep dives
01 The Sign-In Flow You Never Disabled Is Handing Out Refresh Tokens
act now evidence: mediumWhy the mechanism matters more than the kit
The OAuth device authorization grant exists for devices that cannot render a login form: smart TVs, kiosks, CLI tools on headless boxes. The device asks Microsoft for a code, the human types that code into the real login.microsoftonline.com page on a phone or laptop, and Microsoft hands the requesting device an access token and a refresh token. Nothing in that sequence breaks when the requesting device belongs to an attacker. The lure only has to persuade a target to enter a code they were told came from IT.
That is why the two kits now circulating, Kali365 and EvilTokens, are scaling across hundreds of M365 tenants with AI-written lures and automated token capture. There is no credential to steal and no proxy to fingerprint, and the user genuinely completes MFA. The attacker walks away with a refresh token, which survives a password reset and keeps minting access tokens until it is explicitly revoked.
Where the guidance diverges
This is the week's most important disagreement in defensive advice. One line of reporting, anchored on the Kratos/SneakyLog AiTM ecosystem, pushes FIDO2 and passkeys against adversary-in-the-middle phishing. Against a proxy that replays credentials, it works. Device-code abuse is not a proxy attack. The user authenticates directly with Microsoft using whatever strong factor was deployed, and the token is issued to the attacker's device anyway. Phishing-resistant MFA raises the bar on one vector while leaving this one wide open.
The Zimbra campaign reported in parallel is the same class from a different vendor. After exploiting the mail server, the actor mints a Zimbra application passcode of the kind legacy IMAP and ActiveSync clients use, and that passcode bypasses MFA entirely. Patching the server does not revoke it. Two unrelated products, one shared failure: a legitimate secondary credential path the identity controls were never asked to evaluate.
The move
Blocking the device-code flow is a single Conditional Access policy and, for most tenants, an afternoon of work. The hard part is enumerating the handful of genuine kiosk and shared-display scenarios that need an exception before flipping it. The residual risk is any token already issued, which is why the hunt matters as much as the block. Hunt for anomalous token issuance, new device registrations, and stealthy inbox forwarding rules across the last 60 days. Those are the signals that separate a clean tenant from a quiet one.
A refresh token stolen through a flow you approved by design will outlive your password reset, your MFA re-enrollment, and your incident report.
Treat this as the template, not the incident. Every identity platform in production has at least one legacy or convenience authentication path — app passwords, legacy protocol passcodes, service-account secrets, device-code grants — enabled by default and never revisited. That inventory is now a standing deliverable, not a project.
Action items
- Block the OAuth device-code flow in Entra Conditional Access, with named exceptions only for enumerated kiosk and shared-display scenarios
- Hunt 60 days of M365 sign-in logs for anomalous token issuance, new device registrations, and hidden inbox forwarding rules, and revoke refresh tokens on any hit
- Enumerate every legacy secondary-credential path across identity and mail platforms this quarter — app passwords, legacy IMAP/ActiveSync passcodes, device-code grants — and disable or revoke by default
Sources:TLDR InfoSec · SANS NewsBites · Cyberpresso
02 Iran's PLC Campaign Just Tripled Its Vendor Scope
monitor evidence: mediumCISA updated its advisory on July 22. The campaign is Iran-linked and targets PLCs. It started with Rockwell Automation. The update adds Schneider Electric and Siemens to the affected list. The new guidance covers detecting malicious changes in reusable code modules. That is the part worth reading. Compromise the module once and it propagates wherever the module is reused. Thousands of PLCs are still exposed on Shodan. That number has not moved with the advisory.Action items
- Run an external scan of your own and your integrators' netblocks to confirm zero internet-exposed PLCs or HMIs across Rockwell, Schneider Electric, and Siemens estates
- Deploy project-file and reusable-module integrity monitoring on engineering workstations this quarter, alerting on controller downloads outside change windows
- Tune detections for Iranian-APT staples now — password spraying against VPN and Entra ID, and edge-device exploitation — and validate OT segmentation with a tabletop
Sources:SANS NewsBites · Morning Brew
03 Three Actors, One Trick: Execution Inside Legitimate Mechanisms
monitor evidence: highThe detection math, stated plainly
CrowdStrike's SANDWORM_MODE research is the clearest artifact of the pattern. The npm worm it describes uses living-off-the-land techniques. The propagation logic is functionally identical to a release pipeline: reconnaissance resembles dev health checks, propagation mimics git and registry operations, destruction overlaps with cleanup scripts. Of 14 observed behaviors, only 2 met the alerting bar. The events that would correlate into a chain arrive 48 to 96 hours apart. That is beyond the retention window many teams keep on build hosts, so the correlation silently never happens.
The recommended hunt is specific and cheap: process-tree ancestry, looking for a node.js parent process acting on narrowly scoped paths and commands. The query is writable today against existing data, assuming retention on CI/CD and registry systems runs past 96 hours first.
Same idea, different layer of the stack
China-linked JadeProx reaches the same evasion from the endpoint side. Its TriBack Loader pairs a legitimately signed program with a malicious DLL and an encrypted payload, then executes via Windows callback functions rather than thread creation, which is the route most EDR engines actually profile. Two of four variants drop AdaptixC2 beacons. A Claude-Pro-themed lure delivers a previously undocumented backdoor named Beagle. Targeting spans government, healthcare, and education across South-East Asia and Latin America. Investigators found the cluster only because the operators left an Alibaba Cloud staging server exposed. The discovery margin was that thin.
The third data point has no fix. Ukraine's CERT tied a campaign to a legitimate Notepad++ 8.8.3 distribution weaponized through a malicious plugin that extracts a password-protected RAR and loads a C2 client. The developers dispute that any vulnerability exists; plugin loading is documented, expected behavior. Both positions are correct, and that is the problem: no patch will ever close this, so behavioral detection is the entire control.
Campaign Legitimate mechanism abused Why your tooling misses it Detection you can build SANDWORM_MODE (npm worm) CI/CD and registry operations 2 of 14 behaviors alert; 48-96h correlation lag Process-tree ancestry: node.js parent, narrow paths JadeProx TriBack Loader Signed binary + DLL sideload; Windows callbacks EDR profiles thread creation, not callback execution Purple-team the technique; block NameSilo C2 domains Notepad++ plugin abuse Documented plugin loading Vendor disputes it is a vulnerability; AV clean Editor process spawning RAR extraction + outbound C2 The move
The question is not whether the EDR is good. It is which of these three execution paths it actually alerts on. Callback-function execution and signed-binary DLL sideloading are both straightforward purple-team tests. Where they fire, coverage exists. Where they do not, the detection gets written now rather than during an incident. Pair that with the DNS and proxy blocklist work on sylverixstrategy[.]com and license[.]claude-pro[.]com, both NameSilo-registered, and a 90-day retro-hunt behind it.
If an attacker's technique is indistinguishable from your build pipeline, your only remaining advantage is knowing exactly what your build pipeline normally does.
Action items
- Purple-team Windows callback-function execution and signed-binary DLL sideloading against your EDR this quarter, and author detections for every path that fails to alert
- Extend telemetry retention on CI/CD, build, and registry hosts beyond 96 hours now, then run the node.js process-ancestry hunt for SANDWORM_MODE activity
- Add sylverixstrategy[.]com and license[.]claude-pro[.]com to DNS, proxy, and email blocklists and run a 90-day retro-hunt against historical logs
Sources:Cyberpresso · SANS NewsBites · TLDR InfoSec
04 CISA Just Retired Patch-Everything — Your SLA Should Follow
background evidence: mediumThe volume is now a machine-speed phenomenon
Oracle's quarterly cycle carried 1,449 fixes. The Linux kernel team published 432 CVEs in 48 hours. That is 1,881 in a single window, and the reporting points at AI-assisted bug hunting as a driver on both sides. Akamai's Jan Schaumann put the consequence bluntly: triaging individual kernel changes at this rate is infeasible, and CVEs were always a flawed prioritization mechanism even before the volume arrived.
The regulatory answer landed in the same period. CISA revoked BOD 22-01, the KEV-driven, deadline-per-CVE model, and replaced it with BOD 26-04, which mandates risk-based prioritization: exploitability, asset exposure, and business impact instead of count and severity score. For federal agencies that is a compliance change. For everyone else it is regulatory cover to rebuild a vulnerability program that auditors held to the old model.
Two numbers that prove volume is not the problem
The strongest argument for exposure-weighted triage comes from this cycle's exploitation data, not its patch counts. More than 167,000 Palo Alto GlobalProtect instances remain reachable and unpatched against CVE-2026-0257. A fix shipped in May. CISA set a three-day KEV mandate. Qilin ransomware affiliates are chaining it now. That is not a triage failure. It is a remediation-execution failure on a vulnerability already at the top of every list.
Running the other direction: the Zimbra flaw used in the year-long espionage campaign against NATO-adjacent defense, energy, law enforcement, and finance organizations scored just CVSS 6.1. A severity-sorted queue buries it. A zero-click exploit that harvests 90 days of mail, passwords, and 2FA tokens belongs at the top of one. CVSS measures technical severity, not business consequence, and this cycle produced clean evidence in both directions.
Speed is the third input. watchTowr honeypots recorded SharePoint exploitation within hours of a public proof-of-concept. Any SLA measured in weeks is measuring the wrong thing for internet-facing assets.
The move
The programs adapting to this sort the queue on three inputs they can actually source: known exploitation and exploit-prediction signals, internet reachability from an outside-in scan, and business criticality from asset owners. They set SLAs in hours for exploited-and-exposed assets, weeks for internal, best-effort for the long tail, and they publish the tail explicitly so leadership understands the permanently non-empty queue is the designed state.
They also staff it deliberately. The emerging 'VulnOps' framing is worth borrowing for the headcount conversation: this is a continuous engineering function with pipelines and automation, not a monthly report someone produces alongside other duties.
A vulnerability queue is never empty. That is the new baseline, and any SLA that pretends otherwise is fiction.
Action items
- Re-scope vulnerability prioritization to exploitability plus internet exposure plus business impact this quarter, and retire count- and CVSS-based SLAs in writing
- Reconcile your patch-compliance reporting against an outside-in exposure scan this quarter to find the assets reported as patched but still reachable
Sources:SANS NewsBites · Matt Johansen
◆ QUICK HITS
Quick hits
React 19, Next.js, and React Router all shipped security fixes in the same week
GitHub makes a three-day cooldown the default before Dependabot proposes version bumps
CertiK logs $124.1M in physical attacks on crypto holders, with France accounting for 33 of 52 cases
Everest extorted Stadler Rail for $12.3M through a supplier data-exchange platform
Google adds selfie-video account recovery as unified video generation models reach early access
Cursor Router now sends proprietary source code to Grok 4.5 and unnamed outside providers
DTEX maps DPRK IT-worker payments from luckyguys[.]site to OFAC-sanctioned Ryongbong
AI Kill Switch Act would fine frontier labs up to $20M a day for missing shutdown capability
◆ Bottom line
The take.
Stop hardening the front door and inventory the side entrances your vendors built: every legitimate credential path and trusted execution channel you never disabled, owned by name.
Frequently asked
- Why won't a passkey or FIDO2 rollout stop device-code token theft?
- Because it isn't a proxy attack — the user authenticates directly with Microsoft using their strong factor, and Microsoft then issues the token to the attacker's requesting device anyway. Phishing-resistant MFA defeats adversary-in-the-middle credential replay, but leaves the device-code path completely open.
- How do I close the device-code flow without breaking legitimate devices?
- Block the OAuth device-code flow with a single Entra Conditional Access policy, adding named exceptions only for enumerated kiosk, headless CLI, and shared-display scenarios. The block itself is roughly an afternoon of work; the real effort is inventorying those genuine input-constrained cases before you flip it.
- If a refresh token was already stolen, does a password reset revoke it?
- No — a stolen refresh token survives both password resets and MFA re-enrollment, and keeps minting access tokens until it is explicitly revoked. Any confirmed compromise therefore requires an active token revocation, not just a credential reset.
- What signals reveal a tenant that was compromised before the block went in?
- Hunt sign-in logs for anomalous token issuance, newly registered devices, and stealthy inbox forwarding rules. Because the attack phishes no credentials and triggers no failed-login events, these downstream artifacts are the clearest evidence separating a clean tenant from a quietly breached one.
- What other legitimate auth paths deserve the same audit as device-code?
- Audit every legacy secondary-credential path that skips modern identity controls: app passwords, legacy IMAP/ActiveSync passcodes, service-account secrets, and device-code grants. A parallel Zimbra campaign this cycle minted an application passcode that bypassed MFA entirely, confirming the pattern spans vendors and is usually enabled by default.
◆ Same day, different angle
Read this day as…
◆ Recent in security
Keep reading.
- A 32-byte secret Chrome leaks into logs decrypts every passkey a user has ever synced.
- Toronto-Cambridge LLM Worm Runs on Hijacked A100 Without C2
- Storm-2945 Steals Entra Device Codes from Hijacked Gateways
- Adform Ad Tag Swaps Wallet Addresses After Delivery, No Logs
- Escaped Eval Model Pushes Malicious PyPI Package to 15 Systems
Spot an error? [email protected]