the_open_door
café
ESEN
← Volver al índice

dosbox SUID abuse

DOSBox es un emulador de MS-DOS pensado para ejecutar juegos y programas antiguos. Entre sus capacidades está montar directorios del anfitrión como unidades DOS y escribir ficheros en ellos. Esa función inofensiva se vuelve una escalada cuando el binario lleva el bit SUID propiedad de root: todo lo que DOSBox escriba se escribe como root.

Recordatorio del SUID. Un binario con SUID corre con los privilegios de su propietario, no de quien lo lanza. Si /usr/bin/dosbox es de root y tiene SUID, cualquier escritura que haga el emulador ocurre con autoridad de root. Forma parte del abuso de binarios SUID y está catalogado en GTFOBins. Se localiza con:

find / -perm -4000 2>/dev/null

El abuso (estilo GTFOBins). DOSBox permite pasar comandos con -c. Montamos la raíz del sistema como unidad C: y, redirigiendo la salida, escribimos en un fichero sensible como root. En Nukem, el objetivo fue /etc/sudoers, para concederse sudo total:

LFILE='/etc/sudoers'
dosbox -c 'mount c /' -c "echo commander ALL=(ALL:ALL) ALL >> C:$LFILE" -c exit

Tras ello, el usuario ya puede usar sudo para cualquier cosa:

sudo -l
sudo su
User commander may run the following commands on nukem:
    (ALL : ALL) ALL

(Otra variante escribe una línea en /etc/passwd con un usuario root de contraseña conocida y luego su a él.)

El detalle de Nukem: DOSBox necesita una pantalla. DOSBox es una aplicación gráfica y no arranca sin un servidor X. La máquina exponía un VNC en 127.0.0.1:5901 (visible con netstat -tuln, solo en localhost). La solución fue túnel SSH y cliente VNC para obtener un escritorio donde lanzar el emulador:

ssh -L 5901:localhost:5901 commander@<ip>
vncviewer 127.0.0.1:5901

Desde la terminal gráfica de esa sesión VNC se ejecuta el dosbox SUID y se completa la escritura. Es un buen ejemplo de que una técnica de privesc a veces exige primero resolver un requisito de entorno (aquí, un display gráfico vía port forwarding).

Cómo detectarlo. La firma directa es dosbox escribiendo en un fichero sensible como root: auditd -w /etc/sudoers -p wa y -w /etc/passwd -p wa con el proceso dosbox como autor del cambio es inconfundible (un emulador de DOS no tiene por qué tocar sudoers). En reposo, dosbox con bit SUID en find / -perm -4000 es ya la desviación. Una línea nueva en /etc/sudoers//etc/passwd (FIM) o un sudo recién concedido a una cuenta que antes no lo tenía cierra la cadena; el túnel VNC/SSH previo (sesión con reenvío a 5901) es el indicio de red.

Defensa. Quitar el SUID de dosbox (y de cualquier emulador o herramienta capaz de montar y escribir ficheros): no hay motivo legítimo para que un emulador de DOS corra como root. Revisar el inventario con find / -perm -4000 y retirar el bit de todo lo que no lo requiera.

Máquinas donde se aplica

  • NukemProving Grounds Practice