
Дата проекта: февраль 2026 г. / Уязвимость повреждения памяти в драйвере ядра MiniTool. Демонстрирует примитив произвольной записи в ядро с помощью отладчика, который можно использовать для повышения привилегий.
Условие write-what-where в ядре в драйвере pwdrvio.sys от MiniTool. Демонстрирует примитив произвольной записи в ядро с помощью отладчика, который можно использовать для повышения привилегий.
https://github.com/user-attachments/assets/ac81d7ce-0be7-40a5-9334-c54350e6e30e
Произвольная запись в ядро → локальное повышение привилегий (LPE)
Серьёзность: ВЫСОКАЯ
Оценка CVSS 3.1: 7.8 (LPE)
Векторная строка CVSS:
LPE: CVSS:3.1/AV:L/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:H
Предварительные условия атаки:
Результаты эксплуатации: LPE - Продемонстрировано повышение привилегий с помощью отладчика (NT AUTHORITY / SYSTEM), полный компрометация системы
Дата: 5 февраля 2026
Действие: Систематический фаззинг драйвера ядра с использованием пользовательского фаззера на Python
Процесс обнаружения:
Выбор цели:
pwdrvio.sys как самый старый драйвер (метка времени: 16 июня 2009 г.)C:\Windows\System32\drivers\pwdrvio.sys\\.\PartitionWizardDiskAccesser\0Первоначальный фаззинг:
ctypes для взаимодействия с драйверомWriteFile/DeviceIoControl на устройство драйвераАктивация верификатора:
Конфигурация верификатора: ```
Verifier Flags: 0x001209bb
Standard Flags Enabled:
[X] Special pool
[X] Force IRQL checking
[X] Pool tracking
[X] I/O verification
[X] Deadlock detection
[X] DMA checking
[X] Security checks
[X] Miscellaneous checks
[X] DDI compliance checking
### Настройка отладки ядра WinDbg
**Дата:** 5–6 февраля 2026 г.
**Действие:** Настроена среда отладки ядра для анализа первопричины
**Процедура настройки:**
1. **Конфигурация последовательного порта VMware:** ```
VMware Workstation Pro → VM Settings
├─ Add Hardware → Serial Port
├─ Connection: "Use named pipe"
├─ Path: \\.\pipe\com_1
├─ End: "This is the server"
└─ I/O Mode: "Yield CPU on poll" ✓
Конфигурация гостевой ОС: ```cmd REM Administrator Command Prompt bcdedit /debug on bcdedit /dbgsettings serial debugport:1 baudrate:115200 shutdown /r /t 0
Подключение WinDbg к хосту: ``` WinDbg → File → Attach to Kernel ├─ Port: \.\pipe\com_1 ├─ Baud Rate: 115200 ├─ Pipe: ✓ └─ Reconnect: ✓
Result: "Kernel Debugger connection established."
Дата: 6 февраля 2026 г.
Действие: Выявлен примитив произвольной записи в ядре
Шаги анализа:
Анализ модуля: ```
1: kd> lm m pwdrvio
start end module name
fffff805315f0000 fffff805315f8000 pwdrvio (Jun 16 2009)
1: kd> !drvobj pwdrvio 2 Driver object (fffff805`XXXXXXXX) is for: \Driver\pwdrvio
DriverEntry: fffff805315f6008 DriverUnload: fffff805315f1060
Dispatch Routines:
[00] IRP_MJ_CREATE fffff805315f108c [02] IRP_MJ_CLOSE fffff805315f12f8
[03] IRP_MJ_READ fffff805315f16c4 [04] IRP_MJ_WRITE fffff805315f1564 ← Target
[0e] IRP_MJ_DEVICE_CONTROL fffff805`315f1404
Обнаружение уязвимых инструкций:
Установите точку останова на обработчике записи: ``` 1: kd> bp pwdrvio+0x1641 1: kd> g
Breakpoint 0 hit pwdrvio+0x1641: fffff805`315f1641 498943f0 mov qword ptr [r11-10h],rax
Критическая находка: Выявлен примитив произвольной записи!
RAX) по адресу [R11-0x10]R11 загружается из кадра стека: mov r11, qword ptr [rbp+0xB8h]Анализ состояния регистров: ``` 0: kd> r rax=fffff805315f1364 ← Kernel code pointer r11=ffffe60f84c38750 ← Destination address (controlled via stack) rbp=ffffe60f84c38610 ← IRP stack frame
0: kd> dq @rbp+0xB8 L1
ffffe60f84c386c8 ffffe60f84c38750 ← R11 loaded from here
Дата: 6–7 февраля 2026 года
Действие: Прослежена уязвимость от использования после освобождения (Use-After-Free) до условия записи-что-куда (write-what-where)
Цепочка повреждения памяти:
Выделение IRP: ``` 0: kd> !pool @rbp Pool page ffffe60f84c38610 region is Special pool *ffffe60f84c38000 size: 1f0 data: ffffe60f84c38e10 (NonPaged) *Irp+ Pooltag Irp+ : I/O verifier allocated IRP packets
Связь буферов: ``` 0: kd> r rsi rsi=ffffe60f828df900 ← User buffer location
0: kd> ? @rbp - @rsi Evaluate expression: 35823344 = 00000000`02229ef0 ← 35MB difference!
Анализ: пользовательский буфер НЕ доступен напрямую из кадра RBP
RBP+0xB8 не указывает на буфер, контролируемый пользователемСостояние использования после освобождения (Use-After-Free):
Драйвер хранит висячие указатели в структуре IRP: ```c // Ghidra decompilation (pwdrvio+0x1564) longlong lVar1 = *(longlong *)(param_2 + 0xb8); // Load from IRP
// No validation! lVar5 = IoBuildAsynchronousFsdRequest(...);
// Write to [lVar1 - 0x10] *(code **)(lVar3 + -0x10) = FUN_00011364; // Arbitrary write!
Дата: 7–8 февраля 2026 г.
Действие: Разработана техника кражи токена
Стратегия эксплуатации:
Цель: Перезаписать токен текущего процесса токеном SYSTEM
Структура EPROCESS в Windows:``` +0x000 Pcb : _KPROCESS ... +0x4b8 Token : _EX_FAST_REF ← Token pointer location
**Процедура кражи токена:**