Skip to content
KitploitKITPLOIT
ИнструментыЭксплойтыБлог
Log in
Отправить
ИнструментыЭксплойтыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
CVE-2026-42978-PoC-Research — CVE-2026-42978 — Состояние гонки типа Use-After-Free в службе Push-уведомлений Windows (WpnService). Сравнение патчей, анализ первопричин, лаборатория TOCTOU, правила обнаружения Sysmon/ETW. | Kitploit
Инструменты/GitHubGitHub/grizzzer/cve-2026-42978-poc-research
Анализ уязвимостейЭксплуатацияФорензикаАнализ Бинарных ФайловОбучение и ОбразованиеРеагирование на ИнцидентыЛаборатории и Практика
GitHubgrizzzer/cve-2026-42978-poc-research

CVE-2026-42978-PoC-Research

CVE-2026-42978 — Состояние гонки типа Use-After-Free в службе Push-уведомлений Windows (WpnService). Сравнение патчей, анализ первопричин, лаборатория TOCTOU, правила обнаружения Sysmon/ETW.

Репозиторий
2871023 месяцев назадПроверено Kitploit

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

CVE-2026-42978 PoC и исследование — Windows Push Notifications: использование после освобождения

Состояние гонки в службе Push-уведомлений Windows (WpnService), которая работает как NT AUTHORITY\SYSTEM. Злоумышленник с локальным доступом может вызвать использование после освобождения во время завершения работы платформы и потенциально повысить привилегии.

  • CVE: CVE-2026-42978
  • BDU: BDU:2026-08249
  • Тип: CWE-362 (Состояние гонки), Использование после освобождения
  • CVSS: 7.8 (Высокий)
  • Затронуты: Windows 10, Windows 11, Windows Server 2016/2019/2022/2025
  • Исправлено: 10 июня 2026 г. (вторник обновлений)
  • Статус: Исправлено. Этот репозиторий предназначен только для защитных исследований.

Как это работает

WpnService — это служба Push-уведомлений Windows. Она работает в сеансе 0 как LocalSystem внутри svchost.exe -k netsvcs -p. Вся доставка уведомлений — всплывающие уведомления (toasts), плитки (tiles), значки (badges) — проходит через нее.

Уязвимость находится в wpncore.dll, а именно в классе PresentationEndpointFacade. Этот класс оборачивает все вызовы API уведомлений (доставка всплывающих уведомлений, управление сеансами, запросы настроек и т.д.) и делегирует их PresentationEndpointImpl.

Ошибка: во время завершения работы платформы объект NotificationPlatform уничтожается. Но методы Facade не проверяют, выполняется ли завершение работы — они получают указатель на платформу, платформа освобождается потоком завершения, а Facade использует висящий указатель. Классическое состояние гонки с использованием после освобождения.

Уязвимый код (декомпилирован из 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(...);
}

Декомпиляция уязвимого ToastUnblockAll в Ghidra
Ghidra: уязвимый ToastUnblockAll — нет синхронизации перед доступом к платформе

Исправленный код (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
    }
}

Исправление добавляет три вещи:

  1. AcquireSRWLockShared — общая блокировка читателей-писателей. Несколько вызовов API могут выполняться одновременно, но завершение работы захватывает эксклюзивную блокировку и блокирует их все.
  2. Проверка s_platformShutdown — если завершение уже началось, немедленно выходите с ошибкой E_APPLICATION_EXITING.
  3. Освобождение блокировки в стиле RAII — блокировка удерживается в оболочке wil::unique_storage, поэтому она освобождается даже при возникновении исключения.

Флаг функции Feature_4097557817 предназначен для поэтапного развертывания через WIL (Windows Internal Library). Он позволяет Microsoft постепенно включать исправление и отключать его, если что-то сломается.

Масштаб исправления

Это не однократная ошибка. Тот же шаблон блокировки+защиты был добавлен к 49 функциям в wpncore.dll:

КатегорияФункции
Операции с всплывающими уведомлениямиToastUnblockAll, ToastCreateSession, ToastCloseSession, ToastRequestAllNotifications, ToastSuppress
Операции с плиткамиTileCreateSession, TileCloseSession, TileRequestResourceForeground
РегистрацияRegisterApplication, UnregisterApplication, RegisterHandler, UpdateRegistration, RegisterSystemApplication
НастройкиChangeAppSetting, QueryAppSetting, QueryGlobalSetting, RegisterSettingCallback, UnregisterSettingCallback
ДоставкаDeliver, GetPayloadForNotificationId, Submit, PostScheduledNotification
ЗапросыGetRegisteredHandler, GetRegisteredHandlersFromParent, GetSettingsFromHandler, GetAssetsFromHandler

Каждый метод PresentationEndpointFacade::*, который затрагивает платформу, получил то же исправление. Подчиненные методы PresentationEndpointImpl::* не изменились — проблема была только на уровне фасада.

Воздействие

WpnService работает как SYSTEM. Если состояние гонки выиграно:

  1. Память освобожденного объекта NotificationPlatform может быть переиспользована и заполнена данными, контролируемыми злоумышленником (heap spray)
  2. Последующий вызов виртуального метода по висящему указателю переходит на адрес, контролируемый злоумышленником
  3. Выполнение кода с правами NT AUTHORITY\SYSTEM

Фактическая эксплуатация — heap spray, перехват vtable, достижение выполнения кода — выходит за рамки этого исследования. Этот репозиторий фокусируется на понимании первопричины и построении обнаружения.

Лаборатория TOCTOU (состояние гонки)

Каталог lab/ содержит автономную демонстрацию на языке C, которая воспроизводит класс ошибок, не затрагивая WpnService. Он использует архитектуру именованных каналов и разделяемой памяти, аналогичную WpnService.

Как это работает:

  • vulnerable_service.exe считывает длину сообщения из разделяемой памяти, проверяет ее, засыпает на 50 мс, затем считывает длину снова (double-fetch).
  • race_attacker.exe устанавливает безопасную длину, запускает службу, затем немедленно переключает разделяемую память на значение переполнения.
  • Если время совпадает, служба считывает значение переполнения при втором чтении — переполнение буфера.

Запустите vulnerable_service.exe --patched, чтобы увидеть исправление: однократное чтение и захват в локальную переменную.

Демонстрация состояния гонки TOCTOU
Слева: служба обнаруживает гонку (5/5). Справа: атакующий переключает значения разделяемой памяти.

Сборка и запуск

Требуется GCC (MinGW). Из каталога lab/:

build.bat

Терминал 1:

vulnerable_service.exe

Терминал 2:

race_attacker.exe 5

Затем сравните с vulnerable_service.exe --patched — та же атака, ноль обнаруженных гонок.

Обнаружение

ETW монитор (detection/etw_wpn_monitor.ps1)

Скрипт PowerShell, проверяющий 7 индикаторов:

  1. Состояние и PID WpnService
  2. История сбоев/перезапусков (неудачная эксплуатация оставляет следы сбоев)
  3. Обнаружение всплесков журнала событий Push Notifications Platform
  4. Именованные каналы, связанные с WPN
  5. Проверка исправления (проверяет дату wpncore.dll)
  6. Процессы с загруженными модулями WPN
  7. Аудит символических ссылок/соединений в путях данных уведомлений
powershell -ExecutionPolicy Bypass .\detection\etw_wpn_monitor.ps1
Скачать инструмент