
CVE-2019-5736 implementado en un runtime de contenedores escrito a medida para comprender el exploit.
CVE-2019-5736 implementado usando un runtime de contenedores sencillo y propio para entender el exploit.
El exploit se basa en el runc-poc de twistlock (y casi todo está copiado de él): https://github.com/twistlock/RunC-CVE-2019-5736/tree/master/malicious_image_POC
Consulta la documentación del código para más detalles.
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.
Desvincula (unshare) todos los namespaces excepto el namespace de usuario. El namespace de usuario se desvincula (unshare) bajo circunstancias especiales, es decir, cuando se especifican urange, , y/o .
grangeuidgidEsto fue probado y realizado en 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 creado en el directorio adecuado del 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 ejemplo: sudo ./quarantine --rootfs rootfs /shebang_exploit o ./quarantine --rootfs rootfs --uid 1 /shebang_exploit.
Funciona siempre que conserves CAP_DAC_OVERRIDE o CAP_SYS_ADMIN en el host, es decir, no hagas unshare del namespace de usuario al usar sudo (ya que esto elimina las capabilities en el namespace padre), o que poseas el archivo en el host.