
このリポジトリには、CVE-2019-5736用のCベースの概念実証エクスプロイトが含まれています。
この脆弱性により、悪意のあるDockerコンテナがホストのruncバイナリを上書きし、ホスト上でroot権限で任意のコマンドを実行できるようになり、ホストシステムを完全に侵害します。
元のGoベースのPoC(Frichetten)に触発されました。
このコードは教育目的のみです。所有していない、またはテストする許可がないシステムでは実行しないでください。誤用は法的結果を招く可能性があります。
.
├── docker/
│ └── Dockerfile
├── lib/
│ └── exploit.h
├── scripts/
│ ├── build_docker.sh
│ ├── purge_docker_installation.sh
│ ├── setup_env.sh
│ ├── start_docker.sh
│ └── trigger_exploit.sh
├── src/
│ ├── exploit.c
│ └── main.c
├── LICENSE
├── Makefile
└── README.md
このエクスプロイトは以下でテストされています:
sudo ./scripts/install_dependencies.sh
注: すでに
wgetとbuild-essentialがインストールされている場合は、安全にスキップできます。
sudo ./scripts/setup_env.sh
このスクリプトは、systemdやソケットアクティベーションなしでDockerをインストールします。VMラボに最適です。
sudo dockerd
注: これをバックグラウンドで実行するには、2つ目のターミナルが必要です。
sudo ./scripts/build_docker.sh
このスクリプトはエクスプロイトをコンパイルし、バイナリを含むDockerイメージをビルドします。
注:
makeを実行して手動でエクスプロイトバイナリをビルドすることもできます。
Dockerを完全に削除し、システムをインストール前の状態に戻すことができます:
sudo ./scripts/purge_docker_installation.sh
まず、エクスプロイトコンテナを起動します。次のコマンドを使用できます:
sudo docker run -it --name exp --rm runc_exploit
または、含まれているシェルスクリプト:
sudo ./scripts/start_docker.sh
コンテナ内で、エクスプロイトバイナリを起動します:
./exploit -c "$COMAND"
バイナリは3つの引数を取ります:
-hは使用方法を表示し、-cはホスト上で実行したいコマンド文字列ペイロードを定義します。最後の-d引数は実行中のデバッグ出力を切り替えます(例:/procの解析情報)。
注:
-c引数が指定されていない場合、エクスプロイトはcp /etc/shadow > /tmp/pwned && chmod 644 /tmp/pwnedを実行します。
エクスプロイトはホスト上で着信するruncプロセスを待機します。
sudo ./scripts/trigger_exploit.sh
このスクリプトは、コンテナ内でbin/shを実行する新しいプロセスを開き、エクスプロイトをトリガーします。
注: ホスト上で手動で
docker execを実行してエクスプロイトをトリガーすることもできますが、現在のPoCバージョンが機能するにはタイミングが重要です。そのため、数回の試行が必要になる場合があります...
runcが正常にエクスプロイトされた場合、同様の出力が表示されます:

これで、pwnされたshadowファイルを開くことができます:
