
Lenovo Diagnostics Driver EoP - 任意の読み書き
Lenovo Diagnostics Driver における不適切なアクセス制御により、低権限ユーザーがデバイス IOCTL を発行して、任意の物理/仮想メモリの読み取り/書き込みを実行できるようになります。
ch3rn0byl に協力していただきありがとうございます(そして彼の関数を2つ完全に拝借しました)。
IOCTL 0x222000:
rdmsr
IOCTL 0x222008/0x22200C:
HalGet/SetBusData
IOCTL 0x222010:
MmMapIoSpace 経由の読み取り
IOCTL 0x222014:
MmMapIoSpace 経由の書き込み
この IOCTL は、入力バッファで指定されたポインタから値をマッピングされた物理メモリにコピーします
MmPteBase およびその他の前提条件を解決するために、物理メモリ範囲 0x1000 - 0x10000 内で 8 バイトのゼロを検索して物理的な「スワップ」領域が見つけられます。
その領域が見つかると、IOCTL 0x222014 を介して仮想メモリがそのスワップ領域にコピーされ、IOCTL 0x222010 を使用して読み戻されます。
現在のところ、すべての仮想読み取りはこの「スワップ」領域を使用して行われています。
仮想 r/w を行うのに最適な方法でしょうか?おそらく違います。
機能するでしょうか?はい。
あ、そうだ、自分でオフセットを調整してください。これは HVCI を無効にした Windows 11 21H2 でテストされました。