
ثغرة تصعيد الامتيازات المحلية في خدمة عميل Steam
هذه هي النسخة ذات السكربت الواحد. نموذج إثبات المفهوم (PoC) الأصلي المكتوب بلغة C++ موجود على الفرع القديم (legacy). شكرًا لـ John Hammond على الاقتراح، اشتركوا في قناته!

فيديو إثبات المفهوم: YouTube
شرح John Hammond: YouTube
تحياتي إلى @MSNIGHTMARE2000 على الإلهام - من فضلكم وظّفوه وأرسلوا له بريدًا إلكترونيًا!
تحية إلى Tookie وHazetick وbelogen وbet3rd لكونهم أعظم الأصدقاء.
ما زلت أنتظر جلسة اللعب خاصتنا lusilly •`_´•
يوضّح BrokenPipe رفعًا للصلاحيات محليًا من حساب Windows قياسي إلى NT AUTHORITY\SYSTEM عبر خدمة عميل Steam. يُطلق نموذج الإثبات موجه أوامر بصلاحيات SYSTEM دون طلب بيانات اعتماد المسؤول أو عرض نافذة UAC.
NT AUTHORITY\SYSTEM.whoami /user معرّف SID الخاص بـ Local System، وهو S-1-5-18.تقبل خدمة عميل Steam (steamservice.exe)، التي تعمل دائمًا بصلاحيات SYSTEM، جذر تثبيت يتحكم فيه المستدعي وغير مشمول بتوقيع ملف VDF الخاص بسكربت التثبيت الموقّع أصلاً من Valve. يستغل BrokenPipe هذه الفجوة في تغطية التوقيع لجعل الخدمة ذات الصلاحيات العالية تنفّذ المشغّل المضمّن من مسار مُعاد توجيهه بصلاحيات SYSTEM. وهو لا يزوّر توقيع VDF ولا يعدّله ولا يتجاوزه.
خط سير العمل:
Establish IPC connection to Steam Client Service (no admin needed)
|
v
IClientInstallUtils::AddInstallScriptToWhiteList
|
| genuine Valve-signed VDF
| caller-controlled installation root <-- flaw is here
| relocated launcher becomes whitelisted
v
IClientInstallUtils::RunInstallScript
|
| service processes the run VDF
| whitelisted launcher is selected
v
Steam Client Service launches the executable as SYSTEM
|
v
the relocated launcher.exe now runs as NT AUTHORITY\SYSTEM
تم التحقق من الإثبات مقابل الإصدار الحالي من Steam 10.96.30.42 على أحدث إصدارات Windows 10 وWindows 11 x64.
لا توجد خطوة بناء. BrokenPipe هو سكربت PowerShell واحد مكتفٍ ذاتيًا. ملف VDF الأصلي الموقّع من Valve مضمّن بصيغة base64 وعميل IPC الخاص بـ Steam Client Service هو نوع C# مضمّن، لذا لا توجد ملفات ثنائية خارجية لبنائها أو شحنها.
powershell.exe -NoProfile -ExecutionPolicy Bypass -File .\BrokenPipe-PowerShell.ps1
بشكل افتراضي، ينسخ السكربت C:\Windows\System32\cmd.exe ويجعل خدمة Steam Client Service تشغّله بصلاحيات SYSTEM. كون launcher.exe المنقول يعمل فعليًا بصلاحيات NT AUTHORITY\SYSTEM هو الدليل (أكّد ذلك في Task Manager أو Process Explorer). إذا لم يكن Steam قيد التشغيل بالفعل، يبدأه السكربت بصمت أولًا.
وجّهه إلى الحمولة الخاصة بك باستخدام المعاملات:
.\BrokenPipe-PowerShell.ps1 -PayloadPath "C:\path\to\payload.exe" -PayloadArguments "your args"
BrokenPipe\
assets\
brokenpipe-system-shell.png
BrokenPipe-PowerShell.ps1
LICENSE
README.md
كل شيء موجود في BrokenPipe-PowerShell.ps1: فهو ينشئ اتصال IPC عبر الذاكرة المشتركة مع خدمة Steam Client Service، ويضيف ملف VDF المضمّن الموقّع من Valve إلى القائمة البيضاء مقابل جذر تثبيت يتحكم به المستدعي، ثم يشغّل المشغّل المنقول بصلاحيات SYSTEM.
ما هذا؟
تصعيد صلاحيات محلي من مستخدم عادي (Standard User) إلى SYSTEM.
كيف يعمل؟
كل شيء في BrokenPipe-PowerShell.ps1، ملف واحد، اقرأه من أوله إلى آخره.
أليس هذا عديم الفائدة؟
بالنسبة لك، ربما، وبالنسبة لآخرين، على الأرجح لا.
ما مدى خطورة ذلك؟
أنت تحصل على صلاحيات SYSTEM، وهي مستوى أعلى من Administrator (الذي تنقر عليه بزر الفأرة الأيمن وتختاره) ومستوى أدنى من TRUSTEDINSTALLER دون أن تكون مسؤولاً (admin) في المقام الأول. إذا لم تفهم هذا، فابحث عنه في Google (أو اسأل نموذجاً لغوياً ودوداً من حيّك مثل Grok أو ChatGPT أو Siri هههه).
لماذا؟
لأن VALVE تعلم به منذ مارس، ولم يصلحوه، وذلك ببساطة لأنني لا أهتم بـ Steam أو أي من ألعاب VALVE، خصوصاً عندما تكون CS2 مليئة بالغشاشين والمستغلّين. عليهم إصلاحه والتحقيق في ذلك التقرير الذي مضى عليه 5 أشهر.
سؤال غبي حول التثبيت كمسؤول (Standard Admin Install) أو ما شابه طرحه أحدهم وأدى إلى خسارة طفيفة في خلايا دماغي...
حتى برنامج مكافحة الفيروسات لديك يحتاج إلى صلاحيات مسؤول عند تثبيته، وتثبيت Steam بالطبع يتطلب صلاحيات مسؤول في التثبيت الأول. بعد ذلك يشغّل الخدمة بصلاحيات SYSTEM حتى بالنسبة لمستخدم عادي. لا تسألني، اسأل VALVE.
كان الإصدار الأصلي مشغّلاً مكتوباً بلغة C++ ومُجمّعاً (BrokenPipe.exe) يفكّ حزمة مختبر تفاعلي مضمّن، بما في ذلك وسيط (broker) كان يدير وحدة تحكم SYSTEM تفاعلية بالكامل. ذلك الإصدار موجود في فرع legacy. هذا الفرع هو الثغرة نفسها مقطّرةً إلى سكربت PowerShell واحد دون خطوة بناء ودون ملفات ثنائية مضمّنة.
يُقدَّم هذا المشروع لأغراض البحث الأمني المصرّح به والتحقق الدفاعي. اختبره فقط على أنظمة تملكها أو لديك إذن صريح بتقييمها.