
CVE-2019-5736 implementado em um runtime de contêiner próprio para entender o exploit.
CVE-2019-5736 implementado usando um runtime de contêineres simples, escrito manualmente, para entender o exploit.
O exploit é baseado no (e quase todo copiado do) runc-poc do twistlock: https://github.com/twistlock/RunC-CVE-2019-5736/tree/master/malicious_image_POC
Consulte a documentação do código para obter mais detalhes.
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.
Todos os namespaces são desassociados, exceto o user ns. O user ns é desassociado sob circunstâncias especiais, ou seja, quando urange, , e/ou são especificados.
grangeuidgidIsso foi testado e feito no 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 modificado
sudo chroot rootfsapt install libcap-devlibcap.so.2.25 criado para o diretório apropriado do 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.cPor exemplo: sudo ./quarantine --rootfs rootfs /shebang_exploit ou ./quarantine --rootfs rootfs --uid 1 /shebang_exploit.
Funciona desde que você mantenha CAP_DAC_OVERRIDE ou CAP_SYS_ADMIN no host, ou seja, não desassocie o user ns ao usar sudo (pois isso remove as capabilities no namespace pai), ou que você seja o dono do arquivo no host.