
Уязвимость локального повышения привилегий в Steam Client Service
Это версия с одним скриптом. Оригинальный скомпилированный PoC на C++ находится в ветке legacy. Спасибо John Hammond за предложение, подпишитесь на него!

Видео PoC: YouTube
Разбор от John Hammond: YouTube
Привет @MSNIGHTMARE2000 за вдохновение — пожалуйста, дайте ему работу и напишите ему!
Респект Tookie, Hazetick, belogen и bet3rd за то, что они лучшие бро.
Я всё ещё жду нашу игровую сессию lusilly •`_´•
BrokenPipe демонстрирует локальное повышение привилегий со стандартной учётной записи Windows до NT AUTHORITY\SYSTEM через службу клиента Steam. Доказательство запускает командную строку SYSTEM без запроса учётных данных администратора и без отображения запроса UAC.
NT AUTHORITY\SYSTEM.whoami /user вернул SID локальной системы, S-1-5-18.Служба клиента Steam (steamservice.exe), которая всегда работает как SYSTEM, принимает контролируемый вызывающей стороной корневой каталог установки, не покрываемый подписью подлинного install-script 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 ещё не запущен, скрипт сначала запускает его скрытно.
Укажите собственный payload с помощью параметров:
.\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, вносит в белый список встроенный VDF, подписанный Valve, относительно контролируемого вызывающей стороной корневого каталога установки, а затем запускает перемещённый лаунчер от имени SYSTEM.
Что это?
Повышение привилегий с обычного пользователя до SYSTEM (Standard User -> SYSTEM Local Privilege Escalation).
Как это работает?
Всё в BrokenPipe-PowerShell.ps1, один файл, читайте сверху вниз.
Разве это бесполезно?
Для вас, возможно, для других — вероятно, нет.
Что в этом такого плохого?
Вы получаете привилегии SYSTEM — это уровень выше Administrator (того, что вы выбираете правой кнопкой мыши) и на уровень ниже TRUSTEDINSTALLER, при этом изначально не являясь администратором. Если вы этого не понимаете, погуглите (или спросите вашу дружелюбную LLM вроде Grok, ChatGPT или Siri, лол).
Почему?
Потому что VALVE знает об этом с марта, они это не исправили, и просто потому, что мне плевать на Steam и любые игры VALVE, особенно когда CS2 кишит читерами и эксплойтерами. Им следует это исправить и разобраться с тем отчётом пятимесячной давности.
Какой-то глупый вопрос про установку от администратора или что-то в этом роде, от которого у меня слегка погибли клетки мозга...
Даже вашему антивирусу нужны права администратора при установке, установка Steam, конечно, требует прав администратора при первой установке. После этого он просто запускает службу от имени SYSTEM даже для обычного пользователя. Не спрашивайте меня, спросите VALVE.
Исходный релиз представлял собой скомпилированный лаунчер на C++ (BrokenPipe.exe), который распаковывал встроенную интерактивную лабораторию, включая брокер, обеспечивавший полностью интерактивную консоль SYSTEM. Эта версия живёт в ветке legacy. Эта ветка — та же уязвимость, сжатая в один скрипт PowerShell без этапа сборки и без встроенных бинарников.
Этот проект предоставляется для авторизованных исследований в области безопасности и защитной проверки. Тестируйте только на системах, которыми вы владеете или на оценку которых у вас есть явное разрешение.