P.K. SHARMA

Cyber security intelligence, AI governance, practitioner analysis

Seventeen hours of looking, seven minutes of deleting. The SQL databases survived because the attacker used the wrong API version

Microsoft's account of Storm-3168 in one Azure tenant shows three outcomes with three different causes. The role allowed most of the damage, resource locks stopped some of it, and the databases were saved by the attacker's own bug.

By Parminder Kumar Sharma · · 6 min read

Editorial illustration for the briefing: Seventeen hours of looking, seven minutes of deleting. The SQL databases survived because the attacker used the wrong API version

One tenant, two identities, one morning in June

Microsoft Security Research published its account of Storm-3168 on 25 September 2026. It is Microsoft's name for activity linked to JADEPUFFER, which Sysdig described in July as the first documented agentic ransomware operation. The post covers one Azure tenant, attacked in early June 2026 through two compromised service principals, the non-human identities that applications use to act in Azure.

The sequence, from Microsoft's timings:

  • The first identity enumerated virtual machines, subscriptions, resource groups and resources for about 15 hours and 30 minutes, with more than 300 successful read operations.
  • Ninety minutes in, the second identity enumerated virtual machines and resource groups across two subscriptions in five seconds.
  • Sixteen hours after that, it listed App Service configuration stores. Seventy seconds later it tried to list the keys of a storage account that did not exist.
  • Less than one second after that, the destruction began.

That is roughly 17 and a half hours of looking. The destructive sequence itself lasted about seven minutes and included more than 100 storage account deletion attempts, roughly one every four seconds.

What survived, and why, is the part worth studying. Microsoft records three different outcomes, and each has a different cause.

Most storage accounts were deleted. The identity held Storage Account Contributor through a group, and that role permits deletion. Every destructive operation, Microsoft notes, "followed the identity's existing Azure role assignments".

A few storage accounts survived. Azure resource locks and storage account-level deletion protection blocked those attempts. Microsoft calls this "the value of independent safeguards that remain effective even when a compromised identity has broad administrative permissions".

Every Azure SQL database survived. Not because of a control. The identity had SQL DB Contributor, which allows deletion, and it tried to delete several databases in parallel with the storage accounts. Every attempt failed "because it used an unsupported API version for the Azure SQL database resource type". The attacker's automation had a bug.

From Microsoft's account of one tenant. Only one row of survivals is explained by a defender's control.

What was targetedOutcomeWhat decided it
Most storage accounts, 100+ attemptsDeletedThe identity's role: Storage Account Contributor, granted through a group
A few storage accountsSurvivedResource locks and deletion protection, configured beforehand
Azure SQL databasesAll survivedThe attacker's tooling used an unsupported API version
Key Vault, Function App, App Service planDeletedDirect Contributor access
Site Recovery and Backup protection locksDeletion attempts failedNot stated by Microsoft
Storage account keys30+ retrieved with ListKeysThe identity's role

What this does not establish

It does not establish how the identities were compromised. The client ID, secret and tenant ID of one service principal had been posted in plaintext in a public GitHub issue by an employee. The issue was edited to remove the secret, but it stayed visible in the public edit history. Microsoft says plainly that it could not confirm whether that secret was used here.

It does not establish that data was stolen or a ransom demanded. Microsoft saw no ransom note and did not confirm exfiltration. The 30 or more storage keys retrieved after the deletions would give access to data, which is why Microsoft calls the pattern consistent with ransomware and extortion.

And it does not, on its own, show an AI model at work. Microsoft's evidence is the timing and the division of labour: five tokens for one identity, two deleting in the same 70 seconds, one handling inventory and keys. It says this "strongly indicates automated or scripted execution". The agentic label comes from the JADEPUFFER attribution, which rests on Sysdig's earlier research rather than on anything in this tenant. Automation that fast is the point either way.

Why seven minutes changes the question

A seven-minute destructive sequence that starts less than a second after its last reconnaissance call does not leave time for anyone to respond. No alert is triaged, no ticket assigned, no identity disabled inside that window. So everything that mattered was decided before the first deletion.

There were two chances. The first was the 17 and a half hours of enumeration, which is a long time for a workload identity to spend reading across every subscription it can see. The second was the configuration: which resources had locks and deletion protection, and which identities held delete rights they did not need.

The tenant got one of those right for some storage accounts. It kept the SQL databases by luck.

What to do about it

Take this with you

In the order worth doing

  • Put resource locks and deletion protection on the storage accounts, databases and recovery resources you could not afford to lose. They are the only control in this account that worked while the deletions were running.
  • List which service principals can delete anything, and why. Here a group-granted Storage Account Contributor role was enough to delete most of the tenant's storage.
  • Alert on workload identities that start enumerating broadly. Hundreds of reads across subscriptions by an application identity over many hours was the long, visible part of this attack.
  • Search your public repositories, issues and their edit histories for credentials, and rotate anything you find, even if it has since been edited out.
  • Keep backup and recovery resources out of reach of the identities that run applications. Here the attacker went for Site Recovery and Backup protection locks as well.

The question this leaves

Three outcomes in one tenant: deleted because the role allowed it, saved by a lock someone had set up, and saved by the attacker's mistake. The third one will not happen twice. Tooling that fails on an API version gets fixed.

So the question for your own cloud estate: if an identity with delete rights went rogue for seven minutes tonight, which of your resources would survive because of something you configured, and which only because the attacker got something wrong?

Sources

  1. PrimaryStorm-3168: Agentic-driven cloud attacks using compromised service principals, 25 September 2026, read in fullMicrosoft Security Researchaccessed 2026-09-28

Share this briefing

Know someone who owns this problem? Send it to them.

Related briefings

The briefing, in your inbox

Practitioner analysis of cyber and AI security news. No vendor noise.

One email per briefing. Unsubscribe any time.