Skip to content
KitploitKITPLOIT
OutilsExploitsBlog
Log in
Soumettre
OutilsExploitsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

FluxContactConfidentialité© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
CVE-2026-97798-exploit — CVE-2026-97798 Windows Error Reporting - Injection de commande vers SYSTEM | Kitploit
Outils/GitHubGitHub/g4sp4rcs/cve-2026-97798-exploit
Escalade de PrivilègesAnalyse des VulnérabilitésExploitationPost-ExploitationRed TeamingDéveloppement de Charges Utiles
GitHubg4sp4rcs/cve-2026-97798-exploit

CVE-2026-97798-exploit

CVE-2026-97798 Windows Error Reporting - Injection de commande vers SYSTEM

Voir le dépôt
425il y a 7 joursVérifié par Kitploit

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

CVE-2026-97798 — Injection d'arguments dans Windows Error Reporting vers SYSTEM

[!WARNING] Ce dépôt est destiné à la recherche autorisée sur les vulnérabilités et à la validation en laboratoire contrôlé. La preuve de concept échoue de manière sûre lorsqu'elle ne peut pas identifier exactement une implémentation compatible de faultrep.dll!SpawnDataCollector.

CVE-2026-97798 est une vulnérabilité locale d'élévation de privilèges dans le chemin Time Travel Debugging de Windows Error Reporting (WER). Un appelant non privilégié peut préserver une syntaxe de ligne de commande contrôlée par l'attaquant à travers la frontière de privilèges de WER. Le collecteur élevé concatène ensuite cette entrée dans une ligne de commande TTTracer.exe sans préserver les frontières d'arguments. Les commutateurs injectés -out et -launch sont donc interprétés par l'enregistreur TTD comme des options d'enregistreur, permettant le lancement d'un exécutable choisi par l'attaquant avec le jeton élevé du collecteur.

Le PoC monofichier inclus transforme cette primitive en un shell interactif NT AUTHORITY\SYSTEM. Il a été validé à la fois depuis un compte utilisateur standard et depuis un compte administrateur d'intégrité moyenne, filtré par UAC.

Shell SYSTEM interactif

Vidéo

Contenu du dépôt

CheminDescription
src/CVE-2026-97798.cppSource complète de l'exploit en image unique
bin/CVE-2026-97798.exeBuild de laboratoire x64 reproductible
build.ps1Script de build LLVM-MinGW déterministe
assets/system-shell.pngPreuve whoami capturée depuis la VM isolée

Aucun PDF de rapport n'est encore inclus ; l'article long est toujours en cours de rédaction.

Cause racine

Le flux vulnérable traverse plusieurs composants :

low/medium-integrity process
  -> faultrep.dll!CElevatedDataCollection::ControlTimeTravelDebugging
  -> faultrep.dll!SpawnDataCollector
  -> Windows Error Reporting service (elevated collector)
  -> CDataCollection::ControlTimeTravelDebugging
  -> TtdControl::LaunchRecordingProcess
  -> TTTracer.exe / TTDRecord.dll command-line parser
  -> attacker-controlled -launch target

La requête contient une valeur Process qui commence par un exécutable légitime mais ajoute des commutateurs TTD supplémentaires. L'implémentation vulnérable applique une blocklist faible basée sur le nom exact, puis formate directement la chaîne de processus dans la ligne de commande privilégiée de l'enregistreur. Comme la valeur du processus n'est pas sérialisée en un seul argument, ses espaces deviennent des délimiteurs d'arguments lorsque TTTracer analyse le résultat.

Conceptuellement, la portion injectée est :

Process=CVE-2026-97798-payload.exe
  -out ..\..\Users\Public\Documents\CVE97798\trace
  -launch ..\..\Users\Public\Documents\CVE97798\CVE-2026-97798-payload.exe
  --payload;

Les chemins relatifs sont délibérés. WER intègre également ces données dans un nom de chemin .ttdconfig ; un préfixe de lecteur absolu introduit un deux-points et échoue avec ERROR_INVALID_NAME. Le chemin de style traversée évite ce conflit d'analyseur tout en se normalisant vers le répertoire public contrôlé.

Il s'agit d'un problème d'injection d'arguments (CWE-88), et non d'une injection classique de commande shell. Aucun cmd.exe /c n'est requis au niveau du point de vulnérabilité : TTTracer lui-même interprète les commutateurs injectés.

