Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
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é.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
CVE-2026-42978-PoC-Research — CVE-2026-42978 — Condition de compétition Use-After-Free dans les notifications push Windows (WpnService). Diff de patch, analyse des causes racines, laboratoire TOCTOU, règles de détection Sysmon/ETW. | Kitploit
Outils/GitHubGitHub/grizzzer/cve-2026-42978-poc-research
Analyse des VulnérabilitésExploitationAnalyse ForensiqueAnalyse de BinairesApprentissage et ÉducationRéponse aux IncidentsLabs et Pratique
GitHubgrizzzer/cve-2026-42978-poc-research

CVE-2026-42978-PoC-Research

CVE-2026-42978 — Condition de compétition Use-After-Free dans les notifications push Windows (WpnService). Diff de patch, analyse des causes racines, laboratoire TOCTOU, règles de détection Sysmon/ETW.

Voir le dépôt
2872il y a 2 moisVé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-42978 PoC & Recherche — Use-After-Free dans les notifications push Windows

Condition de concurrence dans le service de notifications push Windows (WpnService) qui s'exécute en tant que NT AUTHORITY\SYSTEM. Un attaquant ayant un accès local peut déclencher une use-after-free lors de l'arrêt de la plateforme et potentiellement élever ses privilèges.

  • CVE: CVE-2026-42978
  • BDU: BDU:2026-08249
  • Type: CWE-362 (Condition de concurrence), Utilisation après libération
  • CVSS: 7.8 (Élevé)
  • Systèmes affectés: Windows 10, Windows 11, Windows Server 2016/2019/2022/2025
  • Corrigé: 10 juin 2026 (Patch Tuesday)
  • Statut: Corrigé. Ce dépôt est destiné uniquement à la recherche défensive.

Comment ça fonctionne

WpnService est le service de notifications push Windows. Il s'exécute dans la session 0 en tant que LocalSystem à l'intérieur de svchost.exe -k netsvcs -p. Toute la livraison de notifications — toasts, vignettes, badges — passe par lui.

La vulnérabilité se trouve dans wpncore.dll, plus précisément dans la classe PresentationEndpointFacade. Cette classe encapsule tous les appels API de notification (livraison de toasts, gestion de sessions, requêtes de paramètres, etc.) et délègue à PresentationEndpointImpl.

Le bogue : lors de l'arrêt de la plateforme, l'objet NotificationPlatform est détruit. Mais les méthodes de Facade ne vérifient pas si l'arrêt est en cours — elles récupèrent un pointeur vers la plateforme, la plateforme est libérée par le thread d'arrêt, et la Facade utilise un pointeur pendant. Condition de concurrence classique de type utilisation après libération.

Code vulnérable (décompilé de wpncore.dll build 26100.8521)

root@kitploit:~
// PresentationEndpointFacade::ToastUnblockAll — VULNERABLE
long ToastUnblockAll(PresentationEndpointFacade *this) {
    // No lock. No shutdown check. Just grab the platform pointer and go.
    NotificationPlatformHandle::Get(this + 0x50);
    if (platform == NULL) Throw_Hr(...);
    // If shutdown frees the platform right here — use-after-free
    return PresentationEndpointImpl::UnblockToastsForEachApp(...);
}

Ghidra disassembly of vulnerable ToastUnblockAll
Désassemblage Ghidra de ToastUnblockAll vulnérable — aucune synchronisation avant l'accès à la plateforme

Code corrigé (wpncore.dll build 26100.8655)

root@kitploit:~
// PresentationEndpointFacade::ToastUnblockAll — PATCHED
long ToastUnblockAll(PresentationEndpointFacade *this) {
    if (Feature_4097557817::IsEnabled()) {
        AcquireSRWLockShared(&Wns::s_platformLock);    // 1. shared lock
        if (Wns::s_platformShutdown)                    // 2. shutdown guard
            Throw_Hr(E_APPLICATION_EXITING);
        NotificationPlatformHandle::Get(this + 0x50);
        // ... do work ...
        ReleaseSRWLockShared(&Wns::s_platformLock);     // 3. RAII release
    } else {
        // feature flag off — old behavior preserved for rollback
    }
}

Le correctif ajoute trois choses :

  1. AcquireSRWLockShared — verrou partagé lecteurs-écrivain. Plusieurs appels API peuvent s'exécuter simultanément, mais l'arrêt prend un verrou exclusif et les bloque tous.
  2. vérification de s_platformShutdown — si l'arrêt a déjà commencé, sortir immédiatement avec E_APPLICATION_EXITING.
  3. Libération RAII du verrou — le verrou est détenu dans un wrapper wil::unique_storage, donc il est libéré même si une exception est levée.

