
استغلال Windows CLFS LPE PoC لأغراض البحث الأمني
🚨 PoC استغلال — لأغراض البحث الأمني وتحليل الثغرات والأغراض الدفاعية فقط
🚨 PoC استغلال — لأغراض البحث الأمني وتحليل الثغرات والأغراض الدفاعية فقط
CVE-2025-60709 هي ثغرة تصعيد صلاحيات محلي (LPE) في برنامج تشغيل CLFS.sys (Common Log File System) بنظام Windows. تتيح لمهاجم يملك تنفيذ كود محلي التصعيد من مستخدم عادي إلى NT AUTHORITY\SYSTEM عبر تجاوز سعة المخزن المؤقت في تحليل حاويات CLFS، مما يوفر بدائية كتابة عشوائية في ذاكرة النواة.
يحتوي هذا المستودع على تنفيذين:
| الحقل | التفاصيل |
|---|---|
| CVE ID | CVE-2025-60709 |
| النوع | تصعيد صلاحيات محلي (LPE) |
| المكوّن | CLFS.sys (برنامج تشغيل Common Log File System) |
| النظام المستهدف | Windows 11 24H2 (build 26100.3485+) |
| البنية | x64 فقط |
| ناقل الهجوم | تجاوز سعة المخزن المؤقت في تحليل حاويات CLFS |
| الأثر | التصعيد إلى NT AUTHORITY\SYSTEM |
| المتطلبات المسبقة | تنفيذ كود محلي (مستخدم عادي) |
CVE-2025-60709/
├── CVE-2025-60709.c (5.3 KB, 157 líneas) — Exploit C original
├── CVE-2025-60709.go (9.2 KB, 285 líneas) — Port Go (demo educativa)
└── README.txt (4.2 KB, 132 líneas) — Documentación original
┌─────────────────────────────────────────────────────────────┐
│ CVE-2025-60709 LPE │
└─────────────────────────────────────────────────────────────┘
[1] EVASIÓN DE DEFENSAS
├─ KillETW() → Parchea EtwEventWrite en ntdll con RET (0xC3)
└─ KillAMSI() → Parchea AmsiScanBuffer en amsi.dll con RET (0xC3)
[2] HEAP GROOMING (preparación de memoria)
└─ GroomLookaside()
├─ Crea 4096 archivos: C:\Windows\Temp\groom_00000.blf
├─ Llama CreateLogFile() + AddLogContainer() por cada uno
└─ Agota lookaside lists → garantiza layout de heap predecible
[3] PRIMITIVA DE ESCRITURA ARBITRARIA — ClfsArbWrite(Address, Value)
├─ Construye buffer CLFS malformado (0x102010 bytes)
│ ├─ Firma válida CLFS en +0x00: 0x0201
│ ├─ Sector size shift en +0x14: 2
│ ├─ First client region en +0x28: 0x100
│ ├─ cbRecord OVERSIZED en +0x100: 0xFF00 (64 KB > datos reales)
│ ├─ Marcador shadow zone en +0x9A8: 0x13371337
│ └─ CClfsContainerContext falso en offset (0xFF00 + 0x100):
│ ├─ pContainer = TargetAddress - 0x10
│ └─ cbContainer = Value (dato a escribir)
├─ Calcula checksum CLFS correcto (driver lo valida)
├─ Escribe contenedor malformado → C:\Windows\Temp\evil.blf
├─ Crea log apuntando a evil.blf
├─ Llama ClfsReadRestartArea() → dispara parsing kernel
└─ Driver desborda buffer → escribe Value en Address ✓
[4] ROBO DE TOKEN SYSTEM
├─ Lee EPROCESS del proceso SYSTEM via PsInitialSystemProcess
└─ Extrae token en EPROCESS + EPROCESS_TOKEN (offset 0x4c0)
[5] ESCALACIÓN DE PRIVILEGIOS
└─ ClfsArbWrite(CurrentEprocess + 0x4c0, SystemToken)
└─ Sobreescribe token del proceso actual con token SYSTEM ✓
[6] EJECUCIÓN DE PAYLOAD C2
├─ VirtualAlloc(PAGE_EXECUTE_READWRITE)
├─ Copia shellcode beacon de 1789 bytes
├─ CreateThread() → ejecución como NT AUTHORITY\SYSTEM
└─ Beacon C2: IPv6 + DoH → fallback Gmail drafts
└─ sRDI + sleep obfuscation + ETW/AMSI ya parcheados
[7] PERSISTENCIA
└─ Sleep(INFINITE) → proceso mantiene token SYSTEM
| الحقل | الإزاحة | الوصف |
|---|---|---|
EPROCESS_TOKEN | 0x4C0 | رمز أمان العملية |
EPROCESS_PID | 0x440 | معرّف العملية |
EPROCESS_LINKS | 0x448 | القائمة المرتبطة بالعمليات النشطة |
EPROCESS_NAME | 0x5A8 | اسم العملية (ImageFileName) |
⚠️ تختلف هذه الإزاحات بين إصدارات Windows. يلزم تحديثها للإصدارات الأخرى.
Contenedor CLFS legítimo:
[Header 0x100 bytes][Record: cbRecord bytes de datos reales]
Contenedor malformado (evil.blf):
[Header válido][cbRecord=0xFF00 → kernel lee 65,280 bytes]
↓
Kernel overflow → llega a CClfsContainerContext falso
↓
pContainer = TargetKernelAddress - 0x10
cbContainer = ValueToWrite
↓
Driver usa estructura falsa → escribe ValueToWrite en TargetKernelAddress
CVE-2025-60709.c| الوظيفة | الغرض |
|---|---|
GetKernelBase() | ZwQuerySystemInformation(SystemModuleInformation) → قاعدة ntoskrnl.exe |
KillETW() | VirtualProtect + استبدال EtwEventWrite في ntdll.dll بـ 0xC3 (RET) |
KillAMSI() | تحميل amsi.dll + استبدال AmsiScanBuffer بـ 0xC3 (RET) |
GroomLookaside() | إنشاء 4096 سجل CLFS لاستنزاف قوائم lookaside → كومة حتمية |
ClfsArbWrite() | جوهر الاستغلال — بدائية كتابة عشوائية في ذاكرة النواة |
main() | ينسّق الهجوم: ETW→AMSI→groom→سرقة الرمز→كتابة عشوائية→beacon |
| الجانب | نسخة C | نسخة Go |
|---|---|---|
| النوع | استغلال فعّال (وفقًا للوثائق) | عرض تعليمي فقط |
| واجهات برمجة التطبيقات | وصول مباشر (ntdll, clfsw32, advapi32) | أغلفة syscall.NewLazyDLL() |
| المجموع الاختباري لـ CLFS | خوارزمية كاملة | عنصر نائب مبسّط |
| عناوين النواة | حقيقية | عنصر نائب مكتوب بشكل ثابت (0x123456) |
| حمولة C2 | شيل كود بحجم 1789 بايت | بايتات NOP (0x90) للاختبار |
| النتيجة المتوقعة | تصعيد إلى SYSTEM | رسالة "Arb write failed (yeah)" |
نسخة C (تتطلب Visual Studio Build Tools + Windows SDK):
cl /O1 /MT /link ntdll.lib advapi32.lib clfsw32.lib CVE-2025-60709.c
نسخة Go (تتطلب Go 1.19+ على Windows x64):
go build -ldflags="-s -w" -o CVE-2025-60709.exe CVE-2025-60709.go
| التخفيف | الفعالية |
|---|---|
| HVCI (Hypervisor-protected Code Integrity) | عالية — يمنع الكتابة في ذاكرة النواة |
| kCFI (Kernel Control Flow Integrity) | عالية — يحجب سلاسل ROP/JOP |
| CFG (Control Flow Guard) | متوسطة — يعيق تنفيذ الشيل كود |
| Windows Defender | متوسطة — يكتشف التقنيات المعروفة |
| تحديث Windows | عالية — التصحيح الرسمي يزيل الثغرة |