
このエクスプロイトは、/etc/passwd への不正な書き込みアクセスを獲得するために Dirty Cred 攻撃手法を実装しています。多数のページを作成したり、ファイルディスクリプタを積極的にスプレーする多くの類似のエクスプロイトとは異なり、このアプローチはより標的を絞った方法で必要なカーネル構造を破損させます。
CPUアフィニティの設定とFD制限の増加
安定したパフォーマンスとスプレーに十分なファイルディスクリプタを確保します。
io_uringの初期化
io_uringインスタンスを作成し、カーネルメモリ使用のためにバッファリングを登録します。
バッファリングの登録解除
脆弱性をトリガーし、カーネルデータ構造をエクスプロイト可能な状態にします。
ファイルディスクリプタのスプレー
/etc/passwd に対して多数のFDを開き、目的のカーネルオブジェクトを破損させようとします。
ファイルモードの変更
f_mode フラグを破損させ、/etc/passwd が書き込み可能になるようにします。
バックドアエントリの書き込み
/etc/passwd に evil::0:0:root:/root:/bin/bash を挿入します。
io_uring 実装を備えた Linuxカーネル(CVE-2024-0582 バグのあるカーネルでテスト済み)。.rs ソースファイルをコンパイルする場合)。main.rs 内の EXT4_FOPS_OFFSET の値を 調整 する必要があるかもしれません(デフォルトは 0x122b3c0 に設定されています)。不一致があると、エクスプロイトが失敗したり、誤った動作を引き起こす可能性があります。カーネルがシンボル情報をエクスポートしており、適切な権限がある場合(多くの場合、本番システムでは制限されています)、/proc/kallsyms から読み取ることができます:
_text のアドレスを取得する:
grep " _text" /proc/kallsyms
結果のアドレスを TEXT_ADDR と呼びます。
ext4_file_operations のアドレスを取得する:
grep ext4_file_operations /proc/kallsyms
結果のアドレスを EXT4_FOPS_ADDR と呼びます。
減算する:
EXT4_FOPS_OFFSET = EXT4_FOPS_ADDR – TEXT_ADDR