
CVE-2025-7771 の概念実証。ThrottleStop.sys は、アクセス制御なしで任意の物理メモリ読み取り/書き込みを可能にする2つのIOCTLハンドラを公開しています。つまり、任意の管理者プロセスが物理RAM内の任意の場所を読み書きできます。
Windows 10 22H2 および Windows 11 23H2 x64 でテスト済み。
まずドライババイナリを IDA Pro にロードし、内部の動作を理解しました。IRP_MJ_DEVICE_CONTROL ディスパッチルーチンを見つけ、2つのIOCTLコードまで追跡しました。
0x80006498 — 物理アドレスからの読み取り0x8000649C — 物理アドレスへの書き込みどちらも指定されたアドレスをそのまま MmMapIoSpace に渡すだけです。境界チェックも呼び出し元の検証も何もありません。それがバグです。
そこからの攻撃パスは非常に単純です。
\\.\ThrottleStop へのハンドルを開くNtQuerySystemInformation クラス 79)を使用して仮想→物理アドレス変換マップを構築するNtQuerySystemInformation クラス 11 を介して ntoskrnl ベースをリークするntoskrnl.exe をロードして PsInitialSystemProcess エクスポート RVA を解決し、実行時ベースに加算してカーネル VA を取得するEPROCESS+0x4b8 から SYSTEM トークンを読み取るActiveProcessLinks を辿って自身の EPROCESS を見つけるトークンフィールドは _EX_FAST_REF であるため、下位4ビットは参照カウントでありポインタの一部ではありません。SYSTEM トークンを読み取るときはそれらのビットをマスクし、書き込むときは自身の参照カウントビットを保持します。そうしないと BSOD の危険があります。
cl /std:c++20 /EHsc /O2 exploit_single.cpp /link ntdll.lib advapi32.lib
MSVC (VS2022+) が必要です。また、ドライバがロードされている必要があります。管理者として実行してください。
これらは Windows 10 20H2 ~ 22H2 および Windows 11 22H2/23H2 x64 用です。別のビルドの場合は、WinDbg で dt nt!_EPROCESS を確認してください。
| フィールド | オフセット |
|---|---|
| UniqueProcessId | 0x440 |
| ActiveProcessLinks | 0x448 |
| Token | 0x4b8 |
教育および研究目的のみ。個人のVMでテスト済み。