制限のない CBS COM メソッドを悪用したローカル特権昇格 - Windows 11 における中整合性レベル (medium-IL) から SYSTEM への任意ファイル書き込み
| 日付 | 出来事 |
|---|---|
| 2026年7月22日 | 脆弱性を MSRC に報告 |
| 2026年9月8日 | Microsoft が Windows Update サービススタックを修正 (9月の月例パッチ) |
| 2026年10月29日 | MSRC が回答 (下記参照) |
Component Based Servicing (CBS) セッション COM オブジェクトは TrustedInstaller.exe 内で SYSTEM として実行され、任意の対話型ユーザーがアクティブ化できます。セッションインターフェース上のほぼすべてのメソッドは、処理を進める前に EnsureCallerIsAdministrator を呼び出しますが、CreateExternalTransformerExecutor だけは例外で、認可チェックなしに低レベルの CSI ストアトランスフォーマーエグゼキューターを返しました。
このエグゼキューターの Initialize() は、偽装なしで SYSTEM として実行されます。中整合性レベルの呼び出し元は、NTFS ジャンクションとオブジェクトマネージャーシンボリックリンクを悪用することで、攻撃者が制御するパスにレジストリハイブログファイルを TrustedInstaller に作成させることができます。これらの作成には特別な権限は一切必要ありません。
CreateExternalTransformerExecutor を呼び出す結果: 通常のユーザーアカウントから、SYSTEM として既存の任意のディレクトリへの任意ファイル書き込みが可能。管理者権限も、特別な特権も、ユーザーの操作も不要です。
MSRC は私の報告を 低重大度 / 多層防御 (Defense in Depth) と評価し、「評価した概念実証では、許可されていない場所へのファイル書き込みを実証できなかった」と述べました。この案件は即時対応の基準を下回るとしてクローズされ、追加の CVE も発行されず、報奨金も支払われず、MSRC はこれ以上この問題を追跡しないとのことです。これが重複報告であれば納得のいく話です。
この PoC は、中整合性レベル (medium-IL) の非管理者プロセスから C:\Windows\System32 に攻撃者が制御する内容を書き込み、テストしたすべての未修正ビルドで確実に成功しました。
MSRC の評価について最も可能性の高い説明はタイミングです。報告は7月に提出され、サービススタックの修正は9月にリリースされ、MSRC からの回答は10月に届きました。その時点では、最新のシステム上で PoC が E_ACCESSDENIED で失敗するのは確かに当然です。
少なくとも、MSRC の特別言及ページに掲載されたのは収穫でした :)
ここで報告されている脆弱性は、言及された更新プログラムで修正され、同じ脆弱性クラス(CWE-59 / CWE-284、CBSサービススタックにおけるリンク追従+不適切なアクセス制御)を記述している CVE-2026-81963(「Windows Update Stack Elevation of Privilege Vulnerability」)に該当すると思われます。このCVEはRomain Deperne(Airbus Helicopters)とMicrosoft Threat Intelligence Center(MSTIC)にクレジットされ、パッチ適用前に実際に悪用されていたことが確認されています。ただし、私の報告が同じ問題を対象としているという公式な確認は得ていません。
両方のPoCは管理者権限を持たない通常ユーザー(中整合性レベル)として実行する必要があり、同じ基本エクスプロイトを含んでいます。管理者権限で実行すると、すでに管理者権限を持っているためエクスプロイトは自明に成功してしまい、本来の意味が完全に失われます。
PoC_Fun/UI付きの完全な概念実証(PoC)。エクスプロイト手法をインタラクティブなインターフェースで包み込んだ、バイブコーディングによるグラフィカルなハーネスです。デモや、退屈なターミナルだけのPoCが好きではないすべての人に最適です(MAKE POCS FUN AGAIN!)
見出しやバナーで使用されているモノスペースのゴシック調ピクセルアートフォントは、私の依頼により nico_n_art が制作しました。
ビルド:
$ cd PoC_Fun
$ dotnet clean -c Release && dotnet publish -c Release
$ .\bin\Release\net8.0-windows\win-x64\publish\TrustedHive.exe
使用方法: リリース版をダブルクリックするとUIが案内します。または「?」を使ってヘルプメニューを開いてください。
PoC_Boring/エクスプロイト用のスタンドアロンCファイルです。UIもなく、ole32.lib と advapi32.lib 以外の依存関係もありません。MSVC(cl /O2 ...)でビルドし、入力ファイルと出力パスを指定すれば、あとは実行するだけです。
ビルド:
$ cd PoC_Boring
$ cl /nologo /W3 /O2 TrustedHive_PoC.c ole32.lib advapi32.lib /link
$ .\TrustedHive_PoC.exe
使用方法:
$ .\TrustedHive_BoringPoC.exe <input_file> <output_path> [/keep]
<input_file> : file whose bytes are written to the target
<output_path> : destination (its parent directory must exist),
e.g. C:\Windows\System32\poc.dll
/keep : keep the Hidden+System attributes the Configuration Manager
stamps on the created hive-log file (default: clear them)
EvaluateApplicability経由のdpx.dllサイドローディング)
