
これは、Lenovo Dispatcher ドライバー (LnvMSRIO.sys) (CVE-2025-8061) を悪用するための基本的な概念実証 (PoC) です。脆弱性は Luis Casvella 氏によって発見されました (ソース: https://blog.quarkslab.com/exploiting-lenovo-driver-cve-2025-8061.html)。
この PoC の主なアイデアは、読み取り/書き込みプリミティブのみを悪用して、ntoskrnl.exe からシステムトークンを奪うことです。そのために、PoC は Superfetch/PFN (https://www.outflank.nl/blog/2023/12/14/mapping-virtual-to-physical-adresses-using-superfetch/) を使用して、ユーザーモードで仮想アドレスを物理アドレスに変換できるようにします。
Superfetch を使用することで、仮想アドレスを物理アドレスに変換し、それらを脆弱なドライバーに直接提供できるため、任意のアドレスに対して読み取りと書き込みが可能になります。これにより、PoC は ntoskrnl.exe で定義されている NtAddAtom 関数の先頭を、インラインアセンブリを使用して Rust コード (base.rs 内の steal_kernel_token_shellcode_fn) に定義されたユーザーモードのシェルコードにジャンプするための小さなシェルコードで上書きします。この小さなシェルコードは generate_jmp_user_shellcode で生成され、わかるように、CR4 の第20ビット目をクリアして SMEP を無効化し、その後ユーザーランドのシェルコード (システムトークンを奪うため) を呼び出し、最後に SMEP を再度有効化します。
これらすべてにより、システムの cmd を取得できます。
重要: superfetch をクエリするには管理者として実行する必要があります。
Windows 10 (22h2) と Windows 11 (25h2) でテストされています。お使いの Windows バージョンに応じてオフセットを調整してください。