
Steam Client Service のローカル特権昇格の脆弱性
これは単一スクリプト版です。元のコンパイル済みC++ PoCはlegacyブランチにあります。提案してくれたJohn Hammondに感謝します。彼のチャンネル登録を!

PoC動画: YouTube
John Hammondによる解説: YouTube
インスピレーションをくれた @MSNIGHTMARE2000 に感謝 - 彼に仕事を与えて、メールを送ってください!
最高の仲間である Tookie、Hazetick、belogen、bet3rd に感謝。
私はまだ私たちのゲームセッションを待っています lusilly •`_´•
BrokenPipeは、標準的なWindowsアカウントからSteamクライアントサービスを経由してNT AUTHORITY\SYSTEMへのローカル権限昇格を実証します。このPoCは、管理者資格情報を要求したりUACプロンプトを表示したりすることなく、SYSTEMのコマンドプロンプトを起動します。
NT AUTHORITY\SYSTEMとして実行されました。whoami /userはローカルシステムSID、S-1-5-18を返しました。常にSYSTEMとして実行されるSteamクライアントサービス(steamservice.exe)は、呼び出し元が制御するインストールルートを受け入れますが、このルートは正規のValve署名済みインストールスクリプトVDFの署名の対象外です。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
この証明は、最新バージョンの Windows 10 および Windows 11 x64 上で、Steam 10.96.30.42 の現行バージョンに対して検証されました。
ビルド手順は不要です。BrokenPipe は単一の自己完結型 PowerShell スクリプトです。Valve が署名した正規の VDF は base64 として埋め込まれており、Steam Client Service の IPC クライアントはインラインの C# 型であるため、コンパイルや配布が必要な外部バイナリはありません。
powershell.exe -NoProfile -ExecutionPolicy Bypass -File .\BrokenPipe-PowerShell.ps1
デフォルトでは、スクリプトは C:\Windows\System32\cmd.exe をコピーし、Steam Client Service にそれを SYSTEM として起動させます。移動された launcher.exe が NT AUTHORITY\SYSTEM として実際に実行されることがその証明です(タスクマネージャーまたは 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 にあります。このスクリプトは Steam Client Service への共有メモリ IPC を確立し、呼び出し元が制御するインストールルートに対して埋め込みの Valve 署名済み VDF をホワイトリスト登録し、その後、移動されたランチャーを SYSTEM として実行します。
これは何ですか?
標準ユーザーから SYSTEM へのローカル権限昇格です。
どのように動作しますか?
すべて BrokenPipe-PowerShell.ps1 にあります。1 ファイルなので、上から下まで読んでください。
役に立たないのでは?
あなたにとっては、おそらく。他の人にとっては、おそらくそうではないでしょう。
何がそんなに悪いのですか?
SYSTEM 権限を取得することになります。これは Administrator(右クリックして選択するもの)より 1 段階高く、TRUSTEDINSTALLER より 1 段階低い権限であり、実際には管理者でない状態でこれを得ることになります。これが理解できないなら、Google で調べてください(または Grok、ChatGPT、Siri などおなじみの LLM に聞いてください、笑)。
なぜ?
VALVE は 3 月からこの問題を認識しているのに修正しておらず、私が Steam や VALVE のゲームを気にしていないからです。特に CS2 がチーターやエクスプロイターだらけであることはなおさらです。彼らは修正して、5 か月前の報告書を調査すべきです。
標準管理者インストールに関する、私の脳細胞を少し失わせた誰かの愚かな質問か何か...
ウイルス対策ソフトでさえ、インストール時には管理者権限が必要です。Steam のインストールも当然、初回インストール時には管理者権限が必要です。その後は、標準ユーザーであってもサービスを SYSTEM として実行するだけです。私に聞かないで、VALVE に聞いてください。
元のリリースは、コンパイル済みの C++ ランチャー(BrokenPipe.exe)で、完全に対話可能な SYSTEM コンソールをマーシャリングするブローカーを含む、埋め込みのインタラクティブラボを展開するものでした。そのバージョンは legacy ブランチにあります。このブランチは、同じ脆弱性をビルド手順も埋め込みバイナリも不要な単一の PowerShell スクリプトに凝縮したものです。
このプロジェクトは、許可されたセキュリティ研究および防御的検証のために提供されています。所有しているシステム、または評価について明示的な許可を得たシステムでのみテストしてください。