#cloud security#Azure#Entra ID#IAM#DevSecOps

3.6 Million Records, Zero Azure Vulnerabilities: What the Fortune 500 Credential Leak Teaches Cloud Teams

webhani·

A Breach Without a Bug

Around August 17-18, 2026, a threat actor operating under the alias "TheHatman" began advertising employee directory data allegedly pulled from the Microsoft Azure/Entra ID tenants of several Fortune 500 companies — including a batch of roughly 1.7 million records tied to McDonald's, out of a combined 3.6 million records spanning organizations such as Vodafone, Gap Inc, HCL Technologies, InterContinental Hotels Group, Kyndryl, Tata Consultancy Services, Hexaware Technologies, and Wyndham Hotels. The exposed fields read like a full HR export: names, employee IDs, phone numbers, postal addresses, corporate email, job titles, manager assignments, group memberships, and — notably — inventories of service accounts and Global Administrator role holders.

The detail that should get every cloud engineering team's attention isn't the record count. It's what security researchers didn't find: no zero-day, no platform-level flaw in Azure or Entra ID. The data appears to have been collected since around July 31, 2026, through nothing more exotic than valid, stolen credentials and the legitimate access those credentials unlock.

This is the pattern that now dominates cloud breach disclosures. The infrastructure held. The identity layer around it didn't.

Why Identity Is the Real Attack Surface

Cloud platforms like Azure invest enormous engineering effort in isolating tenants, encrypting data at rest, and patching the underlying fabric. That investment works — platform-level compromises are rare precisely because the attack surface is small and heavily monitored. Credentials are a different story. Every employee, every service account, every CI pipeline holds a key that, if stolen, walks straight through the front door with no alarm.

A directory sync account, a stale API token in an old script, a phished admin session — any of these gives an attacker the same view of your tenant that a legitimate operator has. Directory data is especially valuable to attackers not because it's sensitive on its own, but because it's a map: which accounts have elevated privileges, who manages whom, which service accounts exist and what they touch. That map turns a single compromised credential into a plan for lateral movement.

The lesson isn't "Azure is unsafe." It's that identity and credential hygiene is now doing more security work than the platform underneath it, and most organizations underinvest there relative to how much they invest in network and infrastructure controls.

Concrete Steps: Auditing Global Administrators

Start with the accounts that would do the most damage if compromised. Global Administrator role assignments in Entra ID should be small, known, and reviewed regularly — not discovered after an incident. Here's how to pull that list with the Microsoft Graph PowerShell SDK:

# Connect with the minimum scope needed for a read-only audit
Connect-MgGraph -Scopes "RoleManagement.Read.Directory","User.Read.All"
 
# Get the Global Administrator role definition
$role = Get-MgDirectoryRole -Filter "displayName eq 'Global Administrator'"
 
# List current members
Get-MgDirectoryRoleMember -DirectoryRoleId $role.Id | ForEach-Object {
    $user = Get-MgUser -UserId $_.Id -Property DisplayName,UserPrincipalName,AccountEnabled
    [PSCustomObject]@{
        Name    = $user.DisplayName
        UPN     = $user.UserPrincipalName
        Enabled = $user.AccountEnabled
    }
} | Format-Table -AutoSize

Run this quarterly at minimum, and treat any unexpected name on the list as an incident, not a surprise to shrug off. Pair it with an audit of service accounts and app registrations with elevated Graph API permissions — these rarely have MFA and are a favorite target precisely because nobody watches them as closely as human accounts.

Practical Controls That Would Have Slowed This Down

None of the following requires exotic tooling. All of it is available in Entra ID P1/P2 licensing or equivalent tiers on other identity providers.

  • Phishing-resistant MFA. Push-based MFA and SMS codes are bypassable through prompt bombing and SIM swaps. Move privileged accounts — Global Admins, service account owners, anyone with write access to production — to FIDO2 security keys or platform passkeys. Entra ID supports this natively through Authentication Methods policies.

  • Conditional Access as a default-deny posture. Don't just require MFA; scope access by device compliance, location, and sign-in risk. A minimal policy sketch for admin roles:

    Policy: "Require compliant device + phishing-resistant MFA for admin roles"
    Assignments:
      Users: Directory roles → Global Administrator, Privileged Role Administrator
      Cloud apps: All cloud apps
    Conditions:
      Sign-in risk: Medium and above → block
    Access controls:
      Grant: Require device marked as compliant
             AND Require authentication strength = Phishing-resistant MFA
    Session:
      Sign-in frequency: 4 hours
  • Session token lifetime hardening. Long-lived refresh tokens are exactly what makes a single stolen credential valuable for weeks instead of hours. Shorten sign-in frequency for privileged sessions and enable continuous access evaluation so revoked access takes effect immediately, not at next token refresh.

  • Anomalous sign-in and impossible-travel detection. Entra ID Protection flags sign-ins from unfamiliar locations, anonymized IPs, or impossible travel patterns automatically — but only if risk-based Conditional Access policies are actually configured to act on those signals, not just log them.

  • Least-privilege IAM reviews on a schedule. Role assignments accumulate and rarely get revoked. Quarterly access reviews (Entra ID has a built-in Access Reviews feature) catch the departed contractor who still has Contributor on a subscription.

  • Secrets scanning in CI pipelines. A large share of "credential theft" starts with a token committed to a repository, not a phished login. Enable secret scanning (GitHub Advanced Security, GitLab Secret Detection, or a tool like Gitleaks in your pipeline) and treat any detected secret as compromised — rotate it, don't just delete the commit.

  • A real rotation cadence for service accounts. Service account credentials often outlive the project they were created for. Inventory them, assign an owner, and rotate on a fixed schedule (90 days is a reasonable default) rather than "whenever someone remembers."

webhani's Checklist for Client Engagements

When we onboard a client's cloud environment, this is roughly the order we work through:

  1. Pull the Global Administrator and privileged role list — confirm every entry against HR records.
  2. Inventory service accounts and app registrations; assign an owner to each.
  3. Enable phishing-resistant MFA for all privileged accounts first, then expand.
  4. Turn on Conditional Access policies for sign-in risk and device compliance.
  5. Shorten session and refresh token lifetimes for privileged roles.
  6. Add secrets scanning to CI if it isn't already there.
  7. Schedule recurring access reviews — quarterly at minimum for privileged roles.

None of this is glamorous work, and none of it requires a security vendor pitch. It's the same discipline as patching dependencies: unglamorous, easy to defer, and the single highest-leverage thing you can do to reduce breach risk.

Summary

The Fortune 500 directory leak disclosed in mid-August 2026 didn't happen because Azure has a hole in it. It happened because credentials — human and machine — were compromised and then used exactly as designed: to read directory data. That's the uncomfortable part. The controls that stop this class of attack aren't new or secret; they're conditional access, phishing-resistant MFA, privileged account audits, and secrets hygiene in your pipelines. The organizations that get hurt by campaigns like this are usually the ones that treated identity controls as optional rather than as the actual perimeter.


References: Hacker Claims 3.6 Million Azure Account Records Stolen From Major Companies (BleepingComputer), Azure Data Leak Exposes Fortune 500 Companies (Help Net Security), Azure Credential Theft Campaign (Cyber Security News)