Dirty Pipe エクスプロイト (CVE-2022-0847)
概要
このリポジトリには、Linux カーネルバージョン 5.8 から 5.16 に影響を与える Dirty Pipe 脆弱性 (CVE-2022-0847) に対する Proof of Concept (PoC) エクスプロイトが含まれています。この脆弱性は、カーネル内のパイプバッファの不適切な処理を悪用して ローカル特権昇格 を可能にし、攻撃者が読み取り専用ファイル(SUID バイナリなど)を変更し、昇格した権限で任意のコードを実行することを可能にします。
説明
Dirty Pipe 脆弱性は、Linux カーネルバージョン 5.8 から 5.16 に見られる重大な問題です。カーネル内のパイプバッファの不適切な処理を悪用してローカル特権昇格を可能にします。この脆弱性は、読み取り専用ファイル(SUID バイナリなど)への書き込みによって引き起こされ、影響を受けるシステム上で 任意のコード実行 や潜在的に ルートシェル につながる可能性があります。
主な機能:
- 特権昇格: 非特権ユーザーから root への権限昇格。
- 標的型攻撃: SUID バイナリのような読み取り専用ファイルを標的とします。
- カスタム ELF シェルコード: カスタムシェルコードをターゲットファイルに注入し、ルートシェルを起動します。
- アンチデバッグ: リバースエンジニアによる検出を回避するためのアンチデバッグ機構を含みます。
エクスプロイトの流れ
- カーネルバージョンの確認: カーネルバージョンが脆弱な範囲(5.8 から 5.16)内にあることを確認します。
- パイプバッファの操作: エクスプロイトはパイプバッファフラグを操作して Dirty Pipe 脆弱性をトリガーします。
- ペイロードの注入: カスタム ELF シェルコードがターゲットファイル(例:SUID バイナリ)に注入されます。
- SUID バイナリの乗っ取り: ターゲットのバイナリが、注入されたシェルコードで内容を上書きされることで乗っ取られます。
- 乗っ取ったバイナリの実行: 乗っ取られたバイナリが実行され、ルートシェルが起動されます。
- 元のバイナリの復元: 検出を避けるため、SUID バイナリの元の内容が復元されます。
- 永続的なルートシェル: 昇格した権限でルートシェルが開かれます。
前提条件
- 脆弱なカーネルバージョン(5.8 から 5.16)を実行している Linux システム。
- 特権昇格のために悪用可能な SUID バイナリ。
エクスプロイトのコンパイルと実行
エクスプロイトをコンパイルするには、以下のコマンドを実行します。
gcc dirtypipe.c -Wall -O2 -fno-pie -no-pie -o dirtypipe
注意事項:
- ターゲットの SUID バイナリが悪用可能であり、エクスプロイトを実行するユーザーがアクセス可能なパスに存在することを確認してください。
- システムが脆弱なバージョンの Linux カーネル(5.8 から 5.16)を実行している必要があります。
アンチデバッグ機能
このエクスプロイトには、gdb などのデバッグツールによる検出を防ぐためのアンチデバッグ機構が含まれています。エクスプロイトがデバッガの存在を検出すると、早期に終了し、攻撃者がコードを解析するのをより困難にします。
動作の仕組み:
- エクスプロイトは /proc/self/status を検査してデバッグアクティビティをチェックし、ptrace システムコールを使用してプログラムがデバッガによってトレースされているかどうかを検出します。
- デバッガが検出された場合、エクスプロイトは実行を停止して終了し、リバースエンジニアリングをより困難にします。
免責事項
このエクスプロイトは教育および研究目的のみで提供されています。このエクスプロイトの不正使用は違法かつ非倫理的です。システム所有者の明示的な許可なくこのエクスプロイトを実行することは禁止されており、法的結果を招く可能性があります。
作者は、本エクスプロイトの使用または誤用に起因するいかなる損害、データ損失、または法的影響についても責任を負いません。