Azure Delete Locks Stop a Stolen Contributor, Not a Stolen Owner
An autonomous attacker that deletes in parallel outruns any page-and-revoke loop, so the controls that count make destruction impossible for the identity it holds.
Microsoft reports that Jadepuffer, an autonomous agentic attacker first reported in July, now uses compromised identities to destroy Azure resources, per CSO. On Azure this comes down to one permission. Deleting a resource lock requires Microsoft.Authorization/locks/delete, and both Owner and User Access Administrator hold it. A CanNotDelete lock stops a stolen Contributor credential and does nothing against a stolen Owner. The base control is no standing Owner, with just-in-time elevation through Privileged Identity Management (PIM) instead.
Why machine speed changes the design
The reporting is thin. CSO does not publish techniques, detection guidance or tooling details, and says only that exposed credentials "may have" been the entry vector. The shape is enough to plan around. An autonomous agent can enumerate its permissions via the management API and issue deletes in parallel without pausing. A response that waits for a human to be paged, triage the alert and revoke access will often lose that race. Detection still matters for the record. The design goal is that whatever identity the attacker holds cannot destroy what matters.
The paths MFA never sees
CSO argues that "MFA enabled" says less than it seems about strength and coverage. The bigger gap is the credentials MFA was never built for. Service principal client secrets and bearer API keys never see a prompt; an authentication bypass skips the check outright. A compliance dashboard reporting MFA coverage on human accounts stays green while all three paths stay open.
The hardening sequence
- Remove standing Owner and User Access Administrator assignments in production subscriptions. Move them to PIM elevation.
- Apply CanNotDelete locks to critical resource groups and manage them from the IaC pipeline. Without that, terraform destroy and legitimate teardown start failing.
- Turn on recovery features: Key Vault purge protection, plus blob soft delete and versioning.
- Put backups out of reach in an immutable vault guarded by Resource Guard, which enforces multi-user authorization. Own it with a separate identity the attacker doesn't have.
- Retire client secrets. Use workload identity federation (OIDC) for CI/CD and managed identities at runtime. Then scan repos, CI logs, container images and notebooks for secrets already exposed.
Each step costs something. PIM adds friction to break-glass work, and locks add a step to every legitimate deletion. Resource Guard puts a second approver on backup policy changes, by design.
Measure MFA quality, not coverage
Replace the coverage percentage with three numbers. First, the share of privileged humans on phishing-resistant methods (FIDO2 or passkeys) rather than push, SMS or TOTP. Second, the count of legacy-auth paths still enabled. Third, the total number of non-human identities MFA cannot cover, which is usually the largest of the three and has the fewest named owners.
Teams running their own agents on Azure credentials get double duty from these controls. The same locks and scoped identities that stop a Jadepuffer-style attacker also cap what a hijacked or misbehaving in-house agent can delete. Pull Microsoft Threat Intelligence's primary write-up for hunting queries before relying on detection; nothing here substitutes for it.
What to do
Remove standing Owner and User Access Administrator assignments from production subscriptions this week, move them to PIM just-in-time elevation, and apply IaC-managed CanNotDelete locks to critical resource groups.
Move production backups into an immutable vault protected by Resource Guard and owned by a separate identity this sprint, and enable Key Vault purge protection plus blob soft delete and versioning.
Inventory service principals that authenticate with client secrets this sprint and migrate CI/CD to workload identity federation, starting with any principal that holds delete rights in production.