Real breaches, each put through the same four questions: one control that worked, one that did not, one number worth watching, and what should have been done instead. Every entry cites a primary source, because the point of this section is that you can take it to a meeting.
Unit 42, 6 October 2026CVE-2026-88771CVE-2026-88772
Drafted from the advisory Nobody here has read this one yet. The four answers below are quoted from the source document and attributed to it, so you can check every one of them against the advisory itself. Nothing in this entry was written here.
We discovered that an Iranian state-aligned threat actor has been masquerading as the Dubai Airports IT department to deliver trojanized coding challenges to high-value targets. Unit 42 tracks the activity as CL-STA-1178. This activity includes a campaign we call “Blinder Tunnel,” that targeted Iraqi critical infrastructure in March 2026, following infrastructure staging that was observed as early as November 2025. We named the campaign Blinder Tunnel after infrastructure terms the attackers used, as well as the malware’s tunneling capabilities.
What worked
Unit 42 does not name a control that held here. Read that as a finding in itself: these write-ups are built from what responders actually found, and one with no successes in it is usually describing a network that had none.
What failed
Unit 42 groups the failures under four headings: dubai airports careers portal, recruitment coding challenge, three-step infection chain, and stage one: malicious.csproj file. “Starting in late March 2026, the threat actor launched a social engineering campaign disguised as a professional recruitment process to compromise a specific individual, likely a software engineer. We identified this campaign through VirusTotal, following multiple file submissions from a submitter based in Iraq.”
The number
63 second
Beacon (63-second interval): This timer drove the primary C2 loop.
What to do instead
Cortex AgentiX Agentic Assistant streamlined this investigation by allowing the team to query the data using natural language, providing deeper context and insights, and suggesting clear recommendations on what researchers should do next. Figures 16 and 17 show examples of this.
Antivirus in monitor mode, and eight weeks inside the national health network
PwC, 'Conti cyber attack on the HSE: Independent Post Incident Review', commissioned by the HSE Board, 3 December 2021
Not yet reviewed This one was written here from the source and has not yet been signed off, so it carries no byline. Every factual claim in it comes from the document linked below and can be checked against it. The judgements are ours, and until somebody has been back through them they are marked as unverified rather than presented as settled.
On 18 March 2021 a workstation at Ireland's Health Service Executive was infected when its user opened a malicious Excel file attached to a phishing email sent on 16 March. The attacker operated in the environment over an eight week period, compromising highly privileged accounts, servers, and six voluntary hospitals and one statutory hospital, before executing Conti ransomware at about 01:00 on 14 May 2021. The HSE switched off all its IT systems and disconnected the National Healthcare Network from the internet, and recovery efforts continued for over four months.
What worked
The Department of Health acted on an alert from its security provider on 13 May, contacted the NCSC and had endpoint detection and response tooling installed, which blocked the ransomware across the vast majority of its infrastructure. Hospital A brought in an incident response provider on 12 May, reset passwords for 4,500 accounts and changed firewall configuration. The HSE's shutdown on 14 May removed the attacker's access. PwC also lists as mitigating factors the relative simplicity of the attack and the attacker's release of a decryption key on 20 May.
What failed
On 31 March the HSE's antivirus detected Cobalt Strike and Mimikatz on the first infected workstation, but it was set to monitor mode and did not block them; that workstation had not had antivirus signatures updated for over a year. On 13 May the HSE's security provider emailed the Security Operations team about unhandled threat events since 7 May on at least 16 systems, and the team asked the Server team to restart servers. When Hospital A asked about two IP addresses, the HSE incorrectly concluded that the suspicious activity originated from Hospital A. Hospital C was advised that its risk was low because antivirus had remediated its Cobalt Strike alerts, and did not start an investigation. PwC found there was no security monitoring capability able to effectively detect, investigate and respond to alerts across the HSE's IT environment.
The number
8 weeks
the attacker operated inside the environment, through several detections, before the ransomware was executed.
What to do instead
Run endpoint protection in blocking mode, keep signatures current, and make a named team answerable for every unhandled detection within a fixed time. A Cobalt Strike or Mimikatz detection is an incident by definition, even when the antivirus reports it cleaned; restarting the server is not a response. When a connected organisation reports suspicious traffic from your addresses, examine your own hosts first. Build a monitored security operations capability with authority across the whole network, take offline backups on a fixed schedule, and keep a prioritised list of clinical systems ready for recovery.
An out-of-date mailing list, an expired certificate, and 76 days unseen
US Government Accountability Office, GAO-18-559, 'Data Protection: Actions Taken by Equifax and Federal Agencies in Response to the 2017 Breach', August 2018
Not yet reviewed This one was written here from the source and has not yet been signed off, so it carries no byline. Every factual claim in it comes from the document linked below and can be checked against it. The judgements are ours, and until somebody has been back through them they are marked as unverified rather than presented as settled.
On 10 March 2017 unidentified individuals scanned Equifax's systems for an Apache Struts vulnerability that US-CERT had publicly identified 2 days earlier, found it on the server housing the online dispute portal, and confirmed they could run commands. Beginning on 13 May 2017 attackers used the portal to query other databases, ran approximately 9,000 queries and removed data in small increments over encrypted channels. The breach exposed personal information of at least 145.5 million individuals and lasted about 76 days before Equifax discovered it on 29 July 2017. GAO's account rests on what Equifax officials told it and was not independently assessed.
What worked
Discovery came from routine work: a network administrator checking the operating status and configuration of IT systems found the misconfigured inspection device and replaced its expired certificate. Once inspection of traffic resumed, the administrator recognised signs of an intrusion, Equifax blocked several Internet addresses, and the portal was taken offline on 30 July 2017. GAO notes that logs on the affected systems had not been damaged or erased, which let Equifax reconstruct the attackers' actions and determine what data was compromised.
What failed
Equifax circulated the US-CERT notice to its systems administrators, but the recipient list was out of date, so the people responsible for installing the patch did not receive it. A network scan a week after the vulnerability was identified did not detect it on the dispute portal. The digital certificate on a device installed to inspect network traffic had expired about 10 months before the breach, so encrypted traffic passed uninspected throughout it. Databases were not segmented, which let the attackers move from the 3 databases associated with the portal to an additional 48 unrelated databases, helped by a repository of unencrypted usernames and passwords. Nothing restricted the frequency of database queries.
The number
76 days
the attack ran before it was discovered, while an expired certificate left encrypted traffic uninspected.
What to do instead
Do not route a critical patch notice through an email distribution list: tie advisories to an asset inventory that names an owner for every internet-facing application, and require a positive acknowledgement. Verify patching with authenticated scans, and treat a clean scan for a technology you know you run as a question, not an answer. Monitor certificate expiry on security tooling as closely as on public websites, and alert when an inspection device stops inspecting. Segment databases, keep credentials out of plain-text stores, and rate-limit queries so that thousands of them look abnormal.
One terminal server outside MFA, and a server estate encrypted or destroyed
British Library, 'Learning lessons from the cyber-attack: British Library cyber incident review', 8 March 2024
Not yet reviewed This one was written here from the source and has not yet been signed off, so it carries no byline. Every factual claim in it comes from the document linked below and can be checked against it. The judgements are ours, and until somebody has been back through them they are marked as unverified rather than presented as settled.
On 28 October 2023 a ransomware attack claimed by the Rhysida gang exfiltrated some 600GB of files from the British Library, encrypted or destroyed substantial portions of its server estate and locked all users out of the network. The first detected unauthorised access was at a Terminal Services server installed in February 2020 for trusted external partners and internal IT administrators, where access was not subject to MFA. The Library paid no ransom, the data was dumped on the dark web, and the rebuild of its infrastructure was still under way when the review was published.
What worked
At 00:21 on 26 October the Library's monitoring system automatically blocked suspect activity, and the IT Security Manager was alerted at 01:15. A different software system identified and prevented the encryption attack from executing on the laptop and desktop estates. Cloud-based email, finance, HR and payroll systems functioned normally throughout. The review says enhanced encryption protected the unedited Electoral Roll database, PCI DSS controls meant no credit card data was compromised, and backups unaffected by the attack were confirmed in December.
What failed
MFA was introduced in 2020 for cloud applications, but connectivity to the Library's domain and on-premise servers was left out of scope for reasons of practicality, cost and impact on ongoing programmes; the risk was raised and, in the review's words, perhaps under-appraised. After the 26 October alert the block was extended, a vulnerability scan came back with no results, and the account was given a password reset and unblocked later that day; the review now believes this was hostile reconnaissance. The legacy network topology allowed the attackers wider access than a modern design would have, and older defensive software on the server estate could not resist the attack. The 440GB that left the estate at 1.30am on 28 October was identified by Jisc only after the Library alerted it. Destroyed servers meant that secure copies of the collections had no viable infrastructure to be restored to.
The number
600GB
of files copied and exfiltrated, just under half a million documents, then dumped on the dark web when no ransom was paid.
What to do instead
Put MFA on every remote access route, supplier and administrator routes first, and give any exception made for cost or convenience a named owner and an expiry date. Treat a blocked intrusion as the start of an investigation: a password reset followed by an unblock is not a review. Segment the network so that one terminal server cannot reach the whole estate, and manage third-party access through privileged access management. Keep immutable offline backups, and also make sure there is somewhere clean to restore them to. Report accepted low-level risks to senior management in aggregate, a weakness the review identifies in the Library's own risk process.
One engineer's laptop, and a 2FA-backed session that reached production secrets
CircleCI, 'CircleCI Jan 4, 2023 security incident report' (circleci.com/blog, dated 12 January 2023)
Not yet reviewed This one was written here from the source and has not yet been signed off, so it carries no byline. Every factual claim in it comes from the document linked below and can be checked against it. The judgements are ours, and until somebody has been back through them they are marked as unverified rather than presented as settled.
Malware on a CircleCI engineer's laptop, compromised on 16 December 2022, stole a valid, 2FA-backed SSO session. The engineer's regular duties included generating production access tokens, so the intruder reached a subset of production systems, carried out reconnaissance on 19 December and on 22 December exfiltrated customer environment variables, tokens and keys. CircleCI learned of the intrusion after a customer reported suspicious GitHub OAuth activity on 29 December, and told all customers to rotate their secrets on 4 January 2023.
What worked
A customer's report on 29 December started the investigation, and by 4 January CircleCI had established the scope and the entry path. The report says the company's authentication, security and tracing tools allowed it to diagnose and remediate the issue comprehensively. CircleCI shut down the compromised employee's access, cut production access to a very small group, rotated all potentially exposed production hosts, and revoked or rotated Project API tokens, Personal API tokens, Bitbucket tokens and GitHub OAuth tokens on customers' behalf.
What failed
The malware was not detected by CircleCI's antivirus software. Because the theft was of a session cookie, the second factor had already been satisfied and the intruder could impersonate the employee from a remote location. The exfiltrated data was encrypted at rest, but the intruder extracted encryption keys from a running process. The first warning came from a customer on 29 December, after the last recorded unauthorised activity in production on 22 December. Rotating every customer's GitHub OAuth tokens began on 31 December and was not complete until 7 January.
The number
Fewer than 5
customers had reported unauthorised access to third-party systems when the report was published, yet every secret stored on the platform had to be treated as exposed.
What to do instead
Assume a completed MFA challenge can be stolen as a session cookie and design for it: short session lifetimes, device-bound sessions, and step-up authentication before production access or token generation. One engineer's routine privileges should not include minting production access tokens without a second control. Encryption at rest gives little protection when the keys sit in a process an intruder can read, so hold keys where each use is separately authorised and logged. If you store secrets with a CI provider, prefer short-lived OIDC tokens, restrict inbound IP ranges, and rehearse a full secret rotation before you need one.
Four credentials believed unused, and the Atlassian server they opened
Cloudflare blog, 'Thanksgiving 2023 security incident', 1 February 2024
Not yet reviewed This one was written here from the source and has not yet been signed off, so it carries no byline. Every factual claim in it comes from the document linked below and can be checked against it. The judgements are ours, and until somebody has been back through them they are marked as unverified rather than presented as settled.
From 14 November 2023 a threat actor used one access token and three service account credentials, taken in the October 2023 Okta compromise and never rotated, to probe Cloudflare and then reach its self-hosted Atlassian server. The actor accessed Confluence and Jira, created an Atlassian user account, installed the Sliver framework through the ScriptRunner for Jira plugin, and viewed 120 code repositories, 76 of which Cloudflare treats as exfiltrated. Cloudflare detected the actor on 23 November and terminated all access on 24 November.
What worked
On 23 November the actor added the Smartsheet service account to an administrator group at 15:58, an automated alert reached the security team at 16:00, and the SOC deactivated the account at 16:35. The actor's attempts on Cloudflare's Okta instance and the Cloudflare Dashboard were denied, and the attempt to reach a console server for the not yet in production São Paulo data centre failed. Cloudflare credits access controls, firewall rules and hard security keys enforced through its own Zero Trust tools for limiting lateral movement, and says no customer data or systems were affected.
What failed
Out of thousands of credentials leaked in the Okta compromise, one service token and three service accounts were not rotated because they were mistakenly believed to be unused. The Moveworks service token granted remote access into the Atlassian system, and the Smartsheet service account held administrative access to Jira, which let the actor create a lasting user account and install Sliver. The actor first gained access to Atlassian services on 15 November and was not noticed until the administrator group change on 23 November. A non-enforced ACL is what allowed the attempt on the São Paulo console server to be made at all. The clean-up, named Code Red, ran from 27 November to 5 January and included rotating more than 5,000 production credentials and forensic triage of 4,893 systems.
The number
4 credentials
out of thousands leaked in the Okta compromise were left unrotated, because they were believed to be unused.
What to do instead
After a supplier breach, rotate from an inventory and not from memory: a credential counts as unused only when logs prove it, and then it should be deleted rather than left in place. Do not give SaaS integration accounts administrative rights over the systems they plug into. Alert on changes to administrator groups, since that is the detection that fired here. Hold staging and pre-production equipment to the same enforced ACLs as production. Expect the clean-up to cost far more than the rotation you skipped.
One service account password in a personal Google profile, and 134 customers' support files
Okta Security, 'Unauthorized Access to Okta's Support Case Management System: Root Cause and Remediation', 3 November 2023
Not yet reviewed This one was written here from the source and has not yet been signed off, so it carries no byline. Every factual claim in it comes from the document linked below and can be checked against it. The judgements are ours, and until somebody has been back through them they are marked as unverified rather than presented as settled.
From 28 September to 17 October 2023 a threat actor used a service account to reach files in Okta's customer support system associated with 134 customers. Some were HAR files containing session tokens, which the actor used to hijack the Okta sessions of 5 customers. Okta found that an employee had signed in to a personal Google profile in Chrome on an Okta-managed laptop, and the service account's username and password had been saved into that personal Google account, which Okta considers the most likely route of exposure.
What worked
Customers raised the alarm: 1Password reported suspicious activity to Okta Support on 29 September and BeyondTrust on 2 October. The turning point was an IP address supplied by BeyondTrust on 13 October. With it, Okta identified the service account on 16 October, disabled it and terminated its sessions on 17 October, and revoked the session tokens embedded in the HAR files.
What failed
For 14 days of active investigation Okta did not identify the suspicious downloads in its own logs. Its analysts looked at access to support cases, but the actor went straight to the Files tab of the support system, which generates an entirely different log event with a different record ID. The service account's credential was stored in the support system itself and carried permission to view and update customer support cases. Blocking personal Google profiles in Chrome on Okta-managed laptops was a remediation applied only afterwards. A gap in the support system logs also hid the final hours of the actor's access, so further downloaded files were only found on 19 October.
The number
14 days
of active investigation in which Okta did not identify the suspicious downloads in its own logs.
What to do instead
Block personal browser profiles and password sync on managed devices through enterprise browser policy, rather than trusting staff not to sign in. Keep service account secrets in a vault, scope them narrowly, and alert on any use from an unfamiliar network. Before an incident, list every log event type your SaaS vendors emit for file access and test that your hunt queries catch each route to the same data. Treat HAR files as credentials: strip session tokens before they are uploaded and keep token lifetimes short. When two customers report the same oddity within days, assume the common factor is you.
Twenty-one agencies, eleven countries, and the logs were deleted
CISA Advisory AA25-239A, Countering Chinese State-Sponsored Actors Compromise of Networks Worldwide to Feed Global Espionage SystemCVE-2024-21887CVE-2024-3400CVE-2023-20273CVE-2023-20198CVE-2023-46805CVE-2018-0171
Twenty-one agencies from eleven countries put their seals on this advisory, which is the first thing to notice about it. PRC state-sponsored actors have been inside telecommunications backbone routers, provider edge and customer edge routers since at least 2021, and have used those compromised devices and their trusted connections to pivot into further networks. The named sectors are telecommunications, government, transportation, lodging and military infrastructure. The equipment spans Cisco IOS XE, NX-OS and IOS XR, Palo Alto PAN-OS and Ivanti Connect Secure, with Juniper, Fortinet, Nokia, Sierra Wireless and SonicWall suspected. What is taken is call data logs, a limited number of private communications, and material subject to court-ordered law enforcement requests.
What worked
The advisory does not say. It notes a single case in which "The APT actors were stopped before further actions could be taken" and gives no account of how, which is the only defensive outcome in the whole document.
What failed
The evidence, deliberately. This is the entry in this section where the forensic failure is the finding.
The actors modify access control lists to add their own IP addresses, so their traffic is permitted by policy rather than hidden from it. Then they disable logging, stop logs reaching central servers, delete and clear what is on the device, and revert configuration files so the modifications leave no trace. An investigation that starts on the router starts with nothing.
Underneath that sit the ordinary failures the advisory describes as avoidable. Five exploited vulnerabilities, the oldest from 2018, all with patches available. Weak and default SNMP community strings. TACACS+ and RADIUS traffic in cleartext or weakly protected forms. Cisco Type 5 and Type 7 password storage where Type 8 belongs. Management services listening on the internet. Guest Shell enabled on devices that have no use for it, which the advisory notes is "not monitored closely".
The number
21 agencies
from eleven countries co-sealed this advisory, which is a fair proxy for how widely the same actors were found in the same kind of equipment.
What to do instead
Get the logs off the device first, before anything else on this list. The actors’ entire evasion strategy is to control what the router remembers, and it only works while the router is the only place that record lives. Forward to a central server with immutable storage and a retention period long enough to investigate with, at informational level or better, and treat a device that stops sending as an incident rather than as a monitoring gap.
Then move the management plane out of reach. CISA’s wording is to place every management service, SSH, HTTPS, SNMP, TACACS+, RADIUS, SCP and SFTP, strictly into a dedicated out-of-band management network or a management VRF. That one change removes most of what the rest of the advisory describes.
Then patch the five and fix the defaults. CVE-2024-21887, CVE-2024-3400, CVE-2023-20273, CVE-2023-20198 and CVE-2018-0171 are the priority list. Change every weak and default SNMP community string and move to SNMPv3 only. Switch to Type 8 password storage. Require public-key authentication for administrators and disable password authentication where you can. Turn off Guest Shell and Smart Install.
And audit the configuration as a detection rather than as housekeeping. An access control list carrying an address nobody recognises, an unexpected tunnel, a new SPAN or ERSPAN session, a packet capture command, a TACACS+ redirect: each is a specific thing to go and look for, and not one of them will alert on its own.
Ransomware that never runs on any of your machines
Datadog Security Labs, Holding blobs for ransom: Four methods for Azure Storage ransomware
Datadog sets out four ways an attacker who already has access to an Azure subscription can encrypt a victim’s stored data without ever deploying ransomware to a host. Two of the four are not theoretical: the first is the route used in a BlackCat deployment in 2023, and the third documents STORM-0501 activity. The other two are researcher demonstrations that Datadog says have not been seen in public reporting. The shape they share is that the attacker turns the platform’s own encryption features against the data, so from the storage service’s point of view every operation is legitimate and authorised.
What worked
Azure’s defaults do some real work and Datadog says so. Microsoft requires soft-delete on any key vault used for customer-managed key encryption of storage, which leaves a window in which a deleted key can be recovered rather than a permanent loss.
What failed
The logs, which is the finding that matters to anybody who would have to investigate this. Datadog is specific twice. Azure resource logs "do not log the x-ms-encryption-key-sha256 header, making usage of CPKs difficult to detect", and "the usage of encryption scopes in storage operations is not logged in storage resource logs". Two of the four encryption routes leave no trace in the logs you would reach for first.
And the protection that does exist can be shortened rather than defeated. The soft-delete retention that would have given you 90 days can be set by the attacker to its minimum of seven before the key vault is linked to the storage account. Ninety days is a recovery window. Seven days is a long weekend.
The number
7 days
the minimum soft-delete retention an attacker can set before linking a key vault to the storage account, in place of the 90 days the default would otherwise have given you to recover the key.
What to do instead
Turn the recovery controls on before you need them, because not one of them can be applied afterwards. Versioning, immutability policies and resource locks on storage, and Azure Defender for Storage for detection. Data that is already encrypted cannot be retroactively versioned.
Then close the logging gap by watching the control plane instead of the data plane. If customer-provided keys and encryption scopes do not appear in storage logs, the observable events are elsewhere: a key vault created and a key generated and then deleted in quick succession, a customer-managed key configuration pointing at a tenant that is not yours, a soft-delete retention being shortened, protection features being removed. Datadog lists each of those, and they are the detections that survive the gap.
Then take long-lived credentials out of the picture. This is an identity attack with a storage outcome, and all four methods begin from access somebody already held. Short-lived, narrowly scoped tokens is the control at the real entry point rather than at the visible one.
And rehearse the recovery. A cloud storage account is exactly as restorable as the versioning and immutability you configured in advance, and nobody wants to find out which they have during the incident.
A search for monitoring software, and ransomware forty-four hours later
The DFIR Report, From Bing Search to Ransomware: Bumblebee and AdaptixC2 Deliver Akira
A user searched Bing for ManageEngine OpManager and was lured to opmanager[.]pro, a lookalike domain, where they downloaded a trojanised MSI. It dropped the Bumblebee loader, which called home. Five hours later the operator deployed an AdaptixC2 agent, created domain accounts with Enterprise Admin privileges and installed RustDesk. Over the next two days they moved by RDP to a domain controller, used wbadmin to extract the NTDS.dit Active Directory database, and pushed roughly 77GB out to a server in Ukraine across two transfer sessions of about four and a half hours each. Akira ransomware landed approximately 44 hours after initial access, executed 39 times in the child domain, with shadow copies deleted through WMI.
What worked
One detection is recorded and it is worth knowing about: a Sigma rule for system file execution location anomaly fired, because it looks for commonly abused Windows binaries such as consent.exe running outside their normal path. No named control stopped the intrusion, and the report does not claim one did.
What failed
Two days of Enterprise Admin. The report documents the intrusion rather than the defence, so this is read from the timeline rather than from a statement anybody made.
New domain accounts were created with Enterprise Admin privileges on the first day and used for two more. A remote access tool was installed and left running. Two transfer sessions of about four and a half hours each moved 77GB to a single external address. The directory database was extracted with wbadmin, a built-in backup utility. Any one of those is a detection most organisations believe they already have.
CISA’s advisory on this ransomware family puts the pace in context. In some incidents, Akira operators "exfiltrated data in just over two hours from initial access". Forty-four hours was not fast for this actor.
The number
44 hours
from a search result to ransomware, with roughly 77GB exfiltrated and Enterprise Admin accounts created on the first day.
What to do instead
The report carries no mitigations, so these come from CISA’s joint advisory on this ransomware family, which does.
Start with the two that decide the outcome. Offline, immutable backups covering the whole estate, proven by an actual restore rather than by a green tick. And MFA on everything reachable from outside, especially the VPN, which is where this family gets in when it is not a poisoned download.
Then make privilege creation loud. An account added to Enterprise Admins is a handful of events a year in most organisations and it should wake somebody. CISA’s list includes reviewing domain controllers and directories for new or unrecognised accounts, which is the same control read from the other end and much too late.
Then watch the built-in tools. wbadmin against NTDS.dit, vssadmin deleting shadow copies, WMI removing recovery: all administrative utilities doing administrative things, which is exactly why they are used. Alert on the behaviour and accept the false positives, because the true positive is this.
Then segment, and put a clock on administrative access. CISA recommends just-in-time access for admin-level accounts, which turns two unattended days of Enterprise Admin into a window somebody had to ask for.
And give people a software catalogue. This began with a search engine, a lookalike domain and an installer, which is the same opening as two other entries in this section.
Four hours, four hundred packages, and valid provenance on every one
Zscaler ThreatLabz, Tracking Shai-Hulud: Inside the ChainDrop NPM Worm
On 4 August 2026 a self-propagating worm entered npm through a compromised maintainer account. It pushed commits straight into source repositories, which triggered those projects’ own continuous integration pipelines to build and publish poisoned packages. Each infection steals the npm publishing token from wherever it lands, enumerates every package that token can write to, and publishes a poisoned version of each one. It reached more than 400 packages in under four hours, peaking at roughly one infected package per second, starting from keyv, cacheable, flat-cache and file-entry-cache.
What worked
Zscaler records nothing that npm, GitHub or anybody else did to detect, block or limit this while it was running.
What failed
Provenance, in the precise sense the ecosystem has spent years building. The poisoned packages carried "cryptographically valid SLSA Build Level 3 provenance" and valid trusted-publisher attestations, because they genuinely were built by the real project’s real pipeline from the real repository. Every link in the supply chain attestation was true. The commit at the start of it was not.
Zscaler states the conclusion plainly and it is the one to write down: "Do not treat SLSA/Sigstore provenance as proof of safety." Provenance answers where a package came from. It was never designed to answer whether the code is malicious, and an attacker who reaches the repository inherits the entire apparatus.
Then the automation. The release workflow "kicked in automatically", with no person between a pushed commit and a published package, which is what turned one compromised account into four hundred in four hours. And the tokens: every developer and every build runner that installed a poisoned version handed over its own publishing credentials, which is the mechanism that makes this a worm rather than an incident.
The number
4 hours
to reach more than 400 packages, at a peak of roughly one infected package published per second, every one of them carrying valid build provenance.
What to do instead
Put a delay between publish and consume. A release cooldown is the highest-value control against this whole class, because the worm ran its course in under four hours, and a policy of not installing anything published in the last day or two would have missed all of it. Zscaler recommends it and hardly anybody does it.
Then stop installing what you did not pin. Lockfiles applied strictly, npm ci rather than npm install, and a private registry proxy in front, so that a version published an hour ago cannot arrive in a build because a caret in a manifest allowed it to.
Then treat your build runner as a credential store, because that is what it is. Scoped, short-lived tokens instead of long-lived publishing credentials, restricted outbound network access from build environments, and pinned versions for every tool the build invokes. This spread because tokens were sitting where poisoned code could read them.
Then audit pull_request_target in your GitHub Actions workflows, which earlier waves of this campaign abused to steal a privileged token, and watch repositories that hold publish permissions for orphan commits and unexpected workflow files.
And change what provenance means inside your organisation. Treat it as an answer to where this came from, never as an answer to whether it is safe. If a policy anywhere says a signed package with valid attestation may skip review, this is the campaign that should change it.
Huntress, Post-DEF CON Phishing Uses Malicious Google Doc to Deliver Malware
On 9 August an account impersonating a CoinDesk executive direct-messaged a Huntress researcher, asking for help organising an online conference and sharing a Google Doc. The document carried a custom Apps Script sidebar offering an encryption key, which failed to decrypt anything as promised and then presented ClickFix-style instructions and a manual download instead. A second document arrived the next day dressed as a DocSend share. Huntress assesses that a large number of Black Hat and DEF CON attendees were targeted, on both macOS and Windows.
What worked
Huntress names no control that blocked this, and the researcher did not execute the payloads, so there is no defensive outcome to report. Two of the attacker’s own mistakes are recorded instead. The macOS ClickFix command redirected to a local address and looped 108 times before the browser gave up, leaving that vector non-functional. And both stolen code-signing certificates, from Discord and from Lenovo, produce signatures that do not validate.
What failed
The certificate store, which is the part of this to take away. The Windows chain installs a fraudulent certificate authority into the system root store with a ten year validity, which lets the operator intercept HTTPS traffic, and Huntress observed it used against VirusTotal. A machine that trusts an attacker’s certificate authority is a machine whose encrypted traffic is readable and whose security lookups can be answered by the person it is looking up.
The rest is the familiar shape. Users were instructed to bypass Gatekeeper on macOS. Stolen certificates from real companies were used even though they no longer validate, because hardly anybody checks. And the implant silently discards every error condition, which Huntress describes exactly: "A dead server, a rejected host, and a successful compromise all produce the same result on screen, which is nothing at all."
The number
10 years
the validity of the fraudulent certificate authority installed into the Windows root store, which let the operator intercept HTTPS traffic including lookups to VirusTotal.
What to do instead
Monitor the trusted root certificate store. Additions are rare, high-signal, and almost never legitimate outside your own management tooling. This is one of the few entries in this section where a single detection would have caught the thing that mattered most.
Then treat a request to bypass a platform protection as the end of the conversation. Huntress puts it as well as it can be put: unexpected requests to run terminal commands, bypass Gatekeeper, install a manual update or enter a device password are each, on their own, enough to stop.
Then say something to staff before a conference rather than after one. This campaign targeted attendees by name and by interest, and the approach arrived through a social platform rather than corporate mail, where none of your controls apply and none of your logging reaches.
And if a machine ran it, the response is larger than what you can see. Isolate it, collect the evidence, reimage. Assume every credential on the machine is gone: revoke active sessions, reset passwords, rotate API keys and other secrets, and check cryptocurrency wallets if there are any. That is Huntress’s own list, and the wallet line is there for a reason.
A decade of poisoned search results, run as a business
The DFIR Report, BengalSEO Part 1: Anatomy of the Operation
The DFIR Report traces an SEO poisoning operation running since at least 2015 out of Rajasthan, India, which ranks fraudulent lure pages high in search results for tax software, antivirus, streaming, gaming and credit card activation. A click enters a traffic distribution system that fingerprints the browser and puts the visitor through a Cloudflare Turnstile or hCaptcha challenge before deciding what to serve. The outcome is either MayaBot malware or a tech support scam phone number. The researchers found 84 active operator GitHub accounts between January 2024 and March 2026, 180 registered domains reachable through one subdomain service alone, and a single Matomo analytics instance tracking 146 unique domains.
What worked
Nothing defensive. This is an infrastructure investigation rather than an incident response, and the nearest thing to a win in it is a hosting provider suspending an account, which took part of the operation offline. The detail worth keeping is how it was unpicked: the operators’ own GitHub commits exposed email addresses that tie them to registered business entities. Poor operational security on the attacker’s side is not a control anybody can deploy, but it is the reason this report exists.
What failed
The trust people place in the top of a search results page, which nothing at your perimeter touches.
The operation also sits on infrastructure you cannot block wholesale. Cloudflare fronts 81.1% of it, and lure pages are hosted on GitHub and Google Sites, which are services your staff need for work. Blocking the hosting means blocking the business.
And the CAPTCHA at the front is not what it appears to be. It is not there to keep bots off the operators’ site. It is there to keep your tooling out, filtering automated scanners so that a sandbox sees a benign page and a person sees the lure.
The report carries no mitigations at all, which is honest for a Part 1 about attribution rather than defence, and is why the section below cites a second document.
The number
146 domains
tracked through a single one of the operation’s analytics instances, alongside 84 operator GitHub accounts active between January 2024 and March 2026 and 180 registered domains behind one subdomain service.
What to do instead
The report offers none, so these come from the FBI’s June 2026 public service announcement on malicious traffic distribution systems, which describes the same mechanism.
For organisations the FBI lists four things: monitor endpoints, change default file associations so that a downloaded script does not execute on a double click, run user training and awareness, and audit and patch your web hosting administration, because a compromised site of yours is what feeds a system like this in the first place.
Then the one that matters most for a workforce, which is not on anybody’s list because it is not a security control. Publish the canonical download location for every application you support and make it easier to reach than a search. This entry and the counterfeit installer campaign elsewhere in this section are the same failure approached from two directions, one as consumer fraud and one as enterprise compromise.
Then treat a CAPTCHA gate in front of an unexpected download as a signal rather than an obstacle. It exists to make sure your sandbox never sees what your user sees, so a page that challenges automation before serving a file is telling you what it thinks of automation.
And expect your own estate to end up as somebody’s infrastructure. This operation runs on legitimate services throughout, and a hosting provider suspension is what ended a slice of it.
Paste this into Terminal to prove that you are human
Microsoft Threat Intelligence, TerminalFix campaign deploys a reverse tunnel through multistage intrusion
A compromised website shows a fake Cloudflare CAPTCHA that asks the visitor to copy a command and paste it into Windows Terminal or PowerShell. The command pulls down a ZIP holding a legitimate Windows binary and a malicious dui70.dll beside it, which sideloads. Payload fragments are hidden inside PNG images. It persists through the registry and a scheduled task that re-runs every 60 minutes, enumerates Active Directory, and ends by standing up a reverse tunnel out over 443 that gives the operator "persistent, network-level proxy access through the compromised host". Organisations across multiple industries are affected.
What worked
Microsoft names nothing that stopped it, and is careful about why: it "did not observe the downstream actions described below in the analyzed chain", which is a limit on what the analysis could see rather than evidence that a control held.
What failed
The gap between the clipboard and the shell. There is no exploit anywhere in this chain and no vulnerability to patch. A person was persuaded to run a command and the machine did what they told it to, with their own rights.
ESET’s telemetry puts the scale of that technique beyond any single campaign: ClickFix "skyrocketed by over 500%" in the first half of 2025 and became "the second most common attack vector after phishing". That is an extraordinary position for something which is, mechanically, a paste.
After that, the familiar trust abuses. The malicious DLL rode a legitimate signed Windows binary through sideloading. The payload lived inside PNG files, which Microsoft notes makes "file type and content inspection more difficult". And the tunnel leaves on 443, like everything else on the network.
The number
500%
growth in ClickFix detections in the first half of 2025 in ESET telemetry, putting it second only to phishing as an attack vector.
What to do instead
Configure Windows Terminal to warn when pasted text contains multiple lines. It is one setting, it is in Microsoft’s own list, and it interrupts the precise moment this technique depends on.
Then close the clipboard-to-shell path properly. AppLocker or Group Policy to restrict PowerShell and the Run dialog, an App Control policy that stops native Windows binaries launching from Run, PowerShell Constrained Language Mode, and script block logging so that when somebody does paste something you still have the text afterwards.
Then hunt the sideload. LockScreenContentServer.exe running from a path it does not belong in is a specific and cheap detection, and DLL sideloading in general deserves a rule that does not depend on knowing which legitimate binary gets used next.
Then teach the pattern rather than the campaign. Any page that asks a visitor to copy something into a terminal, a Run box or a browser console is hostile, without exception, regardless of how the page is branded. That one sentence is the defence, and it survives every rename of the technique.
And if a host ran it, treat the tunnel as network access. Microsoft’s guidance is to assume network-level access through the compromised host and rotate every credential reachable from it.
The download site was counterfeit and the tamper protection held
Microsoft Threat Intelligence, Counterfeit installers to system compromise: Tracking a deceptive software download campaign
Counterfeit download sites impersonating well known software vendors served malicious installers to people looking for ordinary applications. Microsoft confirms compromises across medical devices and healthcare, manufacturing, gaming, technology, logistics, government and higher education, primarily affecting China-based operations of multinational organisations and Chinese-speaking users. Once run, the malware persists through scheduled tasks running as SYSTEM, tries to weaken the endpoint’s own protection, deletes volume shadow copies, disables Windows Update, and calls out to attacker infrastructure on a roughly 60 second cadence.
What worked
This is the rare entry where the answer runs long. Microsoft reports that Defender "detected and disrupted activity across multiple stages of the attack, including automated containment through attack disruption". SmartScreen, network protection and web content filtering blocked the fake download domains. Behavioural and cloud-delivered antivirus caught the execution. Network protection blocked the command and control callbacks. Attempted SMB lateral movement to further hosts was blocked. Attack disruption contained the device and the account.
The single load-bearing control was Tamper Protection, and it deserves naming on its own. The malware’s first move against the endpoint was to write broad Defender exclusions through Add-MpPreference and straight into the registry. Tamper Protection refused those writes with the payload already running as SYSTEM. That refusal is the difference between an incident and a compromise.
What failed
The download, and the judgement in front of it. Somebody reached a convincing spoof of a vendor’s own site and ran what it handed them, and nothing before the endpoint stopped that.
After execution the evasion worked as designed, even though the outcome did not. The payload ran under msiexec, a signed and trusted Windows component. It impersonated a Philips speech driver and ran svchost.exe from paths svchost never lives in. It injected into other processes rather than running as itself. More than twenty distinct payload names were written through the msiexec route alone, and two content-distinct copies of an identically named archive landed within roughly 69 seconds, which defeats any rule keyed to a file name or a hash. Microsoft draws the right conclusion: "Hunt behavior, not file names."
The number
69 seconds
between two content-distinct copies of the same-named archive being written to disk, in a campaign that produced more than twenty distinct payload names through a single execution route.
What to do instead
Turn on Tamper Protection everywhere, and verify it is on rather than assuming. It is the control that carried this incident, refusing Defender exclusion and registry writes from a payload that already held SYSTEM. An endpoint agent an attacker can tell to ignore a directory is an endpoint agent with an off switch.
Then alert on the tamper sequence rather than on any one part of it. A scheduled task created as SYSTEM, then shadow copies deleted through vssadmin, then a service disabled, is a short and specific chain that almost nothing legitimate produces. Microsoft names it as the alert to build, and it is cheap.
Then block the delivery. Treat look-alike download archives as malicious in web and mail flow, and correlate the referrer: FileOriginUrl and FileOriginReferrerUrl tell you an executable arrived from a search result rather than from your software catalogue, which is this entire campaign in one field.
Then use the prevalence and age rule. Blocking executables that do not meet a prevalence, age or allowlist test is the attack surface reduction rule matching this exactly, and it is one of the few that stops something nobody has seen before.
And give people a legitimate place to get software. Every counterfeit installer campaign competes with your own software distribution, and it wins whenever yours is slower or needs a ticket.
One remote support session, then the domain controllers
Microsoft Threat Intelligence, Impersonating IT support: how threat actors turn a remote session into enterprise-wide access
First contact is a Microsoft Teams message from outside the tenant, from somebody presenting as IT or the helpdesk, and the ask is a remote support session. Inside that session the operator uses PowerShell to install an MSI quietly, which drops a portable Node.js runtime and an obfuscated JavaScript implant giving persistent command execution. Then host and Active Directory reconnaissance, screenshots, and movement over Windows Remote Management on TCP 5985 to dozens of hosts across multiple regions, aimed at domain controllers and certificate authorities.
What worked
Teams did its part, and Microsoft says so before saying where it ends. The platform applies "external tenant labeling, Accept/Block prompts, message previews, and phishing indicators" at the point of first external contact, and then: "this attack chain depends on convincing the user to bypass those warnings." A warning that is correct, visible and overridden is still a control that worked. The organisations where somebody read it and stopped are the ones that never appear in a write-up.
What failed
The remote session, as a category. Once a person has granted screen control to a stranger there is no further boundary in the chain, and everything after that point is the attacker operating as the user, with the user’s rights, inside a session the user consented to.
CISA made the same observation about a different toolset in its advisory on remote monitoring software, and the sentence generalises: portable executables of legitimate remote access tools "provide a way for actors to establish local user access without the need for administrative privilege and full software installation, effectively bypassing common software controls and risk management assumptions". Your application allowlist is not consulted, because nothing was installed.
Then the management protocol. WinRM on 5985 reached dozens of hosts, which means it was not restricted to management workstations. Microsoft’s remediation list says to restrict it, and WinRM launched from a user-context process is an unusual event with a low false positive rate. That is the one alert standing between a single compromised laptop and the domain controllers.
And everything in the chain was signed or built in. The runtime was a genuine Node.js build from its official distribution, execution ran under msiexec, and staging happened in the user’s own LocalAppData. No unsigned binary was required at any point.
The number
4 years
since CISA first documented help desk themed phishing that ends in a remote access session, in the federal campaign it dated to June 2022. The tooling has changed. The shape has not.
What to do instead
Restrict who can reach your staff. Teams external access left open is the front door here, and scoping it to the domains you actually collaborate with is a change most organisations can make this week and almost nobody notices afterwards.
Then give the helpdesk an identity people can check. An internal verification phrase, or a rule that support is only ever initiated through your own ticketing system and never through a chat message, removes the pretext instead of the payload. Both Microsoft’s list and CISA’s end in the same place, which should tell you where the leverage is.
Then restrict WinRM to authorised management workstations, and alert on WinRM launched from a user-context process. If you take one technical action from this entry, take that one. It is the step where one laptop became dozens of hosts.
Then treat a remote support session as a privileged action with a record. Device or identity checks before the session opens, MFA and a compliant device enforced through Conditional Access, and a log that says who connected to whom and when.
And if it happened, the machine is not the incident. Microsoft’s guidance is to "assume the operator obtained network-level access" and to rotate every credential reachable from the affected host. Reimaging the laptop and closing the ticket is how this comes back.
Industrial-scale extraction, through the API you sell
CISA Advisory AA26-251A, China-Based Artificial Intelligence Companies Conducting Industrial-Scale Distillation Campaigns Against U.S. AI Companies
CISA says China-based AI companies have been systematically extracting the capabilities of US frontier models by querying them at scale, taking "billions of tokens across millions of exchanges/requests" from variants of Claude, GPT, Gemini and Grok since at least late 2024. The route is not an intrusion. It is the product’s own inference API, reached through accounts "not registered to legitimate users" and through premium subscriptions bought in bulk and shared across teams of developers, with automated failover between pathways whenever one gets blocked. Individual campaigns run from days to months, at query volumes in the thousands to millions per domain.
What worked
The advisory does not name a control that held. It does record that blocking happened and was routed around, which is a finding in itself: somebody was detecting this and acting on it, and the answer was an automatic switch to another pathway.
What failed
Account identity first. The accounts were not registered to real people, so there was nothing to revoke that could not simply be created again, and any verification weak enough to automate sets the effective rate limit to infinity.
Then the commercial relationship, which is harder. The premium subscriptions were bought legitimately and then shared across teams, and no technical control sees that, because from the platform’s side it is one paying customer using an allowance they paid for. The prohibition lives in the terms of use, which is a contract rather than a control.
The part worth sitting with, for anybody running an API product, is that this is not an attack in the sense the rest of this section means. Every request was well formed, authenticated and paid for. What made it an incident was volume, pattern and intent, none of which is visible in a single call.
The number
billions
of tokens taken across millions of requests from US frontier models since at least late 2024, in campaigns running days to months at thousands to millions of queries per domain.
What to do instead
If you sell inference, your abuse detection has to work on the shape of a customer rather than the shape of a request. CISA’s first recommendation is monitoring of anomalous prompts, accounts, networks and behaviours together, and the word carrying that sentence is "together". A campaign like this looks ordinary at every individual layer and only appears when you join them.
Then make the block cost something. The most practical detail in the advisory is that blocking triggered automated failover between pathways, which means a block that is instant and unambiguous is a block that trains the client. Responses that degrade rather than refuse, and that cannot be attributed to one request, are much harder to build a failover around.
Then treat account registration as a security boundary and not a signup funnel. Fraudulent accounts were the way in, and everything downstream inherits whatever that check was worth.
And for everyone who does not sell an API, the transferable part is smaller and more useful. This is a product being used exactly as designed, at a volume and for a purpose nobody intended, by a customer who paid. Nothing in a normal security stack points at that. Work out who in your organisation would notice, and whether they have the data to.
A million emails, a fabricated thread, and an invoice for fifty thousand dollars
Microsoft Threat Intelligence, Protecting organizations from AI-assisted executive impersonation and invoice fraud
Between 3 and 5 August 2026 an operator sent more than a million phishing emails to enterprise finance staff, from domains registered on 31 July. The messages impersonate the recipient’s own chief executive and ServiceNow, and they carry fabricated invoices inside fabricated email threads built to look like a conversation already under way. 87.7% of the campaign went at US companies, accounts payable departments were the target, and IT services, business advisory and consumer goods were the sectors most hit. The ask is an ACH payment of nearly $50,000.
What worked
Microsoft does not name a control that stopped this before delivery. What it gives instead is a list of tells in the forged material, and the most useful of them is a formatting artefact rather than a linguistic one: the fake quoted thread is left aligned instead of tabbed the way a real mail client renders a reply. That is a property of how the message was produced, so it survives a change of pretext in a way that "watch out for urgent requests from the chief executive" does not.
What failed
The payment process, and nothing before it was ever going to be the answer. A million emails is a volume play that needs one person in accounts payable to act once, and everything that makes it work sits downstream of the mail gateway: a payment instruction that arrives by email, names a plausible counterparty, and appears inside what looks like an existing thread. There is no malware, no attachment that executes and no compromised account, so the entire technical security stack is pointed somewhere else.
The sending infrastructure was three days old. Domains registered on 31 July were sending on 3 August, which asks any reputation-based filter to judge a sender it has never seen, on its first appearance, at volume.
The number
$50,000
the ACH payment requested per targeted organisation, in a campaign of more than a million emails of which 87.7% went to companies in the United States.
What to do instead
Put the control where the money is. This is a fraud against a payment process and no mail filter is the right layer for it. Any change to vendor bank details, and any payment over a threshold you set, gets verified by a call to a number already on file, never a number that came with the request. Write it down as policy, tell accounts payable that it will never be waived for urgency, and mean it, because urgency is the entire pretext.
Then do the mail controls anyway, because they raise the cost. SPF, DKIM and DMARC published properly on your own domain break the impersonation of your own chief executive that this runs on, and Zero-hour auto purge pulls delivered copies back once a campaign is recognised. Both are on Microsoft’s list.
Then teach the artefact rather than the story. Show the finance team a fabricated quoted thread in your own mail client, with the alignment wrong, and let them see it once. A person who has seen the tell recognises the next campaign. A person who has only been warned about invoice fraud recognises only the version they were warned about.
And score sender domain age at the gateway. It is a cheap rule with a high yield, and this campaign’s infrastructure was three days old when it started sending.
Eight years on, the routers are still answering to the community string in the manual
CISA Advisory AA26-194A, Improve Router Hygiene to Protect Against Russian State-Sponsored TargetingCVE-2018-0171CVE-2008-4128
FSB Center 16 actors continue to take networking equipment worldwide, and CISA frames this as a hygiene problem rather than an exploitation one. Two routes carry it. Cisco Smart Install, still reachable on TCP 4786 and still unpatched against CVE-2018-0171. And SNMP agents answering to common or default community strings over SNMPv1 and SNMPv2, which have no meaningful authentication to begin with. What the actors take is configuration, pulled out over TFTP, and the credentials inside it. The sectors named are Communications, the Defence Industrial Base, Energy, Financial Services, Government Services and Facilities with state and local called out specifically, and Healthcare and Public Health.
What worked
The advisory does not say. Like the other hardening documents in this series it describes the exposure and the fix without naming a victim, a detection or a control that held.
What failed
Age, in two directions.
Cisco fixed CVE-2018-0171 in 2018 and CISA is still telling people to disable Smart Install in 2026. SNMPv1 and SNMPv2 were never designed to authenticate anybody, and the community string that gets accepted is frequently the one printed in the manual. Neither of these requires research, tooling or a novel idea.
The deeper failure is the class of device. Routers and switches sit outside most endpoint detection coverage, outside most patch cadences and outside most asset inventories, and a foothold there is underneath the layer that everything above it trusts. The advisory also raises end-of-life hardware, where there is no patch to apply and the honest answer is that somebody has to buy something. That is the part of this that does not get fixed inside a change window.
The number
8 years
since Cisco fixed CVE-2018-0171, which CISA is still naming in 2026 as a live route into critical infrastructure networks.
What to do instead
Disable Smart Install on every device, today. It is a provisioning feature that almost nobody uses past the first day, and it listens on TCP 4786 whether you use it or not.
Then deal with SNMP. Move to SNMPv3 with authPriv, turn off v1 and v2, change the community strings that are still the shipped defaults, and grant read-only where read is all that is needed. If you cannot change version yet, take CISA’s interim position: allowlist the object identifiers that can be read, and write an intrusion detection rule for inbound Set-Requests against the sensitive ones.
Then close the management plane. Access control lists on the management protocols, and block the ports at the edge: UDP 69 for TFTP, TCP 4786 for Smart Install, UDP 161 and 162 for SNMP, TCP and UDP 10161 and 10162 for SNMPv3. A router that answers management protocols from the internet is a router somebody else is also administering.
Then look for what they leave behind. CISA’s detection guidance is to monitor for local account logins on network devices and for credentials that do not match your naming convention. That is a cheap, specific check, and in most organisations nobody has ever run it against the network gear.
And put the end-of-life list in front of whoever signs for capital spend, with this advisory attached to it. On those devices the recommendation is replacement, and pretending otherwise just moves the risk onto next year.
Zscaler ThreatLabz, CaptiveCrunch: Midnight Blizzard Weaponizes Hotel Wi-Fi Captive Portals to Steal Microsoft 365 Credentials
Storm-2945 compromised the shared captive portal services that hotels, conference centres and similar venues run, then manipulated DNS and HTTP traffic on those networks to send guests to attacker infrastructure. Zscaler found compromised gateways in several US cities, in India and in Saudi Arabia. What the traveller sees is the sign-in page they were expecting. What follows is Microsoft 365 credential harvesting, device code phishing and malware delivery. The victims here are not the hotels. They are whoever stayed in them, across every sector.
What worked
Zscaler names no control that stopped an instance of this in a customer environment. The write-up lists the product settings that would have, which is a different claim, and the entry below is where the useful reading is.
What failed
Multi-factor authentication, and not because it was absent. The device code pages abuse the Entra ID authentication flow itself. The victim is shown a genuine Microsoft prompt and authenticates the attacker’s session rather than their own, which as Zscaler puts it "can bypass conventional multifactor authentication (MFA)" because no credential is being relayed and nothing is being faked. The user completes a real login. The attacker ends up with a device registered in the tenant.
The second failure is an assumption about the network. A laptop that drops its tunnel on an untrusted network so the captive portal will load is a laptop with no inspection at the exact moment it is talking to a hostile DNS server. That configuration is common because it is often the only way captive portals work at all, which makes it a design tension rather than an oversight, and this campaign is what the tension costs.
The number
500 MB
the per-cycle upload cap built into the CornFlake payload, which also limits itself to 1,000 files a cycle and collects 18 categories of host information.
What to do instead
Treat the captive portal as hostile, because in this campaign it was. The practical control is that the corporate tunnel comes up before anything else and stays up, in full rather than with a local proxy exception, and that DNS goes to your resolver instead of the network’s. Zscaler’s version of this is a list of their own settings, but the principle underneath it ports to whatever you run.
Then block device code flow in Conditional Access. It is the single change here that closes the identity half of the attack. Almost nobody uses the flow for real work, the people who do can be scoped into an exception, and without it the genuine Microsoft prompt that makes this work never appears.
Then alert on new device registrations in Entra ID, because that is what a successful device code phish looks like from your side of the glass. It is one of the few signals in this chain that reaches your tenant at all, given that everything before it happened on somebody else’s network.
And have the travel conversation, which is cheaper than any of the above. A phone hotspot removes the entire attack. Say so before the conference rather than after it.
NO. 14/Government / Water utilities/12 September 2026
Controllers on the public internet, still holding the password they shipped with
CISA Advisory AA26-097A, Iranian-Affiliated Cyber Actors Exploit Programmable Logic Controllers Across US Critical Infrastructure
Iranian-affiliated actors have been reaching programmable logic controllers directly over the internet at US water and wastewater utilities, energy organisations and local municipalities, and changing what those controllers do. CISA names Rockwell Automation CompactLogix and Micro850, Schneider Electric Modicon M340 and Siemens S7-1200, and says other manufacturers are likely in scope. There is no exploit to write about. The devices were exposed, they still held their default authentication keys and passwords, and from there the actors altered project files, manipulated what the operator saw on the HMI and SCADA displays, and disabled shutdown and alarm logic.
What worked
The advisory does not say. It is written as a hardening document rather than an incident narrative and names no detection or control that limited the activity at any victim.
What failed
Everything in front of the controller. CISA’s own account of the exposure is that these were "internet-exposed PLCs" on "devices that lacked sufficient network and/or hardening security controls", still carrying "default authentication keys and passwords".
The more interesting failure is the one that came after. Disabling shutdown and alarm logic while editing what the operator’s screen displays takes out the loop that keeps a plant safe and the loop that tells a person something is wrong, at the same time. The physical process and the picture of the physical process are then free to drift apart with nobody in a position to notice, which is a different category of problem from data theft and does not resolve itself when the intrusion is evicted.
And the pattern is not new. CISA cites the 2023 CyberAv3ngers campaign against US Unitronics devices as the precedent, and the exposure that made that possible is the exposure being used now.
The number
75 devices
compromised in the 2023 CyberAv3ngers campaign against US Unitronics controllers, which CISA cites here as the same exposure being exploited again three years later.
What to do instead
Take them off the internet. Everything else on CISA’s list is secondary to that and the advisory puts it first: put the controller behind a secure gateway, and if it reaches the world through a cellular modem, secure that modem with strong authentication and turn its logging on. That modem is a second internet connection, and it is usually missing from the asset inventory because nobody in IT provisioned it.
Then the two physical steps, which cost nothing and are the ones most often skipped. Put the mode switch in run position. Enable programming protection in the configuration software. A controller sitting in remote-programmable mode with no programming password is a controller that anybody who can reach it can rewrite, and no firewall rule compensates for that.
Then verify the logic rather than the device. If you were exposed, the question is not whether the PLC is patched but whether its project file still says what your engineers wrote. Use the vendor’s integrity tooling to compare against a known-good copy, and check specifically that the shutdown and alarm logic is present and enabled. The manipulated display is precisely why you cannot answer this from the control room.
Then the rest of the list: change the default passwords, add multi-factor authentication where the platform supports it, block Telnet, FTP, RDP, VNC and any web service you are not using, and keep offline backups of the project files that somebody has actually restored from at least once.
The helpdesk rings your personal phone, and the lure is a passkey
Microsoft Threat Intelligence, Passkey-themed social engineering leads to identity and cloud compromise
Since May 2026 Microsoft has tracked a campaign that opens with a call or a message to the target’s personal phone number from somebody claiming to be the organisation’s IT helpdesk. The pretext is a security improvement: enrol a passkey, re-register your MFA, sort out single sign-on. The link goes to an adversary-in-the-middle page that takes the session. The operator then registers their own authenticator app or phone number as an additional method on the account, and reads: SharePoint, OneDrive and Exchange, at scale, as the person whose identity they now hold.
What worked
Microsoft does not name a control that stopped this. What the write-up establishes instead is where the visibility went, which is more useful here than a detection story would have been, and it is the reason the section below is longer than this one.
What failed
The phone in the victim’s pocket. First contact is to a personal number, which no corporate telephony control touches, and the link is opened on a personal device. Microsoft states the consequence plainly: if the victim opens the phishing link "on a personal mobile device that is not onboarded to Microsoft Defender for Endpoint, the related activity may be absent from endpoint telemetry." The compromise happens entirely outside the estate you monitor and arrives in your tenant looking like a successful sign-in.
Then the second factor. Anything that is not phishing-resistant is relayed straight through the proxy, and device code flow is abused for the same end. The irony of the lure is the finding: the campaign persuades people to enrol a passkey and works precisely because they had not already got one.
Then the persistence, which outlives the password. The operator adds their own authentication methods, so a password reset on its own leaves them signed in and able to come back. Any response that stops at the credential has not ended the incident.
The number
under 1,000
files or emails touched in any one hour by the operator, which sits below the 1,000-event threshold in Microsoft’s own hunting query for this activity.
What to do instead
Phishing-resistant MFA is the answer and the campaign knows it, which is why the lure is a passkey enrolment. Enforce FIDO2 through Conditional Access, and while you are in there block device code flow and authentication transfer flow. Most organisations use neither for anything, and the few people who do can be scoped into a named exception. Those two changes close the path that makes the rest of this optional.
Then give the helpdesk a script. An internal authentication phrase, or a callback to the number in the directory rather than the one that rang you, costs nothing and is the control the attacker cannot buy around. Microsoft’s own list ends on verifying helpdesk identity before any credential or MFA reset, which is a process problem rather than a product one.
Then treat authentication method registration as a security event in its own right. A new authenticator app or phone number added to an account should generate an alert somebody reads, and registration of security information should sit behind strict Conditional Access. This is the step that turns a one-hour session into standing access, and it is the cheapest place to catch it.
And write the response down before you need it. Revoke sessions and refresh tokens, reset the credential, and remove the authentication methods the operator added, in that order. Turn on Microsoft Graph activity logs and mailbox auditing now, because the reading is quiet by design and without those logs there is nothing to reconstruct it from.
Russian state-supported actors have been compromising Western government and commercial organisations running Zimbra Collaboration Suite since at least July 2025. The delivery is an email and the victim clicks nothing. Viewing the message in the Classic webmail client runs the attacker’s JavaScript, exploiting CVE-2025-66376, a cross-site scripting flaw in how Zimbra sanitises CSS import directives. In twelve asynchronous stages the payload takes the last 90 days of mail, the organisation’s Global Address List and whatever else it can reach, and pushes it out over DNS. The sectors CISA names are the Defence Industrial Base, federal and local government, education, energy, law enforcement, media, non-governmental organisations and technology.
What worked
The advisory does not say. It documents the tradecraft and the infrastructure in unusual detail and names no control at any victim that detected or stopped it. That is worth reading as a finding rather than as an omission. Exfiltration base32-encoded into DNS subdomains, sent to servers that are rotated every seven to sixty days, is built to pass the monitoring most organisations actually have rather than the monitoring they describe in an audit.
What failed
Patching, and then the password manager.
The flaw was a zero-day when exploitation began in July 2025. Zimbra released fixes for 10.1.13 and 10.0.18 in November 2025, and CISA says it "continues to be successfully exploited" well after that. Four months with no patch available, then months more with a patch nobody applied.
The second failure is quieter and worth sitting with. The script injects two hidden HTML elements requesting login credentials onto the page, outside the victim’s view, waits five seconds, and reads back whatever the browser’s password manager has autofilled into them. Nothing was tricked. The password manager did the job it was built to do, into a form the user never saw, on a page they had every reason to trust, in a session they had already authenticated. This is the part that a stronger password would not have helped with.
The number
90 days
of mail taken from each compromised mailbox, plus the full Global Address List, harvested in 20 batches of 77 directory lookups each.
What to do instead
Check the version first, because that is the whole of the immediate question. If you are on a vulnerable Zimbra build and cannot patch today, CISA’s interim advice is to move people off the Classic webmail client entirely and onto another mail client until you can. An advisory recommending that users stop using a product’s own interface is telling you how it rates the exposure.
Then assume the reads happened. What was taken is ninety days of mail and the address list, so this is not only a credential rotation. Revoke every Application Passcode and 2FA scratch key, force password changes, and go looking for the evidence: the SOAP request patterns CISA lists in mailbox.log, and localStorage items named zd_comp_YYYY-MM-DD.
Then fix the thing that made the credential theft free. Autofill into an invisible form is browser behaviour, not a Zimbra bug, and the next webmail scripting flaw will use it the same way. Moving authentication to a third-party service that supports passkeys takes the password out of the browser’s hands entirely, which is CISA’s own recommendation here and the only one on the list that survives the next occurrence.
And keep the network data. Every detection CISA offers is netflow or DNS: frequent queries with randomised subdomains, spikes to recently registered domains, outbound volume to virtual private servers. None of it is answerable without packet capture or NetFlow retained long enough to look backwards, which is a decision you make before the advisory rather than after it.
Detection was not the limiting factor. Response time was.
Darktrace, Hiding in Plain Sight: Uncovering a Multi-Stage Ransomware Attack Through Behavioral Detection
Compromised VPN credentials put an operator on the network. Over the next three days they scanned east to west across a broad range of ports, triggered Active Directory replication consistent with a credential dump, ran command and control over SSL, pushed data out to Wasabi cloud storage, and encrypted thousands of files. The customer had behavioural detection running and it saw all of it, stage by stage, while the intrusion was still reversible. Three days is a long time to be inside a network that is watching you.
What worked
The detection, and Darktrace is unusually blunt about which half of the problem it solved: "detection was not the limiting factor; response time was." The scanning was flagged. The replication anomaly was flagged. The command and control was flagged. More than 30 rare outbound connections to a Wasabi endpoint were flagged before a single file was encrypted, along with close to 3GB going to one external address and just under 4GB to another. None of that needed a signature or prior knowledge of the tooling, which is the case for behavioural detection made about as well as a vendor can make it.
What failed
Everything downstream of the alert. Autonomous Response was licensed and switched on in this environment, and the report says it "was not fully configured across the impacted devices, allowing the attack to progress to ransomware deployment." So the control that would have cut the sessions was bought, enabled, and inert on the machines that mattered. Nobody acted by hand either; the three days are the proof of that.
The uncomfortable reading is that this customer spent their detection budget correctly and finished in the same place as somebody who had spent nothing. Darktrace says as much in the counterfactual: "Prompt investigation and containment of devices exhibiting anomalous behavior could have prevented lateral movement, data exfiltration, and ultimately ransomware deployment." Every one of those stages was on a screen when it happened.
The number
3 days
from the first use of the compromised VPN credentials to encryption, with alerts raised at every stage in between and none of them acted on.
What to do instead
Go and check which of your automated response actions are actually armed, on which machines. Not whether the product is licensed, and not whether the feature is on in the console, but whether it will act tonight on the hosts that decide the outcome: domain controllers, file servers, the VPN concentrator, the jump boxes. A response capability configured across most of an estate is one the attacker routes around, and the part that was missed is never random. Ask for the coverage list rather than the coverage number.
Then write down who may cut a session, and when, and without whose permission. This intrusion ran for three days through alerts that a person could have acted on, and the reason teams default to watching is almost never that they did not believe the alert. It is that nobody has told them in writing that they are allowed to pull a host off the network at two in the morning and be wrong about it.
Then take the exfiltration signal seriously on its own. Rare-destination cloud storage is the most useful single rule here: more than 30 connections to a Wasabi endpoint from a host that had never spoken to it, carrying gigabytes, in an environment where nothing legitimate uses that provider. If your egress alerting is tuned on total volume rather than on destination rarity, that traffic looks like a backup job.
And rotate the VPN credentials and check what else they open. This started with valid credentials on remote access, which is the same first step as most of what lands in this section.
Reverse Engineering the Six Stages of MacSync Stealer and RAT
Huntress, 29 July 2026
Huntress recently investigated an incident where the victim searched Google for how to install Claude on a Mac, clicked a sponsored result, and landed on a weaponised claude.ai/share conversation dressed up as an Apple Support install guide. It told them to open Terminal and paste a single curl command. MacSync is a six-stage kill chain, not a smash-and-grab.
What worked
Huntress does not name a control that held here. Read that as a finding in itself: these write-ups are built from what responders actually found, and one with no successes in it is usually describing a network that had none.
What failed
The victim went looking for Claude. Their browser history opens with a Google search for how to install Claude Code on a Mac and, two clicks later, lands on a page that appears to show the answer. In between was an ad, and the ad is the whole trick. The result they clicked was not the organic anthropic.com listing but a paid Google Ads placement. This is malvertising in its current, least exotic form. The term was originally used to describe a booby-trapped banner that launched an exploit when loaded. What it means
The number
2 minutes
Their prefixes are still in the config strings /tmp/openssl-arm64/ and /tmp/openssl-x86_64/, and there are two compile banners rather than one, stamped about 2 minutes apart.
What to do instead
Start with what not to chase. The file hashes and the per-delivery 8-hex identifiers change every build, so they're low-value on their own. Anchor on the behaviours, which don't change: curl -k with a Base64-decoded URL piped into zsh, the loader's execution and its ~/.zshrc persistence.
Akira Hits Safe Mode: Ransomware Rebooting Around EDR
Huntress, 12 August 2026
After gaining access via an exposed SonicWall VPN, an Akira affiliate rebooted the victim host into Safe Mode with Networking to defeat EDR, a first for this ransomware variant in our telemetry. Safe Mode is a boot mode that only loads essential drivers and services, disabling most third-party software. As such, the reboot stopped the Huntress agent and disabled Microsoft Defender's real-time protection; Defender couldn't quarantine the file until the attacker rebooted back to normal mode.
What worked
Huntress records one thing that held. “Eventually, a scheduled Defender scan detected the ransomware binary at 07:43:50 UTC.”
What failed
Huntress groups the failures under four headings: initial access: SonicWall SSL VPN, no MFA; living on the domain controller: recon, the akira way; collection and exfiltration: WinRAR to the cloud; and AnyDesk: the delivery and c2 channel. “The intrusion started where many Akira intrusions start: a SonicWall SSL VPN. Beginning around 03:45 UTC on August 4, 2026, the SonicWall logged a burst of failed logins (Unknown User Login Attempt / "User login denied due to bad credentials") against multiple usernames from several external IPs: a straightforward credential spray.”
The number
10 minutes
This AnyDesk session (including the preceding Safe Mode reboot) lasted less than 10 minutes, showing how well-oiled these Akira intrusions have become.
What to do instead
Catch the credential spray before it becomes a foothold: Alert on bursts of failed VPN logins against multiple usernames from one source. Correlate those failures with a successful login from the same IP or ASN within a short window.
NO. 08/Government / Water utilities/11 September 2026
The same red team against two SOCs, and the alert queue that swallowed one
CISA Advisory AA26-237A
CISA ran two red team assessments at the same time, using similar tradecraft against a government services organisation and a water utility. Both ended the same way: full domain compromise, sensitive business systems reached, cloud resources reached. One of them caught the initial access within minutes and quarantined the hosts, which forced the red team into an assume breach model to carry on. The other never detected anything at all. The two organisations were running comparable tooling, and that is what makes this advisory worth the time.
What worked
Tuning. That is the whole finding, and it is unusually well controlled for a public document, because the same activity was run against both networks. At Organization B it produced a medium-severity alert that somebody triaged, and three workstations came off the network. At Organization A it produced alerts that nobody picked out of the volume. The alert text was "An executable file loaded an unexpected DLL file". No signature, no threat intelligence, no name for the thing. It stood out because Organization B had a baseline and had filtered the routine traffic away from it, so an anomaly could still look like one. B also let its defenders act: they triaged, found the root cause, and took the fix to engineering themselves rather than waiting to be told they were allowed to.
What failed
Organization A, at every layer above the sensor. Its tools were never tuned, so routine business activity and false positives ran at a volume the SOC could not work through, and the intrusion sat inside that volume looking like everything else. Then the organisation finished the job: several SOCs that did not talk to each other, no shared visibility with the system owners, and staff who did not know what they were authorised to do on which segment of the network. With no escalation procedure to fall back on, they defaulted to wait and see. Nobody in that chain did anything unreasonable, which is the uncomfortable part.
Organization B was better at detection and no better at hardening. Its Machine Account Quota was set to 1,000 for every domain user, and a service account held AllExtendedRights over a domain controller, which is a DCSync and then the whole domain. Detection bought time; it did not close the path.
In the cloud they failed identically. Both granted excessive permissions to applications, neither applied Conditional Access to workload identities, and neither had a process for revoking access and refresh tokens after a compromise. That last gap is the one to sit with: it means an actor you have evicted from the network still has the tenant.
The number
20 minutes
the slowest of Organization B's three workstation isolations, against no response at all from Organization A to the same red team activity.
What to do instead
Tune what you already own before you buy anything else. Two organisations, the same tradecraft, opposite outcomes, and the variable was a baseline rather than a product. Go and count what share of last week's alerts your analysts closed without investigating. That share is your actual detection coverage, and it is usually nothing like the coverage on the licence.
Then give your defenders the authority to act on what they find. Organization A's analysts were not short of alerts, they were short of permission, and "wait and see" is what a team defaults to when nobody has written down who may pull a host off the network at two in the morning. Write that down.
Then fix the two cloud gaps both of them shared, because those are the ones that survive eviction. Apply Conditional Access to workload identities and not only to people, and write the token revocation procedure before you need it: refresh tokens outlive the containment you are proud of, and nobody improvises that step mid-incident. While you are there, go looking for long-lived static IAM keys set never to expire. Organization A's were sitting in configuration files in users' home directories, which is where yours will be.
Phobos operators scan the internet for exposed Remote Desktop with off-the-shelf tools such as Angry IP Scanner, brute force whatever they find, and walk in on valid credentials. From there it is SmokeLoader, Cobalt Strike, Bloodhound and Mimikatz, then exfiltration through WinSCP and Mega before the encryption anyone eventually notices.
What worked
Nothing novel had to be defended against, and that is the useful part. Every stage of this uses public tooling that mature detection catches: Mimikatz touching LSASS, Bloodhound enumerating the directory, Cobalt Strike beaconing. Organisations with an EDR that somebody watches routinely stop Phobos at the second or third step. The playbook is entirely known, which means the outcome is a function of whether the controls were deployed, not of whether the adversary was clever.
What failed
The front door. RDP published straight to the internet with password authentication and no MFA, no lockout worth the name, and no rate limiting, on estates too small to have anyone watching the authentication logs. This is not a sophisticated intrusion and it has not needed to be for a decade; it persists because the exposure persists. Backups are usually the second failure: reachable from the same domain with the same credentials, and encrypted alongside everything else.
The number
67%
of Rapid7's Q3 2024 incident responses involved valid accounts with missing or weakly enforced MFA on remote access.
What to do instead
Scan your own perimeter from outside and find the RDP you do not know about, because there almost always is some: a vendor's jump box, a forgotten test server, an acquisition nobody folded in. Put remote access behind a VPN or a gateway with phishing-resistant MFA and take 3389 off the internet entirely. Then fix the backups properly: offline or immutable, and restorable by an account that domain compromise cannot reach. Test a restore this quarter. An untested backup is a belief, and this is the family that finds out.
The remote access tool that had to revoke its own signature
AnyDesk public incident statement, February 2024
Attackers reached AnyDesk's production systems in late December 2023 and took source code along with private code-signing keys. AnyDesk detected it during an internal audit in mid-January, brought in CrowdStrike, revoked its certificates and shipped a rebuilt binary on 29 January, disclosing publicly on 2 February; within a day, more than 18,000 AnyDesk credentials were on sale on criminal forums.
What worked
They found it themselves. An internal security audit caught this, not a customer, not a researcher, not an extortion email, and on current numbers most organisations learn about their own breach from somebody else. They then did the expensive right thing rather than the cheap comfortable one: revoked the signing certificates and forced a client update, knowing that would break tooling for every customer and confirm the severity in public.
What failed
A private code-signing key was reachable from a production environment an intruder could get into. That key is not ordinary data; it is the thing that makes your customers' machines trust a binary, and once it leaves it can sign malware that every endpoint in your customer base will accept. The other failure is the arithmetic of the tool itself: AnyDesk exists to give someone remote control of a machine, so a compromise of AnyDesk is a potential compromise of every estate it is installed in, and that concentration was not reflected in how the signing material was held.
The number
18,317
AnyDesk portal credentials listed for sale within a day of the disclosure. Resecurity, who found the listing, attribute them to info-stealer malware on users’ own machines rather than to the breach itself, the rush to sell was the disclosure’s doing, not the source of the credentials.
What to do instead
Keep code-signing keys in an HSM and sign through a service that logs every request, so that a compromised build host can ask for a signature and still never possess the key. Treat that as a hard requirement rather than a maturity goal: it is the specific control that turns this incident from a supply-chain catastrophe into an expensive inconvenience. On the consuming side, inventory your remote access tools and know which vendor can reach your estate, because their incident is your incident, and the version pinning that protects you here has to be decided before their disclosure lands, not after.
MGM Resorts SEC Form 8-K, October 2023, and contemporaneous reporting
Scattered Spider identified an MGM Resorts employee on LinkedIn, called the IT help desk impersonating them, and talked their way into a password reset that yielded administrative access to MGM's Okta tenant. MGM pulled systems offline to contain it; ALPHV still encrypted more than a hundred ESXi hypervisors, and MGM disclosed roughly $100 million of impact to its Las Vegas and regional operations.
What worked
They did not pay. Caesars, hit by the same crew in the same window, reportedly did. MGM took an operational beating instead: slot machines, digital room keys and reservations down, guests queuing at the desk with paper. That is what refusing looks like from the inside, and the fact that they came back without paying is the part worth putting in front of your own executives before an incident, not during one.
What failed
Everything upstream of the phone call. The help desk could reset a privileged account's credentials and its MFA on the strength of a voice and details anyone could read off LinkedIn, and there was no callback, no manager confirmation, no out-of-band check. Then containment came too late to matter: by the time the Okta sync servers were pulled, the operators already held the environment, and the hypervisors were encrypted anyway. Worth being clear about that, because the shutdown is often described as the thing that stopped the encryption. It did not.
The number
10 minutes
the length of the phone call that produced administrator access to MGM's Okta tenant.
What to do instead
Treat identity verification at the help desk as a security control with a written procedure, not as a customer service judgement call. High-privilege resets need a second channel: a callback to the number in the HR record, a manager approval, or an in-person check. Then go and test it, by having someone your desk does not know attempt exactly this call. Most organisations that believe they are covered here have never tried it, and the ones that have usually stop believing it. The technical lesson is smaller than the procedural one: no amount of MFA helps when the help desk will re-enrol the factor for whoever asks.
Credentials from 2020, and 165 tenants with nothing in the way
Mandiant / Google Cloud Threat Intelligence, UNC5537
From April 2024, UNC5537 used credentials harvested by commodity infostealer malware to reach more than 100 Snowflake customer tenants, with around 165 organisations ultimately notified. Mandiant found no compromise of Snowflake's own infrastructure: every case was a customer tenant configured without MFA and without network allow-listing.
What worked
Attribution and notification. Mandiant and Snowflake identified the pattern across tenants, tied it to a single actor and got victim notifications out while the campaign was still running, which is what turned a slow drip of unexplained data theft into a campaign defenders could act on.
What failed
The shared responsibility line, in both directions. Customers left single-factor authentication on tenants holding their most sensitive data, and some of the credentials had been circulating in infostealer logs since 2020 without ever being rotated. Mandiant found that 79.7% of the accounts used in the campaign had prior credential exposure. The platform, for its part, did not require MFA by default, and a default that permits this outcome is a product decision as much as a customer one.
The number
79.7%
of the compromised accounts had credentials already exposed in infostealer logs, some dating to 2020.
What to do instead
Treat every corporate credential that has ever appeared in an infostealer dump as burned, and rotate on exposure rather than on schedule; ninety-day expiry does nothing about a password stolen on day two. For any SaaS tenant holding regulated or bulk data, require MFA and restrict access to known network ranges, then verify both from an unmanaged device. If you sell the platform, make MFA the default: this campaign is the argument that a permissive default eventually becomes your incident regardless of where the responsibility line is drawn.
A Citrix portal without MFA, and nine days to ransomware
Written congressional testimony of UnitedHealth Group CEO Andrew Witty, May 2024
ALPHV/BlackCat operators logged into a Change Healthcare Citrix remote access portal on 12 February 2024 using stolen credentials. The portal had no multi-factor authentication. They moved laterally for nine days and deployed ransomware, disrupting roughly a third of US healthcare transactions and ultimately affecting around 190 million people.
What worked
Very little on the technical side, and the honest reading of this case is that the containment decision was the only thing that went right: the systems were taken offline decisively rather than being left running while the scope was argued about. That call limited the encryption, and it is why this was a catastrophic outage rather than a total one.
What failed
A single-factor internet-facing remote access portal, reached with credentials the attackers already had. Nine days of lateral movement produced no detection that stopped them. The dependency concentration then turned one company's identity gap into a national outage: pharmacies could not process claims, and providers went unpaid for weeks.
The number
9 days
between the first login on the MFA-less Citrix portal and ransomware deployment.
What to do instead
Enumerate every internet-facing authentication surface and prove MFA on each one, from the outside, by testing it rather than by reading the policy. The gap is almost never the main SSO; it is the legacy portal, the vendor appliance, the acquisition that was never folded in. Then ask the question this case actually poses: if you were unavailable for three weeks, who else stops working? That answer belongs to the business, and it is worth more than another detection rule.
One legacy test account, and the OAuth app that reached production
Microsoft Security Response Center post-mortem, January 2024
Midnight Blizzard ran a low-and-slow password spray against a legacy, non-production test tenant in late November 2023 and compromised an account that had no MFA. From there they abused a legacy OAuth application holding elevated permissions into the corporate Exchange Online tenant, and read the mailboxes of senior leadership, legal and the security team itself until detection on 12 January 2024.
What worked
The disclosure. Microsoft published the attack path, named the actor, described the OAuth pivot in technical detail and shipped defender guidance while the eviction was still running. As a piece of post-incident behaviour it set the standard the rest of the industry gets measured against.
What failed
A non-production test tenant was treated as low-risk, and the identity in it was therefore exempt from the MFA policy applied everywhere else. The real failure is the trust relationship: a legacy OAuth application in that throwaway tenant held Office 365 Exchange Online full_access_as_app against the corporate environment, which grants read on any mailbox. The password spray was deliberately low-volume to stay under the alerting thresholds, and it did.
The number
0
MFA factors on the legacy test account that led to the leadership mailboxes.
What to do instead
Inventory the OAuth applications and service principals that cross a tenant boundary, and treat each one as a production identity regardless of which tenant it lives in. "Non-production" describes the workload, never the blast radius of the credentials inside it. Then check your password-spray detection against low-and-slow volumes specifically: a threshold tuned for a noisy spray does not fire on a patient one, and patience is free.
The GeoServer nobody patched, and the EDR alert nobody read
CISA Advisory AA25-266ACVE-2024-36401
Threat actors exploited an unpatched, public-facing GeoServer at a US federal civilian agency eleven days after the CVE was disclosed, then used a second unpatched instance thirteen days later. They held the network for three weeks, deploying the Stowaway proxy, China Chopper web shells and reconnaissance tooling before anyone noticed.
What worked
The EDR did its job. It detected and alerted on the Stowaway proxy tool on the first GeoServer on 15 July 2024, the same day the CVE was added to the KEV catalog. The detection engineering was not the failure here; every technical control that was deployed fired correctly.
What failed
Nobody read the alert. EDR alerts were not continuously reviewed, so a correct detection sat unactioned for seventeen days. The second GeoServer and the web server had no endpoint protection at all. When the agency finally responded, its incident response plan had no procedure for bringing in outside help, so granting the IR team SIEM access needed change control board approval while an active intrusion was in progress.
The number
17 days
between the EDR alerting on Stowaway and anyone acting on it.
What to do instead
Treat an unreviewed alert queue as an outage of the control that feeds it. An EDR nobody watches provides evidence after the fact, not defence, and it should be reported to leadership as coverage you do not have rather than coverage you bought. Separately: write the third-party access procedure before you need it, and rehearse it. Discovering mid-incident that your own change control stands between the responders and the logs is a failure of the plan, not of the responders.
Named for the doctrine distinction between a lesson observed and a lesson learned: a lesson is not learned until behaviour has changed and somebody has checked. Pretending otherwise is how the same finding turns up in three consecutive post-incident reports.