
CVE-2024-21626 runcコンテナエスケープの教育用デモ:悪用試行を検出するeBPFベースの検出ガジェット
このリポジトリには、CVE-2024-21626に対して脆弱なアプリのコード例と、悪用試行を検出するためのeBPFガジェットが含まれています。
このリポジトリは、このブログ記事の一部として作成されました。
この脆弱性の検出に使用されるガジェットプログラムは、デモンストレーション目的のみです。これはCVE-2024-21626の完全な検出ではありません。
CVE-2024-21626は、runcコンテナランタイムにおける脆弱性であり、バージョン1.1.12より前のバージョンに存在します。これは、コンテナ内でコマンドを作成または実行する際に、runcが「リークした」ファイル記述子を適時に閉じないことに依存しており、その結果、コンテナがそのファイル記述子を継承し、ホストファイルシステムへのアクセスを取得します。
この脆弱性を悪用する方法はいくつかあります。このリポジトリは、この脆弱性が実行時にどのように悪用されるかを示しています。
詳細については、こちら をご覧ください。
このデモを機能させるには、マシンがruncバージョン1.1.11以下を実行していることを確認する必要があります。
leaky-app は、潜在的にリークしたファイル記述子へのシンボリックリンクを作成するGoアプリです。Dockerイメージをビルドするには:
make leaky-app
eBPFガジェットをビルドするには、igツールが必要です。
ガジェットは以下を使用してビルドできます:
make gadget
両方がビルドされたら、以下のコマンドでガジェットを実行します:
IG_EXPERIMENTAL=true sudo -E ig run trace-symlink:latest
別のシェルを開き、leaky-appコンテナを起動します:
docker run --rm --name leaky-app leaky-app
ガジェットがシンボリックリンクシステムコールを呼び出したコンテナを出力するはずです。
このリポジトリには、CVE-2024-21626の検出を示すために設計されたデモンストレーションアプリケーションが含まれています。 このデモは学習目的のみであり、実用的な検出ツールと見なされるべきではないことに注意することが重要です。 このデモで実装された検出メカニズムは、すべてのシナリオを網羅しておらず、この脆弱性の検出の複雑さを正確に反映していません。