
تاريخ المشروع: أكتوبر 2025 / تنفيذ PoC لـ CVE-2025-54110، وهو ثغرة تجاوز عدد صحيح على مستوى النواة في استدعاء النظام `NtQueryDirectoryObject` في Windows.
تنفيذ PoC لثغرة CVE-2025-54110 وهي ثغرة تجاوز عدد صحيح على مستوى النواة في استدعاء النظام NtQueryDirectoryObject في Windows.
CVE: https://msrc.microsoft.com/update-guide/vulnerability/CVE-2025-54110
يحتوي هذا المستودع على PoC للتعطل فقط لثغرة CVE-2025-54110 المتعلقة بتصعيد الامتيازات على مستوى النواة، تم تطويره حصرياً لأغراض البحث الأمني والهندسة العكسية والبحث في تطوير الاستغلالات. يهدف هذا الكود إلى توضيح تقنيات البحث في الثغرات بما في ذلك:
لا يحقق هذا الـ PoC تصعيد الامتيازات أو شاشة الموت الزرقاء (BSOD) الموثوقة. وهو مصمم لتشغيل انتهاكات الوصول بشكل آمن يتم احتواؤها بواسطة حمايات نواة Windows.
تاريخ النشر: سبتمبر 2025 (تصحيح الثلاثاء الأمني لنظام Windows)
| الخاصية | القيمة |
|---|---|
| CWE | CWE-190: تجاوز عدد صحيح أو التفاف |
| درجة CVSS 3.1 | 8.8 (عالية) / 7.7 (زمنية) |
| سلسلة المتجه | CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H/E:U/RL:O/RC:C |
| متجه الهجوم | محلي |
| تعقيد الهجوم | منخفض |
| الامتيازات المطلوبة | منخفضة |
| تفاعل المستخدم | لا شيء |
| النطاق | متغير |
| السرية | عالية |
| السلامة | عالية |
| التوافر | عالية |
| نضج الاستغلال | غير مثبت |
تسمح ثغرة تجاوز عدد صحيح في نواة Windows لمهاجم مصادق برفع الامتيازات محلياً بشكل محتمل. وفقاً لنشرة Microsoft:
"يمكن للمهاجم استغلال هذه الثغرة بإرسال مدخلات مصممة خصيصاً من عملية وضع مستخدم معزولة (sandbox) لتحفيز تجاوز عدد صحيح، مما يؤدي إلى تجاوز سعة المخزن المؤقت في النواة وتمكين تصعيد الامتيازات أو الهروب من العزلة (sandbox escape)."
Windows Update Files from Aug 2025 & Sep 2025 (KB.msu) ↓ Extract CAB Files ↓ Calculate SHA-256 Hashes (August vs September) ↓ Identify Changed Files ↓ Ghidra Version Tracking Analysis ↓ Setting Symbol Servers to Clarify Function Names ↓ Function-Level Diff Comparison
### 2. الملفات التي تم تحليلها
ركز التحليل الأولي على مكونين أساسيين من مكونات النواة:
#### win32k.sys (-)
- **النتيجة:** لم يتم اكتشاف تغييرات كبيرة
- **نطاق الدرجة:** 0.97-1.0 (تشابه مرتفع)
- **الخلاصة:** ليس المكوّن المعرّض للثغرة CVE-2025-54110
#### ntoskrnl.exe (+)
- **النتيجة:** توجد دوال متعددة بتغييرات كبيرة
- **نطاق الدرجة:** دوال بدرجات ≤0.951
- **الاختلافات في الطول:** تم اكتشاف اختلافات في طول البايت بين المصدر والوجهة
- **إجمالي العناصر المُصدَّرة:** 2,036 دالة للتحليل
### 3. نتائج تتبع الإصدارات في Ghidra
عينة من التغييرات المحددة في `ntoskrnl.exe`:
| الدرجة | الثقة | طول المصدر | طول الوجهة | دالة المصدر | دالة الوجهة |
|-------|------------|---------------|-------------|-----------------|---------------|
| 0.951 | 2.618 | 1023 | 365 | FUN_1403146d0 | FUN_1403a4ea0 |
| 0.950 | 2.285 | 113 | 203 | FUN_140680810 | FUN_1406d952c |
| 0.950 | 3.137 | 782 | 1050 | FUN_14032106c | FUN_140303a38 |
| 0.951 | 2.675 | 141 | 171 | FUN_140407bd0 | FUN_140a172a0 |
| 0.951 | 2.660 | 346 | 150 | FUN_140610e60 | FUN_1406115d4 |
---
## بيان PoC
### المنهج التقني
يحاول PoC (`precise_overflow_bsod.c`) استغلال ثغرة تجاوز السعة الصحيحة من خلال:
1. **حساب العتبة الدقيق:** `0xfffffdbc` (مشتقة من base=0x20, name=0x200)
2. **API الخاصة بـ NtQueryDirectoryObject:** الدالة المستهدفة لتحفيز التجاوز
3. **استراتيجية هجوم متعددة المراحل:**
- المرحلة 1: محاولات دقيقة لتجاوز السعة الصحيحة
- المرحلة 2: استهداف ذاكرة النواة
- المرحلة 3: استغلال متعدد الخيوط
### بنية الكود```c
// Key threshold values calculated for overflow
ULONG precise_thresholds[] = {
0xfffffdbc, // Precise threshold - base=0x20, name=0x200
0xfffffdbb, // Threshold - 1
0xfffffdbd, // Threshold + 1
0xfffffdba, // Threshold - 2
0xfffffdbe, // Threshold + 2
};
// Buffer configurations to test edge cases
PVOID buffer_types[] = {
VirtualAlloc(NULL, 0x1000, MEM_COMMIT, PAGE_READWRITE), // Normal buffer
VirtualAlloc(NULL, 0x10, MEM_COMMIT, PAGE_READWRITE), // Small buffer
NULL, // NULL pointer
(PVOID)0x4141414141414141, // Invalid pointer
(PVOID)0x0000000000000000, // Zero address
};
NtQueryDirectoryObject() Parameters: ├── DirectoryHandle: \BaseNamedObjects, \KernelObjects, etc. ├── Buffer: Various pointer configurations ├── BufferLength: Calculated overflow thresholds (0xfffffdbc variants) ├── ReturnSingleEntry: TRUE/FALSE variations ├── RestartScan: TRUE/FALSE variations └── Context: Controlled iteration state
---
## لماذا لا يتسبب الـ PoC في تعطل النظام
### النتائج الفعلية
يعيد الـ PoC باستمرار `STATUS_ACCESS_VIOLATION (0xC0000005)` دون التسبب في شاشة الموت الزرقاء (BSOD). وهذا **مقصود** ويوضح العديد من آليات أمان نواة Windows الحرجة:
### 1. معالجة الاستثناءات المنظمة (SEH)```
User-Mode Input → NtQueryDirectoryObject
↓
ProbeForRead/Write
↓
__try { ... }
↓
Access Violation Detected
↓
__except { ... }
↓
Return STATUS_ACCESS_VIOLATION
لماذا يعمل هذا:
ميزة حديثة في وحدة المعالجة المركزية تمنع وضع النواة (Ring 0) من الوصول إلى ذاكرة وضع المستخدم (Ring 3) دون تصريح صريح``` Kernel attempts to access user pointer ↓ SMAP checks permission (STAC/CLAC instructions) ↓ Unauthorized access detected ↓ CPU generates #PF (Page Fault) ↓ Caught by kernel exception handler
**التأثير على PoC:**
- حتى في حالة حدوث تجاوز (overflow)، يتم حظر الوصول المباشر من النواة إلى ذاكرة المستخدم
- يمنع استغلال ثغرات إلغاء الإشارة إلى المؤشرات (pointer dereference)
### 3. KASLR (التوزيع العشوائي لتخطيط مساحة عناوين النواة)```
Boot Time: Kernel Base = Random Address
↓
Hardcoded PoC address (0xfffffdbc)
↓
Does NOT match actual kernel structures
↓
Write to non-critical memory OR caught by SEH
لماذا لا يحدث BSOD:
يوفر Windows 10+ كشفًا محسّنًا لتلف التجمع:``` Heap/Pool Allocation ↓ Header Contains: ├── Magic Values ├── Size Information └── Checksums ↓ On Free/Access: Validate Integrity ↓ Corruption Detected? ↓ [YES] → Safe Exception → Return Error [NO] → Proceed Normally
---
## تحليل مخرجات تنفيذ PoC
### المخرجات المتوقعة
شاهد `STATUS_ACCESS_VIOLATION (0xC0000005)`، إذن كل شيء على ما يرام.```
C:\Users\reLab\Desktop\cve>.\poc64.exe
==================================================
CVE-2025-54110 - Kernel Integer Overflow PoC
==================================================
[!] WARNING: This code may crash the system (BSOD).
[?] Do you want to continue? (y/n): y