Dirty Pipe の展開
このチャレンジでは、CVE-2022-0847 エクスプロイトを使用して、読み取り専用ファイル "cat.txt" を上書きします。
このエクスプロイトを使用する方法はたくさんあります。
依存関係
- Linux カーネルバージョン 5.8 以降(脆弱性あり)
- gcc (GNU Compiler Collection) : エクスプロイトコードのコンパイル用
初回セットアップ
- 脆弱性のある環境を構築する:
- Linux ユーザー向け:
- カーネルバージョン 5.8 以降で、パッチ適用済みバージョンより前のものを使用してください:
- パッチ適用済みバージョンは 5.16.11、5.15.25、5.10.102 です。
- システムのカーネルバージョンを確認するには、次のコマンドを実行します:
uname -r
- カーネルがすでにパッチ適用済みの場合は、ダウングレードするか、脆弱性条件に合う別の Linux インストールを使用する必要があります。
- Windows ユーザー向け:
- 仮想マシンをインストールする:
- Oracle VM VirtualBox や VMware などの仮想マシンをダウンロードしてインストールします。
- 脆弱性のある Linux ディストリビューションをダウンロードする:
- Kali Linux Archives にアクセスして、古いバージョンの Kali Linux をダウンロードします。
- 推奨バージョンは 5.8 ~ 5.15 カーネルのリリース (例: Kali 2021.1) です。
- または、一致するカーネルバージョンを持つ他の Linux ディストリビューション (例: 古いバージョンの Ubuntu や Debian) でも動作します。
- VM をセットアップする:
- VirtualBox で新しい仮想マシンを作成します:
- 少なくとも 2 GB の RAM と 10 GB のディスク容量を割り当てます。
- ダウンロードした ISO ファイルを使用して Linux ディストリビューションをインストールします。
- インストール後、次のコマンドでカーネルバージョンを確認します:
uname -r
- 必要なツールをインストールする:
- 環境をセットアップしたら、以下のツールがインストールされていることを確認します:
- gcc: エクスプロイトコードのコンパイルに必要。
- make: 必要に応じてプロジェクトをビルドするため。
- パッケージマネージャーを更新し、ツールをインストールします:
sudo apt update
sudo apt install gcc make -y
チャレンジの開始
- 開始:
カーネルバージョンを確認してください!
次の GitHub リンクを使用します: https://github.com/basharkey/CVE-2022-0847-dirty-pipe-checker.git
ファイル cat.txt が読み取り専用であることを確認してください。
制限事項は以下の通りです:
攻撃者は読み取り権限を持っている必要があります(ページをパイプに splice() する必要があるため)
オフセットはページ境界上にあってはなりません(そのページの少なくとも 1 バイトがパイプにスプライスされている必要があるため)
書き込みはページ境界をまたいではなりません(残りの部分に新しい匿名バッファが作成されるため)
ファイルのサイズ変更はできません(パイプが独自のページ充填管理を持ち、ページキャッシュにどれだけデータが追加されたかを伝えないため)
- エクスプロイトの展開:
-
パイプを作成します。
-
パイプに任意のデータを書き込みます(すべてのリングエントリに PIPE_BUF_FLAG_CAN_MERGE フラグを設定するため)。
-
パイプを空にします(struct pipe_inode_info リング上のすべての struct pipe_buffer インスタンスにフラグを残したまま)。
-
対象ファイル(O_RDONLY で開く)から、対象オフセットの直前の位置からパイプにデータをスプライスします。
-
パイプに任意のデータを書き込みます。このデータは、PIPE_BUF_FLAG_CAN_MERGE が設定されているため、新しい匿名の struct pipe_buffer を作成する代わりに、キャッシュされたファイルページを上書きします。
-
cat.txt を上書きし、次の内容を
I'm a cat
1444
から
I'm a dog
2025
に変更します。
-
check_cat.sh を使用して、動作するかどうかを確認します:
chmod +x check_cat.sh
./check_cat.sh
チャレンジの再生成
以下のコマンドを使用します:
chmod +x cat_generate.sh
./cat_generate.sh
チャレンジの公開
ヒントは hints.txt にあります。