
TechPowerUp ThrottleStop.sys ドライバ(CVE-2025-7771)向けの完全な概念実証(PoC)です。
署名済みで今もロード可能なカーネルドライバが、2つのIOCTLを通じて検証されていない物理メモリの読み書きを公開しています。
このリポジトリは、そのプリミティブを実用的な管理者からSYSTEMへのローカル権限昇格に変換し、ほとんどのパス・ファイル名ベースの検知を無効化するデバイス命名の癖を文書化しています。
同じIOCTLに対するPoCは既に存在していました(クレジット参照)。これはプリミティブのデモではなく、独立した完全なエクスプロイトチェーンです。
| フィールド | 値 |
|---|---|
| SHA256 | 16F83F056177C4EC24C7E99D01CA9D9D6713BD0497EEEDB777A3FFEFA99C97F0 |
| SHA1 | 82ED942A52CDCF120A8919730E00BA37619661A3 |
| MD5 | 6BC8E3505D9F51368DDF323ACB6ABC49 |
| バージョン | 3.0.0.0 ("Low-Level Driver", 2004-2020) |
| 署名者 | TechPowerUp LLC、DigiCert EV Code Signing |
| 証明書の拇印 | 524EDA9C819321C66E22C7BABEB23DAEAFFB2182 |
| 証明書の有効期間 | 2019-08-10 から 2022-06-15 |
証明書は2022年に失効しましたが、署名には信頼されたカウンター署名タイムスタンプが含まれているため、Windowsは今でもこれをロードします。失効が有効なのは、その日付が署名時刻より前である場合だけであり、このような古いドライバではめったにありません。
バージョンリソースには CompanyName、OriginalFilename、InternalName がなく、そのためこのファイルをメタデータだけからベンダーに帰属させることはできません。
2つのIOCTLは、境界やアドレスの検証なしに物理メモリを読み書きします:
| IOCTL | 操作 |
|---|---|
0x80006498 | 物理読み取り |
0x8000649C | 物理書き込み |
どちらも METHOD_BUFFERED であるため、ユーザーポインタの逆参照はありません。欠陥は、呼び出し元が指定した物理アドレスの検証が欠落していることであり、未チェックのポインタではありません。
指摘に値する点:書き込みハンドラ 0x8000649C は FILE_READ_ACCESS として宣言されています。読み取り専用で開かれたハンドルでも物理書き込みを発行できるため、宣言されたアクセスマスクはハンドラが実際に行う処理と一致しません。
デバイスを開くには管理者権限が必要なため、これ自体は権限境界の越境ではありません。すでに管理者である攻撃者に与えるものは、ユーザーモードからの任意のカーネル読み書きであり、管理者より上の階層で機能するはずの保護、すなわちHVCIコード整合性、PPL、EDR/AV自己保護を無効化します。典型的なBYOVD(Bring Your Own Vulnerable Driver)です。
具体的なデモとして、PoCは読み書きプリミティブを使用してSYSTEMトークンを窃取し、SYSTEMシェルを起動します。
CVSS 4.0: AV:L/AC:H/AT:N/PR:H/UI:N/VC:H/VI:H/VA:H/SC:H/SI:H/SA:H(8.7、High)。
すべてはユーザーモードからドライバの物理読み書きIOCTLに対して実行されます。ページテーブルウォークもCR3の関与もありません。両方のプロセスは物理メモリを直接スキャンして特定されます:
ImageFileName が System で UniqueProcessId が4であるEPROCESSを物理メモリからスキャンします。スキャン範囲は、推測したウィンドウではなく、ファームウェアの HARDWARE\RESOURCEMAP\...\Physical Memory レジストリキーから読み取った実装済みRAM範囲に限定されるため、MMIOホールに触れることはなく、搭載RAMより上の領域を見逃すこともありません。Token フィールド(EPROC_TOKEN)を読み取ります。Token スロットに書き込みます。トークンは _EX_FAST_REF であるため、デフォルトでは下位の参照カウントビットがマスクされます(--mask でこの動作を選択します)。cmd.exe を起動します。whoami は NT AUTHORITY\SYSTEM を返します。オフセット(EPROC_TOKEN、EPROC_PID、EPROC_IMG_NAME など)は特定のビルド向けであり、対象のWindowsバージョンで dt nt!_EPROCESS と照合して確認する必要があります。
実行ファイル名が重要です。ステップ3では物理メモリ内の ImageFileName を照合して自身のプロセスを特定しますが、このフィールドは15文字に制限され、スキャンは最初の8文字を照合します。コンパイル後の名前は短く、特徴的なものにしてください。バイナリをリネームする場合はこの制限内に収めてください。そうしないと自己スキャンがプロセスを見つけられません。
このドライバは固定のデバイス名を使用しません。デバイスオブジェクト名は、登録されているサービス名から派生します。ディスク上のファイル名は無関係です。バイナリをサービス TRIXX として登録すると、ファイルがディスク上でどのような名前でも \\.\TRIXX が生成されます。
したがって、\Device\ThrottleStop や ThrottleStop.sys に基づく検知は簡単に迂回されます。検知はファイルハッシュまたは署名証明書に基づく必要があります:
SHA256: 16F83F056177C4EC24C7E99D01CA9D9D6713BD0497EEEDB777A3FFEFA99C97F0
Thumbprint: 524EDA9C819321C66E22C7BABEB23DAEAFFB2182
Subject: CN=TechPowerUp LLC, O=TechPowerUp LLC, L=Spokane, S=Washington, C=US
ソース内の DEVICE_NAMES リストは、既知の製品インストールを調べるためのプローブにすぎません。デバイス名を引数として渡すと、自分で登録したサービスを対象にできます。
| CVE | ドライバ |
|---|---|
| CVE-2019-7245 | GPU-Z.sys |
| CVE-2025-5324 | GPU-Z.sys |
| CVE-2025-7771 | ThrottleStop.sys(このリポジトリ) |
バイナリはここには含まれていません。入手したコピーは上記のSHA256で検証してください。このサンプルは LOLDrivers に収録されています。
cl /nologo /EHsc /W4 /O2 src\ThrottleStop.cpp /Fe:myLittleLpe.exe /link advapi32.lib
実験室での使用のみ。ロールバック用のスナップショットを用意した隔離されたVM内で実行してください。
sc.exe create <name> type= kernel binPath= C:\path\to\ThrottleStop.sys
sc.exe start <name>
myLittleLpe.exe
sc.exe stop <name>
sc.exe delete <name>
このバイナリは引数を取りません。物理メモリマップを表示し、SYSTEMとローカルのEPROCESSをスキャンして、トークンを交換し、NT AUTHORITY\SYSTEM として動作する cmd.exe を起動します。

同じドライバに関する他の公開成果(比較用):
防御的研究および検知エンジニアリングのために公開されています。この脆弱性はCVE-2025-7771としてすでに公開されています。ここに記載されたすべては作者が所有するシステムでテスト済みです。所有していない、またはテストを許可されていないシステムに対してこれを実行しないでください。