L'indicateur de fonctionnalité Feature_4097557817 est destiné à un déploiement progressif via WIL (Windows Internal Library). Il permet à Microsoft d'activer le correctif progressivement et de le désactiver si quelque chose se casse.

Échelle du correctif

Ce n'est pas un bogue d'une seule fonction. Le même motif de verrou+protection a été ajouté à 49 fonctions dans wpncore.dll :

CatégorieFonctions
Opérations de toastToastUnblockAll, ToastCreateSession, ToastCloseSession, ToastRequestAllNotifications, ToastSuppress
Opérations de vignetteTileCreateSession, TileCloseSession, TileRequestResourceForeground
InscriptionRegisterApplication, UnregisterApplication, RegisterHandler, UpdateRegistration, RegisterSystemApplication
ParamètresChangeAppSetting, QueryAppSetting, QueryGlobalSetting, RegisterSettingCallback, UnregisterSettingCallback
LivraisonDeliver, GetPayloadForNotificationId, Submit, PostScheduledNotification
RequêtesGetRegisteredHandler, GetRegisteredHandlersFromParent, GetSettingsFromHandler, GetAssetsFromHandler

Toutes les méthodes PresentationEndpointFacade::* qui touchent la plateforme ont reçu le même correctif. Les méthodes PresentationEndpointImpl::* sous-jacentes sont inchangées — le problème était uniquement au niveau de la façade.

Impact

WpnService s'exécute en tant que SYSTEM. Si la course est gagnée :

  1. La mémoire de l'objet NotificationPlatform libéré peut être récupérée et remplie avec des données contrôlées par l'attaquant (heap spray)
  2. Un appel de méthode virtuelle ultérieur sur le pointeur pendant saute vers une adresse contrôlée par l'attaquant
  3. Exécution de code en tant que NT AUTHORITY\SYSTEM

L'exploitation réelle — heap spray, détournement de vtable, obtention d'exécution de code — est hors du cadre de cette recherche. Ce dépôt se concentre sur la compréhension de la cause racine et la construction de la détection.

Laboratoire de condition de concurrence TOCTOU

Le répertoire lab/ contient une démo C autonome qui reproduit la classe de bogue sans toucher à WpnService. Il utilise une architecture de pipe nommé + mémoire partagée similaire à WpnService.

Comment ça fonctionne :

  • vulnerable_service.exe lit une longueur de message depuis la mémoire partagée, la valide, dort 50 ms, puis lit à nouveau la longueur encore une fois (double récupération).
  • race_attacker.exe définit une longueur sûre, déclenche le service, puis bascule immédiatement la mémoire partagée vers une valeur de débordement.
  • Si le timing est bon, le service lit la valeur de débordement lors de la deuxième récupération — débordement de tampon.

Exécutez vulnerable_service.exe --patched pour voir le correctif : capture unique en une variable locale.

TOCTOU race condition demo
Gauche : le service détecte la course (5/5). Droite : l'attaquant bascule les valeurs de la mémoire partagée.

Construire et exécuter

Nécessite GCC (MinGW). Depuis le répertoire lab/ :

root@kitploit:~
build.bat

Terminal 1 :

root@kitploit:~
vulnerable_service.exe

Terminal 2 :

root@kitploit:~
race_attacker.exe 5

Comparez ensuite avec vulnerable_service.exe --patched — même attaque, zéro courses détectées.

Détection

Moniteur ETW (detection/etw_wpn_monitor.ps1)

Script PowerShell qui vérifie 7 indicateurs :

  1. État et PID de WpnService
  2. Historique des crashs/redémarrages (une exploitation échouée laisse des traces de crash)
  3. Détection de rafales dans le journal des événements de la plateforme de notifications Push
  4. Pipes nommés liés à WPN
  5. Vérification du correctif (vérifie la date de wpncore.dll)
  6. Processus avec des modules WPN chargés
  7. Audit des liens symboliques/jonctions dans les chemins de données de notification
root@kitploit:~
powershell -ExecutionPolicy Bypass .\detection\etw_wpn_monitor.ps1

ETW monitor output
Moniteur ETW : WpnService en cours d'exécution (PID 6432), aucun crash, 100 événements/heure, système corrigé

Règles Sysmon (detection/sysmon_wpn_race_detect.xml)

Six groupes de règles pour une surveillance continue :

