Dans un billet de blog publié le 17 septembre 2025, le chercheur Dirk-jan Mollema détaille la vulnérabilité la plus impactante qu’il dit avoir trouvée dans Entra ID : un défaut de validation dans l’API Azure AD Graph combiné à des « Actor tokens » internes permettait d’usurper n’importe quel utilisateur — y compris des Global Admins — dans tout tenant, aboutissant à une compromission totale. Microsoft a corrigé rapidement et attribué l’identifiant CVE-2025-55241.

• Nature de la faille et portée: la vulnérabilité repose sur deux éléments clés: des jetons d’imitation internes et non documentés (« Actor tokens ») utilisés par Microsoft pour la communication service-à-service, et un défaut critique de l’ancienne API Azure AD Graph qui ne validait pas correctement le tenant d’origine. Résultat: un jeton demandé dans un tenant contrôlé par l’attaquant pouvait être accepté pour un autre tenant, autorisant une authentification « en tant que » tout utilisateur du tenant cible. Ces jetons contournaient les politiques de Conditional Access et n’étaient pas journalisés.

• Détails techniques: les Actor tokens (JWT émis par l’« Azure ESTS Service » via un « Access Control Service ») ont une durée de 24 h et portent la revendication trustedfordelegation. Ils sont ensuite encapsulés dans un jeton d’usurpation non signé qui inclut notamment un identifiant « nameid » (netId/puid). Le bogue côté Azure AD Graph acceptait ces jetons même si le tenant ID ne correspondait pas, dès lors que le netId d’une identité valide du tenant cible était fourni. L’API Azure AD Graph ne disposant pas de logs API, la lecture des données laissait peu ou pas de traces.

• Impact et abus potentiel: accès complet en lecture à l’API Azure AD Graph d’un tenant sans traces, incluant utilisateurs (et leurs données personnelles), groupes/rôles, paramètres du tenant et politiques, applications/Service Principals et permissions, appareils et clés BitLocker. En cas d’usurpation d’un Global Admin, des modifications étaient possibles (création/prise de contrôle d’identités, élévations de privilèges), ouvrant l’accès à Microsoft 365 (SharePoint Online, Exchange Online) et à Azure. Les modifications généraient généralement des journaux d’audit, mais apparaissaient comme des actions d’un Global Admin légitime, avec un artefact notable: UPN de l’admin + displayName d’un service (ex. « Office 365 Exchange Online »).

• Vecteurs de compromission: le chercheur illustre un enchaînement d’attaque: obtenir le tenant ID public, récupérer ou deviner un netId valide (les netId sont incrémentaux et peuvent être bruteforcés en minutes/heures selon la taille du tenant), puis usurper un utilisateur, lister les Global Admins et usurper l’un d’eux. Une méthode très efficace est le pivot via les relations B2B: le netId d’un invité est stocké dans l’attribut alternativeSecurityIds du tenant hôte; un attaquant peut l’extraire et usurper la victime dans son tenant d’origine, avec possibilité de propagation rapide entre tenants interconnectés. Des outils comme roadtx/roadrecon ont été utilisés pour les tests.

• Correctifs, télémétrie et détection: Microsoft a reçu le signalement le 14 juillet 2025, déployé un correctif global le 17 juillet, confirmé la résolution le 23 juillet, puis poussé des mitigations le 6 août bloquant la délivrance d’Actor tokens pour Azure AD Graph via des identifiants d’app (Service Principals). Le 4 septembre, le CVE-2025-55241 a été publié. D’après la télémétrie interne de Microsoft, aucun abus détecté. Une requête KQL de détection est fournie, cherchant des anomalies dans AuditLogs où l’initiateur combine un UPN d’utilisateur et un displayName de produit Microsoft (exclusions prévues pour certains scénarios légitimes de groupes).

IOC et TTP

  • IOCs: aucun indicateur réseau/fichier spécifique fourni.
  • TTPs:
    • Abus de « Actor tokens » internes et création de jetons d’usurpation non signés (bypass Conditional Access, absence de journaux).
    • Exploitation d’un défaut de validation de tenant dans Azure AD Graph pour l’accès cross-tenant.
    • Découverte de netId via puid dans des tokens, bruteforce de netId (identifiants incrémentaux), et pivot B2B via alternativeSecurityIds.
    • Énumération et élévation de privilèges jusqu’à Global Admin; modifications via API; ajout de credentials à des Service Principals et attribution de permissions applicatives; potentielle exfiltration via Microsoft 365.
    • Utilisation d’outils: roadtx, roadrecon.

Conclusion: Il s’agit d’un rapport de vulnérabilité très technique visant à divulguer un défaut de validation critique dans Azure AD Graph et à exposer les risques systémiques liés au design des « Actor tokens », avec chronologie de divulgation et informations de détection. 🚨🔒🛠️

🧠 TTPs et IOCs détectés

TTP

Abus de « Actor tokens » internes et création de jetons d’usurpation non signés (bypass Conditional Access, absence de journaux). Exploitation d’un défaut de validation de tenant dans Azure AD Graph pour l’accès cross-tenant. Découverte de netId via puid dans des tokens, bruteforce de netId (identifiants incrémentaux), et pivot B2B via alternativeSecurityIds. Énumération et élévation de privilèges jusqu’à Global Admin; modifications via API; ajout de credentials à des Service Principals et attribution de permissions applicatives; potentielle exfiltration via Microsoft 365. Utilisation d’outils: roadtx, roadrecon.

IOC

aucun indicateur réseau/fichier spécifique fourni.


🔗 Source originale : https://dirkjanm.io/obtaining-global-admin-in-every-entra-id-tenant-with-actor-tokens/