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 Bashing: ホスト上の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