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-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
287102il y a 3 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)

// 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)

// 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/ :

build.bat

Terminal 1 :

vulnerable_service.exe

Terminal 2 :

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
powershell -ExecutionPolicy Bypass .\detection\etw_wpn_monitor.ps1
Télécharger l’outil