Conception du PoC mono-fichier

L'utilisation normale ne nécessite que CVE-2026-97798.exe. La même image PE se réinvoque elle-même dans plusieurs modes internes :

  1. Elle analyse la table d'exceptions PE64 chargée et résout faultrep.dll!SpawnDataCollector dynamiquement à partir de la fonction unique qui contient l'opcode du collecteur WER et les invariants du protocole. Aucune RVA spécifique à une build n'est intégrée.
  2. Elle démarre son client console intégré et crée son état de preuve.
  3. Elle obtient le collecteur WER élevé et soumet la requête TTD forgée.
  4. TTTracer lance la même image en mode payload.
  5. Le payload expose un véritable cmd.exe via des named pipes, permettant à une console visible de session utilisateur d'interagir avec un shell créé dans la session 0.

L'artefact distribué reste un seul EXE. À l'exécution, il prépare deux alias de cette même image : un pour la console intégrée et un pour le payload élevé. L'alias du payload est également utilisé comme cible -onlaunch de TTTracer, afin que l'enregistreur observe le processus qu'il lance réellement et se termine lorsque cette courte étape de payload se termine. Le PoC réinitialise l'état TTD obsolète avant chaque déclenchement et de nouveau après un payload réussi, empêchant une exécution interrompue de faire échouer l'exécution suivante avec HRESULT 0x80070032.

Pour un utilisateur standard, le chemin du collecteur élevé atteint directement SYSTEM. Pour un administrateur filtré par UAC, WER lance d'abord le payload avec le jeton administrateur élevé lié — le nom du compte reste inchangé, mais TokenIsElevated=true. Le PoC se réinvoque ensuite lui-même en tant que SYSTEM. Il tente d'abord la création directe d'un processus avec jeton SYSTEM et utilise une entrée Task Scheduler éphémère comme solution de repli ; la tâche de repli est supprimée immédiatement après le lancement.

Environnement validé

ComposantValeur validée
OSWindows 11 24H2 x64, build 26100.9550
faultrep.dll vulnérable10.0.26100.9549
Comparaison corrigéefaultrep.dll 10.0.26100.9711
TTTracer / TTDRecord1.11.580.0
Vérification du résolveur dynamique9549 : RVA 0x4CEB0 ; 9711 : RVA 0x4E40C
SHA-256 du PoCC7B8FAFB132D69E9BD5A398AE183107155129C7080A87D56EFE55572450B4147

Le résolveur parcourt la table d'exceptions x64 et exige une fonction avec la configuration de grande trame du collecteur, l'opcode de requête 0xD0000002, la taille de message 0x578, le délai d'attente 10000, et ses trois mappages d'erreur d'attente/service attendus. Il a été vérifié contre les deux builds faultrep.dll fournies et testé négativement contre des images PE sans rapport. Aucun numéro de build ni RVA n'est stocké. Si une future build modifie suffisamment cette implémentation pour rendre la correspondance ambiguë ou incomplète, le PoC s'arrête avant d'effectuer un appel indirect.

Utilisation

Utilisez un instantané jetable de la build vulnérable. Depuis un PowerShell ou une Invite de commandes non élevé :

.\bin\CVE-2026-97798.exe

En cas de succès, la console intégrée affiche :

[CVE-2026-97798] Exploit shell token:
nt authority\system

La preuve lisible par machine est écrite ci-dessous :

C:\Users\Public\Documents\CVE97798\system-proof.txt

Le résolveur peut également être testé sur une DLL x64 hors ligne sans déclencher la vulnérabilité :

.\bin\CVE-2026-97798.exe --resolve C:\path\to\faultrep.dll

Pour vérifier au préalable la DLL système installée, également sans déclencher le chemin vulnérable :

.\bin\CVE-2026-97798.exe --preflight

Une validation réussie d'administrateur filtré a produit :

cve=CVE-2026-97798
user=NT AUTHORITY\SYSTEM
is_system=true
is_elevated=true
payload_session=0
shell_session=0
spawn_error=0

Compilation

Installez une chaîne d'outils LLVM-MinGW x64 et placez x86_64-w64-mingw32-clang++.exe dans le PATH, ou passez son chemin absolu explicitement :

.\build.ps1

# or
.\build.ps1 -Compiler C:\toolchains\llvm-mingw\bin\x86_64-w64-mingw32-clang++.exe
Télécharger l’outil