PoC, IOCs et logique de détection pour la chaîne de désérialisation BinaryFormatter WS-Federation SharePoint /_trust. Reconstruction en laboratoire couvrant l'exécution de code à distance (RCE) non authentifiée, le vol de clé machine en cours de processus, et les artefacts laissés par chaque variante. SharePoint 2016, 2019 et Subscription Edition. CVE-2026-50522, CVE-2026-45659, CVE-2026-56164, CVE-2026-58644.
/_trust : PoC et notes de détectionArticle en direct (GitHub Pages) : https://sp-poc.wismansec.com/ (rendu HTML de ce document).
Concernés : SharePoint Server 2016, 2019 et Subscription Edition.
Reconstruction d'une intrusion sur SharePoint Server (Subscription Edition) dans un laboratoire isolé, réalisée pour (a) comprendre l'étendue complète des capacités de l'attaquant, (b) déterminer ce qu'un défenseur doit rechercher, y compris la persistance furtive, et (c) partager un PoC pour aider d'autres enquêteurs.
Recherche autorisée uniquement. Tout ce qui figure ici a été réalisé sur du matériel de laboratoire isolé et des comptes personnels, contre une version délibérément laissée sans correctif pour le test. Le problème sous-jacent est corrigé par l'éditeur ; appliquez les mises à jour actuelles. N'exécutez pas cela contre des systèmes dont vous n'êtes pas propriétaire et pour lesquels vous n'avez pas d'autorisation explicite de test. Les valeurs de clés machine, les noms d'hôtes/IP internes et les domaines de rappel sont expurgés dans le texte et les artefacts d'exemple. Les captures d'écran du SIEM ne sont pas modifiées et portent les vrais noms du laboratoire ; voir la note au §4.
/_trustPOST /_trust/default.aspx (connexion WS-Federation) contenant un SecurityContextToken malveillant déclenche une désérialisation BinaryFormatter dans le processus worker SharePoint (w3wp.exe), aboutissant à une exécution de code à distance sous l'identité du pool d'applications web./_trust le détecte et le bloque ; voir §5). Ces clés permettent à un attaquant de forger des jetons __VIEWSTATE/d'authentification qui survivent au correctif./_trust, le seul artefact présent dans toutes les variantes.SharePoint expose un point de terminaison d'authentification passive WS-Federation à /_trust/default.aspx. Une réponse de connexion falsifiée (wa=wsignin1.0 + wresult=<RequestSecurityTokenResponse>) intègre un SecurityContextToken dont l'élément <Cookie> est un flux BinaryFormatter compressé en DEFLATE et encodé en base64. Côté serveur, ce cookie est décompressé et désérialisé sans restriction de type, de sorte qu'une chaîne de gadgets (via ysoserial.net) exécute du code contrôlé par l'attaquant dans w3wp.exe.
Squelette de requête (non authentifiée) :
POST /_trust/default.aspx HTTP/1.1
Content-Type: application/x-www-form-urlencoded
wa=wsignin1.0&wctx=<url>&wresult=<RequestSecurityTokenResponse>...
<SecurityContextToken><Cookie>BASE64(DEFLATE(BinaryFormatter payload))</Cookie>...
| Chaîne | Gadget | Effet | Canal de sortie |
|---|---|---|---|
| RCE hors bande | TypeConfuseDelegate → -EncodedCommand PowerShell | exécution de code sous l'identité du pool | hors bande (beacon HTTP/DNS) |
| Divulgation de clés machine | ActivitySurrogateDisableTypeCheck → ActivitySurrogateSelectorFromFile (compile KeyDump.cs en mémoire) | exfiltre ValidationKey/DecryptionKey | en ligne dans la réponse HTTP |
Scripts (assainis) dans scripts/ : un RCE hors bande paramétré et l'exfiltration de clés en deux étapes. La livraison des charges utiles utilise PowerShell -EncodedCommand afin que les charges utiles multi-instructions traversent les couches cmd.exe/transport sans altération (aucune rupture de citation ;/&&).
Ferme SharePoint SE unique (version épinglée avant correctif), identité du pool d'applications LAB\sp_pool, PowerShell 5.1, Microsoft Defender activé avec protection cloud. La télémétrie (Journal des événements Windows, journaux SharePoint, Defender for Endpoint) était envoyée à nano, un SIEM open-source léger ; l'hôte attaquant exécutait ysoserial.net ; un client interactsh fournissait l'écouteur hors bande. Les adresses et domaines sont expurgés dans le texte ; voir la note sur les captures d'écran au §4.
Chaque ligne correspond à une détonation réelle ; les artefacts ont été extraits du SIEM + de l'écouteur hors bande pour chaque exécution.
Les captures d'écran ne sont pas modifiées. Elles portent les vrais noms d'hôtes et NetBIOS du laboratoire, qui sont bruts et diffèrent des
SHAREPOINT01/LABassainis utilisés dans tout le texte. Mêmes exécutions, mêmes événements, rien de préparé. Équivalents sans risque pour le travail dansartifacts/.
| Invocation | Arborescence de processus (en tant que LAB\sp_pool, élevé) | Defender | Beacon hors bande | Artefacts principaux |
|---|---|---|---|---|
| RCE hors bande, par défaut | w3wp.exe → cmd.exe → powershell.exe → conhost.exe | Behavior:Win32/WebshellLauncher.A (EID 1116 détection / 1117 suppression) | reçu (course) | arborescence 4688 ; Defender 1116/1117 ; /_trust POST |
RCE hors bande, -RawCmd | w3wp.exe → powershell.exe → conhost.exe (pas de cmd) | aucune | reçu (DNS+HTTP) | arborescence 4688 ; /_trust POST ; beacon |
RCE hors bande, -DropFile | w3wp.exe → powershell.exe | aucune | reçu | écriture de fichier dans …\TEMPLATE\LAYOUTS\ (pas dans le journal d'audit d'accès aux objets) |
RCE hors bande, -Diag | w3wp.exe → powershell.exe → whoami.exe | aucune | reçu | exfiltration d'informations d'environnement : {host, whoami, PSver, LanguageMode} |
| Exfiltration de clés machine | (aucun, en mémoire) | aucune | (aucun) | uniquement le POST /_trust + réponse anormale contenant les clés |
Ces résultats correspondent à la configuration AMSI par défaut (mode équilibré, /_trust non scanné). Avec l'activation du scan AMSI du corps de requête pour /_trust (mode complet ou ciblé), chaque ligne est à la place bloquée au niveau de la requête : HTTP 400, Exploit:Script/SpCookieExec.A, avant l'exécution (voir §5).

Les quatre détonations documentées, de 15:01 à 15:18 UTC, chaque enfant de w3wp.exe s'exécutant sous l'identité du pool. Trois des quatre sont des powershell.exe créés directement. Seule l'exécution de 15:03:34 passe par cmd.exe, et seule celle-ci a été détectée. Si l'on élargit la fenêtre au-delà de celle-ci, les itérations de développement précédentes de la même matinée entrent dans le jeu de résultats, de sorte que l'affirmation se limite à ces quatre exécutions.
