Sploitus

Exploit for cve-2026-29923 CVE-2026-29923

kitploit · 2026-08-31

Exploit Code

MARKDOWN143 lines
## https://sploitus.com/exploit?id=KITPLOIT:TOOLS-GITHUB-MEIN-0-CVE-2026-29923
# CVE-2026-29923 — локальное повышение привилегий в pstrip64.sys

Минимальный proof-of-concept для CVE-2026-29923 — уязвимости в драйвере ядра `pstrip64.sys` (EnTech Taiwan PowerStrip ≤ 3.90.736), которая позволяет непривилегированному процессу в режиме пользователя повысить привилегии до `NT AUTHORITY\SYSTEM`.

* * *

## Суть уязвимости

`pstrip64.sys` предоставляет IOCTL (`0x80002008`), который принимает физический адрес, указанный пользователем, и напрямую отображает его в виртуальное адресное пространство вызывающего процесса, открывая `\Device\PhysicalMemory` и вызывая `ZwMapViewOfSection` с дескриптором текущего процесса. Никакой проверки привилегий, никакой валидации адресов, кроме той, что выполняет `HalTranslateBusAddress`, и никакого контроля доступа к символической ссылке `\\.\PSTRIP64`.

В результате непривилегированный процесс получает неограниченный примитив чтения/записи физической памяти.

* * *

## Эксплуатация

Имея произвольное чтение/запись физической памяти, эксплойт выполняет четыре шага.

**1\. Поиск структур EPROCESS**

Физическая память сканируется блоками по 2 МБ. В каждом блоке ищется тег пула ядра `Proc` (`0x636F7250`), который отмечает выделение пула, содержащее структуру `_EPROCESS` процесса. Кандидаты проверяются с помощью трёх лёгких эвристик, прежде чем PID начинает считаться достоверным:

  * `PriorityClass == 0x2` — все активные процессы работают с обычным приоритетом
  * `ProcessLock == 0x0` — поле блокировки сброшено у стабильного процесса
  * `ImageFileName[0]` — печатный ASCII; мусорные данные редко удовлетворяют этому условию



**2\. Поиск обоих указателей на токен**

Нужны два целевых значения:

  * **Физический адрес** поля `Token` нашего собственного процесса внутри `_EPROCESS`
  * **Значение токена** , хранящееся в `_EPROCESS` системного процесса (PID 4)



**3\. Перезапись нашего токена**

Страница 4 КБ, содержащая наше поле `Token`, отображается, и поле перезаписывается значением системного токена. С этого момента ядро Windows обрабатывает наш процесс как `NT AUTHORITY\SYSTEM`.

**4\. Запуск оболочки**

`cmd.exe` запускается через `CreateProcessA`. Поскольку дочерние процессы наследуют токен родительского процесса, полученная оболочка работает как SYSTEM.

* * *

## Предостережение об MMIO

Окно физических адресов от 3 до 4 ГБ на системах x86 зарезервировано под MMIO. Попытка отобразить страницы в этом диапазоне приводит к тому, что драйвер возвращает ошибку `74` (сбой `HalTranslateBusAddress`). Сканирование пропускает это окно и продолжается с `0x100000000`, чтобы перехватить структуры ядра, которые Windows размещает выше отметки 4 ГБ.

* * *

## Требование 32-битной сборки

Обработчик отображения драйвера записывает возвращаемый виртуальный адрес в поле `DWORD` (`LowPart`), усекая 64-битный VA до 32 бит. 64-битная сборка получает повреждённый указатель и немедленно падает. **Компилируйте как x86.**

* * *

## Затронутое ПО

Программное обеспечение| Версии  
---|---  
EnTech Taiwan PowerStrip| ≤ 3.90.736  
  
Хэш драйвера (SHA-256):

root@kitploit:~
    
    
    ab01485bb7c8bc1a9c86096eeea6d31d8fad557bf4d44072b46373d2203faa6e
    

* * *

## Смещения EPROCESS

Жёстко заданные смещения рассчитаны на **Windows 10 22H2 x64**. Для других сборок требуются обновлённые значения — используйте `dt nt!_EPROCESS` в WinDbg для проверки.

* * *

## Сборка

Откройте командную строку разработчика x86 Visual Studio и выполните:

root@kitploit:~
    
    
    cl /EHsc /O2 exploit.c /Fe:poc.exe
    

Или установите целевую платформу **x86** в Visual Studio и соберите проект в конфигурации Release. Бинарный файл не требует внешних зависимостей, кроме Windows SDK.

* * *

## Использование

Сначала загрузите `pstrip64.sys` (для загрузки драйвера требуются права администратора, но не для запуска самого эксплойта после его загрузки), затем:

root@kitploit:~
    
    
    poc.exe
    

Откроется новое окно `cmd.exe`, работающее от имени `NT AUTHORITY\SYSTEM`.

* * *

## Меры защиты

**Заблокировать загрузку драйвера (рекомендуется)**

  * Добавьте указанный выше хэш драйвера в блок-лист вашей организации
  * Включите список блокировки уязвимых драйверов Microsoft через WDAC
  * Включите защиту целостности кода под управлением гипервизора (HVCI)



**Обнаружение попыток эксплуатации**

  * Оповещайте об установке новых сервисов режима ядра для неизвестных бинарных файлов драйверов
  * Отслеживайте процессы с низким/средним уровнем целостности, порождающие дочерние процессы уровня `SYSTEM`
  * Помечайте любой процесс, чей токен изменился на `NT AUTHORITY\SYSTEM` вне легитимного события аутентификации



* * *

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

Этот код опубликован только в образовательных и защитных исследовательских целях. Используйте его только на системах, которыми вы владеете или на тестирование которых у вас есть явное письменное разрешение. Автор не несёт ответственности за любое неправомерное использование.

* * *

## Ссылки

  * Microsoft Vulnerable Driver Blocklist
  * Обзор WDAC
  * Внутреннее устройство EPROCESS в Windows
  * HalTranslateBusAddress — MSDN
  * ZwMapViewOfSection — MSDN