Vamos a analizar un poco más a fondo el CVE-2019-14287 que afecta al programa Sudo en Unix y permite escalada de privilegios y convertirnos en administrador.

La historia de CVE-2019-14287

CVE-2019-14287 es una vulnerabilidad descubierta por Joe Vennix, un investigador que trabaja para Apple.

Este exploit ya ha sido solventado, pero se puede presentar en versiones más antiguas de sudo, menores que 1.8.28, así que no viene mal conocerla.

Qué es sudo y cómo funciona

Para los que no están familiarizados, sudo es un comando en Unix que permite ejecutar programas como otro usuario. Normalmente, va por defecto al superusuario root, pero también es posible ejecutar como otro usuario usando su UID o su nombre de usuario.

Por ejemplo, puedes hacer:

sudo comando

Para ejecutar dicho comando como superusuario, o bien, si quieres ejecutar como otro usuario, usas:

sudo -u#id comando

Esto significa que pretendes ser otro usuario, que probablemente tenga privilegios más elevados.

Como muchos comandos en sistemas Unix, sudo puede ser configurado editando un archivo de configuración en el sistema, en este caso /etc/sudoers.

Editarlo directamente no se recomienda, pero sí puedes hacerlo con:

sudo visudo

Que chequea a la hora de guardar, asegurándose de que no hay configuraciones erróneas.

La vulnerabilidad CVE-2019-14287 en acción

La vulnerabilidad que nos interesa ocurre en un escenario muy particular. Digamos que tenemos un usuario al que queremos otorgar permisos extra.

Quieres que ejecute un programa como si fuera otro usuario, pero no quieres que lo ejecute como root. En ese caso, puedes añadir esta línea al archivo sudoers.

user ALL=(ALL:!root) NOPASSWD: ALL

Esto le dejaría ejecutar cualquier comando como otro usuario pero, en teoría, nunca como root.

En teoría.

En la práctica, con versiones vulnerables de sudo puedes saltarte esta restricción, lo que resulta una excelente forma de escalada de privilegios.

Con la configuración de arriba, usar:

sudo -u#0 comando

No funcionará. 0 es siempre el ID de usuario de root, y no estamos autorizados a ejecutar comandos como si fuéramos él.

Aquí es donde entra el CVE-2019-14287.

Joe Vennix descubrió que si especificas un UID de -1 (o su equivalente sin firmar 4294967295), sudo lo lee (leía) de manera incorrecta como un 0. Es decir, como root.

Esto significa que usar ese ID de -1 (o de 4294967295) permite ejecutar un comando como superusuario, a pesar de que explícitamente se ha prohibido).

Importante: solo funciona si te han concedido permisos no correspondientes a superusuario para el comando como en la configuración que hemos visto antes.

Así que, en la práctica, la aplicación de esta vulnerabilidad es ejecutar:

sudo -u#-1 comando

Practicando en la máquina vulnerable

Para practicar, conectamos por ssh en el puerto 2222.

¿Qué comando tenemos permitido ejecutar con sudo?

Si ejecutamos:

sudo -l

Vemos que se trata de /bin/bash y está configurado tal y como hemos visto, nos permite hacerlo como cualquier otro usuario, excepto root. Así que la respuesta es…

/bin/bash

¿Cuál es la bandera de root?

Aplicamos la vulnerabilidad:

sudo -u#-1 /bin/bash cat /root/root.txt

THM{l33t_s3cur1ty_bypass}