RègleCe qu'il détecte
WPN_EoP_ChildProcesssvchost (netsvcs) générant cmd/powershell/wscript
WPN_PipeAccessConnexions aux pipes nommés liés à WPN
WPN_FileCreationCréation de fichiers dans les répertoires de données de notification
WPN_RegistryTamperingÉcritures de registre dans les clés PushNotifications
WPN_ProcessAccessHandles PROCESS_ALL_ACCESS vers svchost
WPN_ThreadInjectionCreateRemoteThread dans svchost

Installation :

root@kitploit:~
sysmon64.exe -accepteula -i detection\sysmon_wpn_race_detect.xml

Observateur d'événements

L'activité de WpnService est enregistrée dans Microsoft-Windows-PushNotifications-Platform/Operational. Événements clés à surveiller :

  • Événement 1225 : commandes WPN au niveau transport
  • Rafales d'événements rapides (>20/min) — possible spray de course
  • Événements d'erreur/critiques — possible crash dû à une exploitation échouée

Event Viewer WPN event
Observateur d'événements : journal opérationnel PushNotifications-Platform, ID d'événement 1225

Différences de correctif

Principales découvertes lors de la comparaison de wpncore.dll :

  • La section .text a augmenté de 18 432 octets (nouveau code de verrou/protection dans 49 fonctions)
  • La section .data a augmenté de 96 octets (nouvelles globales Wns::s_platformLock et Wns::s_platformShutdown)
  • Aucune nouvelle importation ajoutée — AcquireSRWLockShared/ReleaseSRWLockShared étaient déjà dans la table d'importation
  • Nouveau destructeur RAII : ~unique_any_t<...ReleaseSRWLockExclusive...> confirme l'ajout du wrapper de verrou

Les rapports complets sont dans reports/.

CVE liées

CVE-2026-42978 fait partie d'un groupe de 9 vulnérabilités liées à WPN corrigées en juin 2026 :

CVETypeCWE
CVE-2026-42977EoPCondition de concurrence
CVE-2026-42978EoPCondition de concurrence
CVE-2026-42979EoPCondition de concurrence
CVE-2026-42991EoPCondition de concurrence
CVE-2026-42969Divulgation d'informationsCondition de concurrence
CVE-2026-42970Divulgation d'informationsCondition de concurrence
CVE-2026-42973Divulgation d'informationsCondition de concurrence
CVE-2026-26167EoP—
CVE-2026-32160EoP—

Structure du projet

root@kitploit:~
CVE-2026-42978/
├── README.md
├── lab/
│   ├── vulnerable_service.c    # mock WpnService with double-fetch bug
│   ├── race_attacker.c         # attacker that exploits the double-fetch
│   └── build.bat               # GCC build script
├── detection/
│   ├── etw_wpn_monitor.ps1     # 7-check PowerShell detector
│   └── sysmon_wpn_race_detect.xml  # Sysmon rule config
├── reports/
│   ├── PE_DIFF_REPORT.txt      # PE section/import diff results
│   └── FUNCTION_DIFF_REPORT.txt # function-level diff (49 changed)
└── img/                        # screenshots for this README

Prérequis

  • Windows 10/11 (pour exécuter le laboratoire et les outils de détection)
  • GCC / MinGW (pour construire le laboratoire C)
  • Python 3.9+ (pour les scripts de comparaison)
  • Ghidra 11+ (pour la décompilation sans interface, optionnel)
  • Sysmon (pour les règles de détection, optionnel)

Clause de non-responsabilité

Ce projet est destiné à la recherche défensive en sécurité. La vulnérabilité est corrigée. Aucun code d'exploitation armé n'est inclus. Le laboratoire TOCTOU démontre la classe de bogue sur un service simulé autonome — il n'interagit pas avec WpnService ou tout composant système.

Assurez-vous que votre Windows est à jour. Si etw_wpn_monitor.ps1 signale que votre système n'est pas corrigé — installez immédiatement la mise à jour cumulative de juin 2026.

Contribuer

Si vous avez quelque chose à ajouter — meilleures règles de détection, PoC d'exploitation, session de suivi de version Ghidra, signatures YARA, ou analyse des CVE liées dans ce groupe — les PR sont les bienvenus.

Idées de contributions :

  • Règles Sigma pour le volet SIEM de la détection
  • Analyse plus approfondie de CVE-2026-42977/42979/42991 (même famille de courses WPN)
  • Analyse de tas basée sur WinDbg de l'utilisation après libération
  • Moniteur ETW amélioré avec détection en temps réel des rafales ALPC
  • Recommandations de règles ASR de Windows Defender

Ouvrez un ticket si vous avez des questions ou souhaitez discuter de la recherche.

Licence

MIT

Télécharger l’outil