release_agent exploit - Relative Paths to PIDs
さらなる詳細は、**https://ajxchapman.github.io/containers/2020/11/19/privileged-container-escape.html**のブログポートを確認してください。これは要約に過ぎません:
この技術は、コンテナ内からホストコードを実行する方法を概説しており、Kata Containersや特定のdevicemapper
設定のように、ホスト上のコンテナのファイルシステムパスを隠すストレージドライバ設定によって引き起こされる課題を克服します。
主なステップ:
プロセスID(PID)の特定: Linuxの擬似ファイルシステム内の
/proc/<pid>/root
シンボリックリンクを使用して、コンテナ内の任意のファイルにホストのファイルシステムに対して相対的にアクセスできます。これにより、ホスト上のコンテナのファイルシステムパスを知る必要がなくなります。PIDバッシング: ホスト上のPIDを検索するためにブルートフォースアプローチが採用されます。これは、
/proc/<pid>/root/<file>
に特定のファイルの存在を順次確認することによって行われます。ファイルが見つかると、それは対応するPIDがターゲットコンテナ内で実行されているプロセスに属していることを示します。実行のトリガー: 推測されたPIDパスが
cgroups release_agent
ファイルに書き込まれます。このアクションはrelease_agent
の実行をトリガーします。このステップの成功は、出力ファイルの作成を確認することで確認されます。
攻撃プロセス
攻撃プロセスは、コンテナ内で実行されているプロセスの正しいPIDを推測してホスト上でペイロードを実行することを目的とした、より詳細な一連のアクションを含みます。以下のように展開されます:
環境の初期化: ホスト上にペイロードスクリプト(
payload.sh
)が準備され、cgroup操作のためのユニークなディレクトリが作成されます。ペイロードの準備: ホスト上で実行されるコマンドを含むペイロードスクリプトが作成され、実行可能にされます。
Cgroupの設定: cgroupがマウントされ、設定されます。
notify_on_release
フラグが設定され、cgroupが解放されるとペイロードが実行されるようにします。PIDのブルートフォース: ループが潜在的なPIDを反復し、各推測されたPIDを
release_agent
ファイルに書き込みます。これにより、ペイロードスクリプトがrelease_agent
として設定されます。実行のトリガーと確認: 各PIDについて、cgroupの
cgroup.procs
に書き込まれ、PIDが正しい場合にrelease_agent
の実行がトリガーされます。ペイロードスクリプトの出力が見つかるまでループは続き、成功した実行を示します。
ブログ投稿からのPoC:
Last updated