
PoC قبل المصادقة لثغرة CVE-2026-41089 في Netlogon CLDAP وهي تجاوز سعة المكدس (stack overflow) عبر UDP/389، مما يؤدي إلى تعطل LSASS أو إعادة تشغيل وحدة التحكم بالمجال (DC). يتضمن سكربت الاستغلال، وتحليل السبب الجذري، وإرشادات الاكتشاف والتخفيف.
██████╗██╗ ██╗███████╗ ██╗ ██╗ ██╗ ██████╗ ██████╗
██╔════╝██║ ██║██╔════╝ ██║ ██║███║██╔═████╗██╔═████╗
██║ ██║ ██║█████╗ ███████║╚██║██║██╔██║██║██╔██║
██║ ╚██╗ ██╔╝██╔══╝ ██╔══██║ ██║████╔╝██║████╔╝██║
╚██████╗ ╚████╔╝ ███████╗ ██║ ██║ ██║╚██████╔╝╚██████╔╝
╚═════╝ ╚═══╝ ╚══════╝ ╚═╝ ╚═╝ ╚═╝ ╚═════╝ ╚═════╝
Windows Netlogon: تنفيذ كود عن بُعد عبر تجاوز سعة المخزن المؤقت للحزمة في CLDAP
حزمة UDP واحدة مصنوعة بعناية إلى المنفذ 389 تتسبب في تجاوز سعة مخزن مؤقت للحزمة بحجم 528 بايت داخل LSASS على أي وحدة تحكم مجال Windows غير مُحدَّثة. ينهار LSASS. وتُعاد إعادة تشغيل وحدة التحكم بالمجال خلال حوالي 60 ثانية. لا حاجة لأي بيانات اعتماد.
| متجه الهجوم | UDP 389 (CLDAP)، قبل المصادقة، بدون أي بيانات اعتماد |
| الأثر | انهيار LSASS، إعادة تشغيل DC، احتمالية تنفيذ كود عن بُعد (RCE) |
| CWE | CWE-121 (تجاوز سعة المخزن المؤقت المرتكز على الحزمة) |
| متجه CVSS | AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| تاريخ النشر | 12 مايو 2026 بواسطة Microsoft |
python3 poc.py 10.0.50.21 corp.local
يرسل إثبات المفهوم (PoC) أمر ping عاديًا، ثم ping تجاوز السعة باسم مستخدم بطول 130 حرفًا، ثم يتحقق مما إذا كانت وحدة التحكم بالمجال (DC) ما تزال حيّة. تستغرق العملية حوالي 10 ثوانٍ إجمالًا.
إصدارات Windows Server العاملة كوحدات تحكم بالمجال:
| إصدار الخادم | تم الإصلاح في |
|---|---|
| 2012 / 2012 R2 | تصحيحات ESU فقط |
| 2016 | 10.0.14393.9140 |
| 2019 | 10.0.17763.8755 |
| 2022 | 10.0.20348.5074 |
| 2022 23H2 | 10.0.25398.2330 |
| 2025 | 10.0.26100.32772 |
تقوم الدالة NlGetLocalPingResponse بتخصيص مخزن مؤقت للحزمة بحجم 528 بايت وتمريره إلى BuildSamLogonResponse. تستدعي هذه الدالة NetpLogonPutUnicodeString لكتابة اسم الخادم واسم المجال ومعرّفات GUID واسم المستخدم الذي يتحكم فيه المهاجم داخل المخزن المؤقت.
الخلل: تستقبل الدالة NetpLogonPutUnicodeString طولًا أقصى بالبايتات ولكنها تقرؤه كعدد WCHAR. كل سلسلة تُكتب عبر هذا المسار تستهلك ضعف المساحة المتوقعة. حقل "User" في مرشح CLDAP (حتى 130 حرفًا WCHAR، أي 260 بايت على الشبكة) يدفع إجمالي الكتابة إلى ما بعد حدود الـ 528 بايت.
I_NetLogonLdapLookupEx
-> NlGetLocalPingResponse // 528-byte stack buffer
-> LogonRequestHandler
-> BuildSamLogonResponse
-> NetpLogonPutUnicodeString // byte/WCHAR size confusion
python3 poc.py <target_ip> <domain_name> [options]
| العلم | الوصف | الافتراضي |
|---|---|---|
-l | طول اسم المستخدم بالأحرف | 130 |
-t | مهلة استقبال UDP (بالثواني) | 5 |
-d | التأخير بين تجاوز السعة وفحص الاستجابة (بالثواني) | 3 |
# Connectivity test (short username, no overflow)
python3 poc.py 10.0.50.21 corp.local
# Default overflow attempt
python3 poc.py 10.0.50.21 corp.local -l 130
# Larger payload, longer timeout for slow networks
python3 poc.py 10.0.50.21 corp.local -l 200 -t 10
يتطلب Python 3.8 أو أحدث. لا توجد حزم خارجية.
يسبب تجاوز السعة حرمانًا من الخدمة (DoS) (انهيار LSASS وإعادة تشغيل DC). قد يتيح تلف الحزمة تنفيذ كود عن بُعد (RCE)، لكن إثبات المفهوم هذا يقتصر على DoS.
الشبكة. ابحث عن طلبات بحث CLDAP تحتوي على سمة مرشح "User" أطول من 20-30 حرفًا. تستخدم pings محدد موقع DC العادية أسماء حسابات خدمة قصيرة.
المضيف. راقب انهيارات LSASS المرتبطة بـ netlogon.dll (معرف الحدث 1000). فعِّل تسجيل التصحيح لـ Netlogon:
nltest /dbflag:0x2080ffff
mov edx, 0x40 يخفض الحد الأقصى لطول اسم المستخدم إلى النصف)إخلاء مسؤولية قانوني. هذا الكود أُعد لأغراض البحث الأمني والتعليم المصرح بهما. اختبر فقط ضد الأنظمة التي تملكها أو لديك إذن كتابي لاختبارها. الوصول غير المصرح به إلى أنظمة الكمبيوتر ينتهك قانون CFAA والقوانين المماثلة له في معظم الدول.