Nuevo exploit local para escalado de privilegios en Linux (chroot CLONE_NEWUSER|CLONE_FS)

Sebastian Krahmer (@Stealth) ha publicado un nuevo exploit local que permite el escalado de privilegios en Linux.
El exploit utiliza una combinación de CLONE_NEWUSER|CLONE_FS para obtener una shell de root. CLONE_NEWUSER es un flag que permite crear un nuevo namespace para un uid como un usuario sin privilegios. El truco es instalar un chroot en un CLONE_NEWUSER pero afectando al parent, el cual está ejecutándose en init_user_ns, y enlazando el binario de su para acabar ejecutando un bash como el usuario root (if (geteuid() == 0)):

http://stealth.openwall.net/xSports/clown-newuser.c


El autor lo ha probado en openSUSE12.1 con un kernel 3.8.2 (x86_64), si bien (afortunadamente) muchas distribuciones ya incluyen restricciones para los enlaces simbólicos. Por ejemplo en el nuevo Kali Linux...

prueba@kali:~$ cc -Wall clown-newuser.c -static
prueba@kali:~$ ./a.out
[**] clown-newuser -- CLONE_NEWUSER local root (C) 2013 Sebastian Krahmer

[+] Found myself: '/home/prueba/a.out'
[*] Parent waiting for boomsh to appear ...
[*] Setting up chroot ...
[-] link: Operation not permitted

root@kali:~# sysctl -a | grep protected
fs.protected_hardlinks = 1
fs.protected_symlinks = 1


Aunque si quitamos esta protección, comprobamos que no se permiten tampoco procesos en diferentes namespaces:

[**] clown-newuser -- CLONE_NEWUSER local root (C) 2013 Sebastian Krahmer

[+] Found myself: '/1/a.out'
[*] Parent waiting for boomsh to appear ...
[*] Setting up chroot ...
[+] Done.
[*] Cloning evil child ...
[-] clone: Operation not permitted


Parece por tanto que de momento este exploit no funciona en muchas de las principales distribuciones. Así que os agradeceríamos vuestros comentarios si lo probáis en otras ;)

Comentarios