The attack starts with an app registration, not malware. An adversary registers an OAuth application in Entra ID (or Google Workspace, Okta, GitHub) under a name that mimics a trusted vendor, 'Google Defender' and 'McAfee Email Protection' are the names APT28 used against Gmail and Yahoo users, then requests delegated permissions such as Mail.Read, Files.ReadWrite.All, or offline_access. The attacker emails or messages the target a consent link pointing at the real identity provider's own consent screen, so nothing in the URL bar looks wrong. If the user clicks Accept, Entra ID issues the app an OAuth access token and, when offline_access was requested, a refresh token that keeps working long after the session ends.
Device-code phishing skips the consent screen entirely. The attacker starts a device-code auth flow against Microsoft's own endpoint, gets a short code, then calls or messages the victim, often posing as IT support running a Teams meeting, and talks them through entering that code at microsoft.com/devicelogin. The victim authenticates normally with their own MFA, but the resulting token goes to the attacker's session, not the victim's. Storm-2372's campaign, tracked by Microsoft since August 2024, used exactly this technique, and in February 2025 shifted to the Microsoft Authentication Broker's own client ID so the resulting token functioned as a Primary Refresh Token, unlocking every Microsoft 365 service without a second prompt.
A third path targets machine identities directly: an attacker with sufficient privilege in an app registration or service principal adds a new client secret or certificate, a credential add, then authenticates as that app going forward using their own added credential, no user interaction required at all. In Azure Storage specifically, a compromised or over-permissioned SAS token achieves the same outcome against blob and queue data, since a SAS token is itself the access credential and no separate sign-in step exists to catch it.