
PoC pour CVE-2026-58635 : Escalade de privilèges locale du Braille du Narrateur Windows
Preuve de concept pour CVE-2026-58635, une vulnérabilité d'injection de commande dans le Narrateur Windows en braille. Un utilisateur authentifié local peut abuser d'un paramètre BrlAPI inscriptible pour faire exécuter un programme arbitraire par le service privilégié BRLTTY.
Microsoft évalue le problème comme Important avec un score CVSS 3.1 de 7.8 (CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H) et le mappe à CWE-77.
Ce dépôt est destiné uniquement aux tests autorisés dans un laboratoire isolé. Ne l'exécutez pas sur des systèmes de production ou des systèmes que vous ne possédez pas ou n'administrez pas.
La PoC exerce le chemin suivant :
utilisateur standard
-> démarre le service BrlAPI accessible localement
-> se connecte à localhost:0 avec auth=none
-> écrit le paramètre global BrlAPI 29 (table braille littéraire)
-> BRLTTY interprète un chemin exécutable comme une table de contraction externe
-> BRLTTY lance le programme fourni en tant que LocalService
-> étape optionnelle de jeton SeImpersonate
-> invite de commande SYSTEM interactive
La primitive spécifique à la CVE se termine par une exécution arbitraire en tant que LocalService. Sur la configuration Windows testée, ce jeton possède SeImpersonatePrivilege, donc la démonstration incluse utilise optionnellement SigmaPotato pour obtenir un jeton SYSTEM et lancer un shell visible dans la session console active.
BRLTTY 6.4.1 expose BRLAPI_PARAM_LITERARY_BRAILLE_TABLE comme global et inscriptible. Le serveur transmet la chaîne fournie à son chargeur de table de contraction. Sous Windows, un chemin dont l'extension est présente dans PATHEXT est traité comme un programme de contraction externe et démarré via le lanceur de commande hôte de BRLTTY.
Le déclencheur normalise un chemin Windows ordinaire comme C:\lab\bin\localservice_stage.exe vers la forme avec barre oblique attendue par cette branche de gestion de chemin BRLTTY/MinGW. Aucun profil utilisateur, lettre de lecteur, répertoire Windows ou nom de compte n'est compilé dans la PoC.
La fonctionnalité optionnelle Accessibility.Braille doit être installée pour que la surface d'attaque testée existe. L'enregistrement CNA de Microsoft liste plusieurs branches client et serveur Windows comme affectées en dessous de leurs révisions corrigées de juillet 2026. Les exemples courants incluent :
Les numéros de build seuls sont un signal de dépistage, pas un substitut à l'avis du fournisseur et à l'inventaire des composants installés. Utilisez l'outil de vérification en lecture seule inclus :
powershell -ExecutionPolicy Bypass -File .\scripts\Check-Vulnerability.ps1
Il rapporte :
brlapi.dll et brltty.exe ;L'outil de vérification ne démarre pas BrlAPI, n'écrit pas le paramètre 29 et n'exécute pas de charge utile.
.
├── bin/ Binaires PoC compilés et SigmaPotato
├── scripts/
│ ├── Check-Vulnerability.ps1 Vérification en lecture seule de l'exposition/build
│ ├── Clear-Results.cmd Supprime les fichiers de résultats générés
│ ├── Get-SigmaPotato.ps1 Récupère et vérifie le hash de l'assistant amont
│ ├── Prepare-Lab.ps1 Installe la fonctionnalité optionnelle et définit les ACL du labo
│ └── Run-PoC.cmd Démonstration de bout en bout pour utilisateur standard
├── src/
│ ├── brlapi_trigger.cpp Client BrlAPI et écriture du paramètre 29
│ ├── localservice_stage.cpp Preuve d'identité LocalService et chaînage optionnel
│ ├── path_util.h Aides runtime pour les chemins
│ └── system_shell_launcher.cpp
├── third_party/SigmaPotato/ Version, hash, licence et attribution
├── Makefile
├── LICENSE
├── SHA256SUMS
└── NOTICE
La PoC originale est en C++17 et se compile avec la chaîne d'outils MinGW-w64 x86-64.
Sur Debian ou Ubuntu :
sudo apt install make g++-mingw-w64-x86-64
make
La compilation crée :
bin/brlapi_trigger.exe
bin/localservice_stage.exe
bin/system_shell_launcher.exe
Pour obtenir la version exacte de SigmaPotato utilisée par la démonstration de bout en bout, exécutez ceci depuis Windows :
powershell -ExecutionPolicy Bypass -File .\scripts\Get-SigmaPotato.ps1
Le script de téléchargement épingle la version v1.2.6 et vérifie SHA-256 :
EC68A6BF7F104A815BD21E27E73A8DFB8AFCB282D4997BEBE9ECCD6C89259506
Depuis une invite PowerShell élevée dans la racine du dépôt :
powershell -ExecutionPolicy Bypass -File .\scripts\Prepare-Lab.ps1
Ce script :
Accessibility.Braille~~~~0.0.1.0 lorsqu'il est absent ;bin\results.Si la fonctionnalité est présente mais que le service n'est pas encore enregistré, redémarrez et exécutez le script de préparation une fois de plus.
Connectez-vous avec n'importe quel compte local ou domaine qui n'est pas membre du groupe Administrateurs local. Le dépôt ne crée pas d'utilisateurs ni ne définit de mots de passe.
Les produits de sécurité détectent couramment les outils de preuve de concept d'usurpation de jeton. Configurez le laboratoire isolé conformément à la politique de test de votre organisation avant de placer ou d'exécuter les binaires. N'affaiblissez pas la protection des points de terminaison sur un poste de travail normal.
Depuis une invite de commande non élevée :
scripts\Run-PoC.cmd
La sortie attendue comprend :
Connection: descriptor=<number> host=localhost:0 auth=none
Parameter 29 global write: 0
USER=LOCAL SERVICE
SID=S-1-5-19
La deuxième étape optionnelle enregistre sa sortie dans bin\results\escalation.log. En cas de succès, bin\results\system_shell_status.txt contient CREATED=1, et une nouvelle fenêtre intitulée CVE-2026-58635 SYSTEM SHELL s'ouvre. Dans cette fenêtre :
whoami
devrait retourner :
nt authority\system
Toutes les preuves générées sont placées dans bin\results :
Supprimez les résultats générés avec :
scripts\Clear-Results.cmd
Installez la mise à jour de sécurité applicable de juillet 2026 ou une mise à jour cumulative ultérieure. Pour Windows 11 24H2 et 25H2, Microsoft livre les révisions corrigées dans KB5101650 (26100.8875 et 26200.8875). Si le support Braille n'est pas nécessaire, la suppression de la fonctionnalité optionnelle supprime également cette surface d'attaque :
Remove-WindowsCapability -Online -Name Accessibility.Braille~~~~0.0.1.0
Après la correction, réexécutez Check-Vulnerability.ps1 et confirmez que le système correspond à la révision corrigée ou que le composant est absent.
| Branche du produit | Potentiellement affectée en dessous | Niveau corrigé connu |
|---|
| Windows 10 1809 / Server 2019 | 17763.9020 | 17763.9020 ou ultérieur |
| Windows 10 21H2 | 19044.7548 | 19044.7548 ou ultérieur |
| Windows 10 22H2 | 19045.7548 | 19045.7548 ou ultérieur |
| Windows Server 2022 | 20348.5386 | 20348.5386 ou ultérieur |
| Windows 11 24H2 | 26100.8875 | 26100.8875 ou ultérieur |
| Windows 11 25H2 | 26200.8875 | 26200.8875 ou ultérieur |
| Windows 11 26H1 | 28000.2525 | 28000.2525 ou ultérieur |
| Fichier | Objectif |
|---|
localservice_identity.txt | Nom d'utilisateur, SID et PID de l'étape lancée par la CVE |
localservice_whoami.txt | Groupes de jetons complets et privilèges |
escalation.log | Sortie de l'assistant d'usurpation de jeton optionnel |
escalation_status.txt | Statut de création/erreur/sortie du processus assistant |
system_shell_status.txt | Résultat de la création du shell de session active |