
# سكربت تقييم PowerShell سكربت تقييم PowerShell يفحص أنظمة Windows بحثًا عن CVE-2025-47981 (تجاوز سعة الكومة في SPNEGO NEGOEX) من خلال التحقق من إصدار النواة، ومفتاح التسجيل PKU2U، والمنافذ المكشوفة لـ SPNEGO. يوفر خطوات المعالجة وإرشادات الكشف.
النوع: تقييم الثغرات — فحص اكتشاف / التحقق من الامتثال CVE: CVE-2025-47981 CVSS: 9.8 حرج (AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H) CWE: CWE-122 — تجاوز سعة المخزن المؤقت في الكومة (Heap-based Buffer Overflow) الاسم المستعار: "SPNEGO Nightmare" / "Windows Authentication Wormable RCE" التصحيح: KB5062560 | تحديثات يوليو 2025 Patch Tuesday
سكربت PowerShell للتقييم يتحقق مما إذا كان نظام Windows عرضة لثغرة CVE-2025-47981 — تجاوز سعة المخزن المؤقت في الكومة في آلية SPNEGO Extended Negotiation (NEGOEX) التي تسمح بتنفيذ التعليمات البرمجية عن بُعد دون مصادقة. لا ينفذ استغلالًا — فقط يقيم التعرض وحالة التصحيح.
تم التطوير بواسطة: HKK$ cat ./vulnerability_summary.txtCVE-2025-47981 هو تجاوز سعة المخزن المؤقت في الكومة في بروتوكول NEGOEX — الطبقة الداخلية الموسعة لآلية مصادقة SPNEGO في Windows. تسمح الثغرة للمهاجمين غير المصادق عليهم بتنفيذ تعليمات برمجية عشوائية عن بُعد، مما قد يؤدي إلى السيطرة الكاملة على النظام.
وصف المحللون الثغرة بأنها تمتلك "الخصائص غير المحظوظة لتصبح مشكلة كبيرة"، مع إمكانية الانتشار الذاتي (wormable) — قادرة على الانتشار تلقائيًا بين الأنظمة الضعيفة دون تفاعل المستخدم.
تؤثر الثغرة على Windows 10 (الإصدار 1607 فما فوق) وجميع إصدارات Windows Server من 2008 R2 حتى Server 2025، بما في ذلك متغيرات Server Core — أكثر من 33 تكوينًا مختلفًا من Windows وServer مؤكد أنها ضعيفة على معماريات x64 وx86 وARM64.
$ cat ./technical_background.txtSPNEGO (Simple and Protected GSSAPI Negotiation Mechanism) هو طبقة مصافحة المصادقة التي يستخدمها Windows قبل كل جلسة مصادقة. غالبًا ما تحتاج التطبيقات إلى مصادقة دون تثبيت بروتوكول — يمكن لـ Windows استخدام Kerberos في بيئة، وNTLM في أخرى، أو آلية مصادقة موسعة في نموذج ثقة مختلف. SPNEGO هو آلية التفاوض التي تقرر بروتوكول المصادقة الذي سيتم استخدامه.
Cliente Servidor
│ │
│──── SPNEGO Negotiation ────────►│
│ MechTypeList: │
│ [Kerberos, NTLM, NEGOEX] │
│ │
│◄─── Selected Mechanism ─────────│
│ │
│──── Auth Exchange ─────────────►│ ← overflow هنا في NEGOEX
NEGOEX هو آلية التوسعة داخل SPNEGO — تسمح بتفاوض مصادقات PKU2U (نظير إلى نظير) وآليات مخصصة أخرى. تقع الثغرة في الدالة ntoskrnl!SpnegoHandleExtended، التي تعالج هياكل SPNEGO_TOKEN كبيرة الحجم مرسلة في أجزاء متعددة، مما يسبب تجاوزًا في كومة النواة.
الخطر مرتفع في الأنظمة التي تكون فيها سياسة المجموعة "Network security: Allow PKU2U authentication requests to this computer to use online identities" مفعلة. هذا الإعداد، المفعل افتراضيًا في العديد من توزيعات Windows، يوسع سطح هجوم NEGOEX من خلال السماح بمصادقة نظير إلى نظير التي تنشط مسار التعليمات البرمجية الضعيف في NEGOEX على نقاط النهاية التي لن تعرضه بطريقة أخرى.
$ cat ./architecture.txt┌─────────────────────────────────────────────────────────────────────────┐
│ CVE-2025-47981 ASSESSMENT SCRIPT — FLOW │
│ │
│ ┌──────────────────────────────────────────────────────────────────┐ │
│ │ CHECK 1: Windows Version │ │
│ │ Get-CimInstance Win32_OperatingSystem → .Version │ │
│ │ السياق: يحدد البنية الدقيقة للربط مع التصحيح │ │
│ └──────────────────────────────────────────────────────────────────┘ │
│ │ │
│ ┌──────────────────────────────────────────────────────────────────┐ │
│ │ CHECK 2: ntoskrnl.exe Version │ │
│ │ Get-Item C:\Windows\System32\ntoskrnl.exe │ │
│ │ المقارنة: المثبت < 10.0.14393.8246 → ضعيف │ │
│ │ المقارنة: المثبت ≥ 10.0.14393.8246 → تم تطبيق KB5062560 │ │
│ └──────────────────────────────────────────────────────────────────┘ │
│ │ │
│ ┌──────────────────────────────────────────────────────────────────┐ │
│ │ CHECK 3: PKU2U Registry Key │ │
│ │ HKLM:\SYSTEM\...\Lsa\pku2u\AllowOnlineID │ │
│ │ 1 → PKU2U مفعل → سطح هجوم موسع │ │
│ │ 0 → PKU2U معطل → ناقل PKU2U مخفف │ │
│ │ غير موجود → التكوين الافتراضي (يُقيَّم عبر GPO) │ │
│ └──────────────────────────────────────────────────────────────────┘ │
│ │ │
│ ┌──────────────────────────────────────────────────────────────────┐ │
│ │ CHECK 4: منافذ SPNEGO المكشوفة │ │
│ │ Get-NetTCPConnection → 135, 445, 5985, 3389, 80, 443, 25 │ │
│ │ كل منفذ مفتوح = ناقل تسليم للاستغلال │ │
│ └──────────────────────────────────────────────────────────────────┘ │
│ │ │
│ Format-Table -AutoSize │
│ (مخرجات قابلة للقراءة لتقرير اختبار الاختراق) │
└─────────────────────────────────────────────────────────────────────────┘
$ cat ./design_decisions.mdntoskrnl.exe$kernelPath = [System.IO.Path]::Combine($env:SystemRoot, "System32\ntoskrnl.exe")
$requiredVersion = "10.0.14393.8246"
$installedVersion = (Get-Item $kernelPath).VersionInfo.FileVersion
if ([version]$installedVersion -lt [version]$requiredVersion) {
"ضعيف - التصحيح مفقود ($missingKB)"
}
لماذا ntoskrnl.exe وليس Get-HotFix؟
Get-HotFix يسرد التحديثات المثبتة، لكن له قيود معروفة:
DISM أو Windows Update في الوضع الصامتالتحقق من إصدار ntoskrnl.exe مباشرة أكثر موثوقية — الملف لا يتلقى الإصدار المُصحح إلا عندما يتم تطبيق التحديث بشكل فعلي وإعادة تشغيل النظام. النظام الذي لديه تحديث معلق لإعادة التشغيل سيظل لديه الإصدار القديم من النواة في الذاكرة.
تحويل [version]: يقارن PowerShell السلاسل النصية معجميًا افتراضيًا — "10.0.14393.8246" -lt "10.0.14393.800" سيكون $false (خطأ). التحويل إلى [version] يضمن مقارنة رقمية صحيحة لكل ثمانية (octet).
[System.IO.Path]::Combine($env:SystemRoot, ...): يستخدم SystemRoot بدلاً من C:\Windows المثبت — قابل للنقل للأنظمة المثبتة على محركات أقراص مختلفة.
10.0.14393.824610.0.14393.xxxx → Windows 10 الإصدار 1607 / Windows Server 2016
│
└─ 8246 = البنية مع تطبيق KB5062560
لماذا هذه البنية تحديدًا؟
Windows Server 2016 (البنية الأساسية 14393) هو أحد أكثر البيئات حرجًا للتصحيح — مستخدم على نطاق واسع في وحدات التحكم بالمجال (DCs) وخوادم الملفات والخدمات الداخلية للشركات. الإصدار 8246 يتوافق مع بنية النواة بعد تطبيق KB5062560 (يوليو 2025).
بالنسبة لأنظمة التشغيل الأخرى، رقم البنية الأدنى المطلوب مختلف — يمكن توسيع السكربت بجدول إصدارات لكل نظام تشغيل.
AllowOnlineID$regPath = "HKLM:\SYSTEM\CurrentControlSet\Control\Lsa\pku2u"
$regName = "AllowOnlineID"
ماذا يتحكم هذا المفتاح؟
تؤثر الثغرة بشكل أساسي على الأنظمة التي تكون فيها سياسة المجموعة "Allow PKU2U authentication requests to this computer to use online identities" مفعلة افتراضيًا، وهذا هو الحال لـ Windows 10 الإصدار 1607 فما فوق.
مفتاح AllowOnlineID هو تمثيل السجل لتلك السياسة. عند تفعيله (= 1)، يقبل النظام مصادقات PKU2U — مما ينشط مسار التعليمات البرمجية في NEGOEX الذي يحتوي على التجاوز.
| القيمة | الحالة | الخطر |
|---|---|---|
1 | PKU2U مفعل | مرتفع — ناقل NEGOEX نشط |
0 | PKU2U معطل | منخفض — الناقل مخفف (التصحيح ما زال ضروريًا) |
| غير موجود | إعداد النظام الافتراضي | يعتمد على GPO — تحقق عبر gpresult /r |
-ErrorAction SilentlyContinue: قد لا يكون المفتاح موجودًا في جميع الأنظمة — يعالج السكربت الغياب بأمان دون توليد خطأ.
$ports = @(135, 445, 5985, 3389, 80, 443, 25)
يمكن للمهاجمين استغلال الثغرة عن بُعد دون مصادقة عن طريق إرسال حزم ضارة إلى الخدمات الضعيفة مثل SMB (المنفذ 445/TCP)، وRDP (المنفذ 3389/TCP)، وHTTP/S (المنفذان 80، 443/TCP)، وSMTP (المنفذ 25/TCP) التي تستخدم مصادقة SPNEGO.
| المنفذ | البروتوكول | SPNEGO يُستخدم لـ |
|---|---|---|
135 | RPC Endpoint Mapper | تفاوض مصادقة RPC |
445 | SMB | مصادقة مشاركات الملفات، الأنابيب المسماة |
5985 | WinRM (HTTP) | PowerShell عن بُعد، الإدارة |
3389 | RDP | مصادقة سطح المكتب البعيد |
80 | HTTP | مصادقة Windows في IIS (Negotiate) |
443 | HTTPS | مصادقة Windows في IIS عبر TLS |
25 | SMTP | Exchange Extended Protection |
Get-NetTCPConnection -LocalPort $port يتحقق مما إذا كان المنفذ في حالة LISTEN على النظام المحلي — كل منفذ مفتوح يمثل ناقل تسليم مستقل للاستغلال.
$ cat ./mitre_mapping.yml# منظور المهاجم (ما يكتشفه/يمنعه السكربت)
tactic: Initial Access
- T1190 # Exploit Public-Facing Application
# RCE عبر تجاوز كومة SPNEGO دون مصادقة
# الناقل: أي منفذ مع مصادقة Negotiate (445, 5985, 3389...)
tactic: Execution
- T1203 # Exploitation for Client Execution
# تجاوز الكومة في ntoskrnl!SpnegoHandleExtended
# التحكم في RIP/EIP عبر إفساد كومة النواة
tactic: Lateral Movement
- T1210 # Exploitation of Remote Services
# قابل للانتشار الذاتي: يستغل مضيفين آخرين عبر SMB/RPC دون بيانات اعتماد
- T1550.002 # Pass-the-Hash
# بعد RCE: وصول SYSTEM يسمح باستخراج تجزئات LSASS
tactic: Privilege Escalation
- T1068 # Exploitation for Privilege Escalation
# تجاوز المخزن المؤقت في سياق النواة → ring 0 فوري
# منظور المدافع (ما ينفذه سكربت التقييم)
tactic: Discovery (Blue Team)
- T1082 # System Information Discovery
# جمع إصدار نظام التشغيل و ntoskrnl.exe لتقييم التصحيح
- T1012 # Query Registry
# التحقق من HKLM:\...\pku2u\AllowOnlineID
- T1049 # System Network Connections Discovery
# Get-NetTCPConnection لرسم خريطة منافذ SPNEGO المكشوفة
$ cat ./detection_opportunities.md# شذوذ مصادقة NEGOEX — حزم SPNEGO كبيرة الحجم
# المصدر: سجل أحداث أمان Windows / ETW
EventID: 4625 (Logon Failure) مع SubStatus 0xC000006D
+ المصدر: مضيفون خارجيون
+ التكرار: مرتفع (محاولات فحص/استغلال)
+ TargetUserName: ANONYMOUS LOGON أو فارغ
# بديل: Sysmon Event 3 (Network Connection)
EventID: 3
الشرط:
DestinationPort: 445 أو 5985 أو 135
Initiated: false (اتصال وارد)
Image: System أو lsass.exe
# انهيار النواة بعد استغلال فاشل
# المصدر: سجل أحداث Windows → System
EventID: 1001 (BugCheck)
BugCheckCode: 0x00000050 (PAGE_FAULT_IN_NONPAGED_AREA)
أو
BugCheckCode: 0x0000007E (SYSTEM_THREAD_EXCEPTION_NOT_HANDLED)
السياق: انهيار في ntoskrnl.exe → محاولة استغلال محتملة
# Snort/Suricata — رمز SPNEGO كبير الحجم (مفاهيمي)
alert tcp any any -> $HOME_NET [445,5985,3389] (
msg:"CVE-2025-47981 SPNEGO NEGOEX oversized token";
content:"|60|"; # علامة OID الخاصة بـ SPNEGO
content:"|a0|"; # علامة MechTypeList
dsize:>4096; # الرموز الشرعية نادرًا ما تتجاوز 4KB
threshold:type both, track by_src, count 3, seconds 10;
sid:2025479810;
)
$ cat ./remediation.mdالأولوية: حرجة — تصحيح فوري (CVSS 9.8، قابل للانتشار الذاتي)
1. التصحيح (الإجراء الرئيسي):
Windows Update → KB5062560 (تحديثات يوليو 2025 Patch Tuesday)
WSUS: الموافقة على KB5062560 لجميع أنظمة Windows 10 1607+
إعادة التشغيل بعد التصحيح — لا يتم استبدال ntoskrnl.exe إلا بعد إعادة التشغيل
2. التحقق بعد التصحيح:
تشغيل هذا السكربت مرة أخرى
النتيجة المتوقعة:
ntoskrnl.exe Installed Version: 10.0.14393.8246 (أو أعلى)
Vulnerability Result: آمن - تم تطبيق التصحيح
3. التخفيف المؤقت (إذا كان التصحيح الفوري غير ممكن):
تعطيل PKU2U عبر سياسة المجموعة:
Computer Configuration → Windows Settings → Security Settings →
Local Policies → Security Options →
"Network security: Allow PKU2U authentication requests..." → DISABLED
أو عبر السجل:
Set-ItemProperty "HKLM:\SYSTEM\CurrentControlSet\Control\Lsa\pku2u"
-Name AllowOnlineID -Value 0
4. حظر الشبكة (دفاع متعمق):
جدار الحماية: تقييد الاتصالات الواردة على 135، 445، 5985 للمضيفين المصرح لهم
عزل وحدات التحكم بالمجال والخوادم الحرجة في شبكات VLAN مع قوائم تحكم وصول صارمة
5. أولوية خاصة — وحدات التحكم بالمجال (DCs):
تعرض DCs جميع المنافذ المدرجة (RPC، SMB، LDAP)
قابل للانتشار الذاتي + DC مخترق = اختراق كامل لمجال AD
تصحيح DCs في أول نافذة متاحة
$ cat ./usage.sh# تشغيل سكربت التقييم (لا يتطلب صلاحيات مسؤول للقراءة الأساسية،
# لكن بعض فحوصات السجل قد تتطلب رفع الصلاحيات)
powershell.exe -ExecutionPolicy Bypass -File cve_2025_47981_check.ps1
# المخرجات المتوقعة على نظام ضعيف:
Name Value
---- -----
ntoskrnl.exe Installed Version 10.0.14393.7906
ntoskrnl.exe Required Version 10.0.14393.8246
PKU2U AllowOnlineID 1
منافذ SPNEGO المفتوحة {135, 445, 5985, 3389}
Vulnerability Result ضعيف - التصحيح مفقود (KB5062560)
Windows Version 10.0.14393.7906
# المخرجات المتوقعة على نظام مُصحح:
Vulnerability Result آمن - تم تطبيق التصحيح
PKU2U AllowOnlineID 0
$ cat ./affected_versions.txtالمتأثرة (33+ تكوينًا):
Windows 10: 1607، 1809، 21H2، 22H2
Windows 11: 22H2، 23H2، 24H2
Windows Server: 2008 R2، 2012، 2012 R2، 2016، 2019، 2022، 2025
المعماريات: x64، x86، ARM64
Server Core: نعم (جميع الإصدارات أعلاه)
عامل الخطر المرتفع:
سياسة PKU2U GPO مفعلة (الافتراضي في Win10 1607+)
المنافذ 135/445/5985 قابلة للوصول من شبكات خارجية أو غير موثوقة
التصحيح:
KB5062560 → تحديثات يوليو 2025 Patch Tuesday
ntoskrnl.exe الأدنى → 10.0.14393.8246 (Windows Server 2016)
تحقق من البنيات المحددة لكل إصدار في: msrc.microsoft.com
$ cat ./lessons_learned.txt[+] مقارنة [version] بدلاً من السلسلة النصية تمنع النتائج السلبية الخاطئة في مقارنات البنيات
[+] ntoskrnl.exe هو المصدر الأساسي للحقيقة لحالة التصحيح — أكثر موثوقية من Get-HotFix
[+] PKU2U AllowOnlineID هو مضخم الخطر — الأنظمة التي لا تحتوي عليه لديها سطح هجوم مخفض
[+] Get-NetTCPConnection يرسم بسرعة سطح الهجوم المكشوف محليًا
[+] Format-Table -AutoSize يولد مخرجات جاهزة للنسخ في تقرير اختبار الاختراق
[-] يتحقق السكربت فقط من Windows Server 2016 (14393) — تمديده لبنيات أخرى ضروري
[-] لا يتحقق من حالة GPO عبر gpresult — قد يختلف السجل عن السياسة الفعلية
[-] لا يختبر الاتصال عن بُعد — فقط يتحقق مما إذا كانت المنافذ مفتوحة محليًا
[-] لا توجد مخرجات JSON/CSV — صعوبة التكامل في خطوط أنابيب الامتثال الآلية
[→] التحسينات: جدول إصدارات لكل نظام تشغيل، مخرجات JSON، فحص عن بُعد عبر Invoke-Command،
التكامل مع Qualys/Tenable لربط الثغرات
CVE Assessment · CVSS 9.8 · Wormable · July 2025 Patch Tuesday · Detection only · No exploit