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

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

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.

Репозиторий
28722 месяцев назадПроверено 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)

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(...);
}

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

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

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

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

root@kitploit:~
build.bat

Терминал 1:

root@kitploit:~
vulnerable_service.exe

Терминал 2:

root@kitploit:~
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. Аудит символических ссылок/соединений в путях данных уведомлений
root@kitploit:~
powershell -ExecutionPolicy Bypass .\detection\etw_wpn_monitor.ps1

Вывод ETW монитора
ETW монитор: WpnService запущен (PID 6432), сбоев нет, 100 событий/час, система исправлена

Правила Sysmon (detection/sysmon_wpn_race_detect.xml)

Шесть групп правил для непрерывного мониторинга:

ПравилоЧто отслеживает
WPN_EoP_ChildProcesssvchost (netsvcs) порождает cmd/powershell/wscript
WPN_PipeAccessПодключения к именованным каналам, связанным с WPN
WPN_FileCreationСоздание файлов в каталогах данных уведомлений
WPN_RegistryTamperingЗапись в реестр ключей PushNotifications
WPN_ProcessAccessДескрипторы PROCESS_ALL_ACCESS к svchost
WPN_ThreadInjectionCreateRemoteThread в svchost

Установка:

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

Просмотр событий

Активность WpnService регистрируется в Microsoft-Windows-PushNotifications-Platform/Operational. Ключевые события для отслеживания:

  • Событие 1225: команды WPN на транспортном уровне
  • Быстрые всплески событий (>20/мин) — возможное распыление гонки (race spray)
  • События ошибок/критические события — возможный сбой при неудачной эксплуатации

Событие WPN в просмотре событий
Просмотр событий: журнал PushNotifications-Platform operational, ID события 1225

Сравнение исправлений (Patch Diffing)

Ключевые результаты сравнения wpncore.dll:

  • Секция .text выросла на 18 432 байта (новый код блокировки/защиты в 49 функциях)
  • Секция .data выросла на 96 байт (новые глобальные переменные Wns::s_platformLock и Wns::s_platformShutdown)
  • Новых импортов не добавлено — AcquireSRWLockShared/ReleaseSRWLockShared уже были в таблице импорта
  • Новый деструктор RAII: ~unique_any_t<...ReleaseSRWLockExclusive...> подтверждает добавление оболочки блокировки

Полные отчеты находятся в reports/.

Связанные CVE

CVE-2026-42978 является частью кластера из 9 уязвимостей, связанных с WPN, исправленных в июне 2026 года:

CVEТипCWE
CVE-2026-42977EoPСостояние гонки
CVE-2026-42978EoPСостояние гонки
CVE-2026-42979EoPСостояние гонки
CVE-2026-42991EoPСостояние гонки
CVE-2026-42969Раскрытие информацииСостояние гонки
CVE-2026-42970Раскрытие информацииСостояние гонки
CVE-2026-42973Раскрытие информацииСостояние гонки
CVE-2026-26167EoP—
CVE-2026-32160EoP—

Структура проекта

root@kitploit:~
CVE-2026-42978/
├── README.md
├── lab/
│   ├── vulnerable_service.c    # фиктивный WpnService с ошибкой double-fetch
│   ├── race_attacker.c         # атакующий, эксплуатирующий double-fetch
│   └── build.bat               # скрипт сборки GCC
├── detection/
│   ├── etw_wpn_monitor.ps1     # детектор PowerShell с 7 проверками
│   └── sysmon_wpn_race_detect.xml  # конфигурация правил Sysmon
├── reports/
│   ├── PE_DIFF_REPORT.txt      # результаты сравнения секций/импорта PE
│   └── FUNCTION_DIFF_REPORT.txt # пофункциональное сравнение (49 изменений)
└── img/                        # скриншоты для этого README

Требования

  • Windows 10/11 (для запуска лабораторных и средств обнаружения)
  • GCC / MinGW (для сборки лаборатории на C)
  • Python 3.9+ (для скриптов сравнения)
  • Ghidra 11+ (для безголовой декомпиляции, опционально)
  • Sysmon (для правил обнаружения, опционально)

Отказ от ответственности

Этот проект предназначен для защитных исследований безопасности. Уязвимость исправлена. Включенный код не является оружием. Лаборатория TOCTOU демонстрирует класс ошибок на автономном фиктивном сервисе — она не взаимодействует с WpnService или любыми системными компонентами.

Убедитесь, что ваша Windows обновлена. Если etw_wpn_monitor.ps1 сообщает, что ваша система не исправлена — немедленно установите накопительное обновление за июнь 2026 года.

Вклад

Если у вас есть что добавить — лучшие правила обнаружения, PoC эксплойта, сессия Ghidra Version Tracking, сигнатуры YARA или анализ связанных CVE в этом кластере — PR приветствуются.

Идеи для вклада:

  • Правила Sigma для SIEM-стороны обнаружения
  • Более глубокий анализ CVE-2026-42977/42979/42991 (та же семья гонок WPN)
  • Анализ кучи на основе WinDbg для использования после освобождения
  • Улучшенный ETW монитор с обнаружением всплесков ALPC в реальном времени
  • Рекомендации по правилам ASR Windows Defender

Откройте issue, если у вас есть вопросы или вы хотите обсудить исследование.

Лицензия

MIT

Скачать инструмент