Security & Threat Intelligence

The Watch

The Signal

Device-code phishing kits are draining M365 tokens with MFA fully satisfied.

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.

In Play

  1. Token Theft That Satisfies Your Controls

    Two 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.

    Ask Clarity
  2. Iran-Linked PLC Campaign Adds Two Vendors

    CISA'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.

    Ask Clarity
  3. Evasion by Staying Inside Legitimate Mechanisms

    CrowdStrike'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.

    Ask Clarity
  4. The CVE Queue Broke at Machine Speed

    Oracle 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.

    Ask Clarity
  5. AI Tooling Is Now External Attack Surface

    Censys 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.

    Ask Clarity

Deep Dives

The Sign-In Flow You Never Disabled Is Handing Out Refresh Tokens

An OAuth convenience built for input-constrained devices has become the cleanest path into a hardened tenant, and passkeys will not stop it.

Why 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.

What to do

  1. Block the OAuth device-code flow in Entra Conditional Access, with named exceptions only for enumerated kiosk and shared-display scenarios

  2. 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

  3. 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

Iran's PLC Campaign Just Tripled Its Vendor Scope

Vendor expansion and a kinetic escalation window landed in the same days, compressing the time available to get HMIs off the public internet.

CISA 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.

What to do

  1. 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

  2. Deploy project-file and reusable-module integrity monitoring on engineering workstations this quarter, alerting on controller downloads outside change windows

  3. 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

Three Actors, One Trick: Execution Inside Legitimate Mechanisms

None of this cycle's stealthiest campaigns ships a patch you can apply, which makes purple-team validation the only honest measure of your EDR coverage.

The 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.

CampaignLegitimate mechanism abusedWhy your tooling misses itDetection you can build
SANDWORM_MODE (npm worm)CI/CD and registry operations2 of 14 behaviors alert; 48-96h correlation lagProcess-tree ancestry: node.js parent, narrow paths
JadeProx TriBack LoaderSigned binary + DLL sideload; Windows callbacksEDR profiles thread creation, not callback executionPurple-team the technique; block NameSilo C2 domains
Notepad++ plugin abuseDocumented plugin loadingVendor disputes it is a vulnerability; AV cleanEditor 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.

What to do

  1. 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

  2. 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

  3. Add sylverixstrategy[.]com and license[.]claude-pro[.]com to DNS, proxy, and email blocklists and run a 90-day retro-hunt against historical logs

CISA Just Retired Patch-Everything — Your SLA Should Follow

The binding constraint on remediation was never the size of the queue, and two exposure numbers from this cycle show exactly where the losses come from.

The 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.

What to do

  1. Re-scope vulnerability prioritization to exploitability plus internet exposure plus business impact this quarter, and retire count- and CVSS-based SLAs in writing

  2. Reconcile your patch-compliance reporting against an outside-in exposure scan this quarter to find the assets reported as patched but still reachable

The bottom line

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.