Esta vulnerabilidad Sudo te permite ejecutar comandos como root
Se ha descubierto una vulnerabilidad en el comando sudo de Linux que podría permitir a los usuarios sin privilegios ejecutar comandos como root.
Afortunadamente, esta vulnerabilidad solo funciona en configuraciones no estándar y la mayoría de los servidores Linux no se ven afectados.
Antes de hablar sobre la vulnerabilidad, es importante tener información básica sobre cómo funciona el comando sudo y cómo se puede configurar.
Al ejecutar comandos en un sistema operativo Linux, los usuarios no privilegiados pueden usar el comando sudo (super user do) para ejecutar comandos como root, siempre que se les haya dado permiso o conozcan la contraseña del usuario root.
El comando sudo también se puede configurar para permitir que un usuario ejecute comandos como otro usuario, agregando directivas especiales al archivo de configuración /etc/sudoers.
Por ejemplo, los siguientes comandos permiten al usuario `test` ejecutar los comandos /usr/bin/vim y /usr/bin/id como cualquier usuario, excepto root.
test ALL = (ALL, !root) /usr/bin/vim
test ALL = (ALL, !root) /usr/bin/id
Para que el usuario `test` ejecute uno de los comandos anteriores, usaría un comando sudo con el argumento -u para especificar el usuario para ejecutarlo. Por ejemplo, el siguiente comando ejecutaría vim como el usuario `bleeping-test`.
sudo -u bleeping-test vim
Al crear usuarios en Linux, cada usuario recibe un UID. Como se ve a continuación, el usuario `test` tiene un UID de 1001 y `bleeping-test` tiene un UID de 1002.
Los usuarios pueden usar estos UID en lugar de un nombre de usuario al iniciar el comando sudo. Como ejemplo, el siguiente comando iniciará nuevamente VIM como `bleeping-test` pero esta vez al proporcionar el UID del usuario.
sudo -u#1002 vim
La vulnerabilidad sudo
El investigador de seguridad de Apple, Joe Vennix, descubrió un error que permite a los usuarios iniciar un comando sudo permitido como root utilizando el UID -1 o 4294967295 en el comando sudo.
Por ejemplo, el siguiente comando podría utilizar este error para iniciar el usuario /usr/bin/id como root, a pesar de que al usuario `test` se le negó específicamente hacerlo en el archivo /etc/sudoers.
sudo -u#-1 id
El uso de este error con el comando /usr/bin/id para obtener privilegios de root se ilustra a continuación.
Si bien esta vulnerabilidad es poderosa, es importante recordar que solo puede funcionar si un usuario tiene acceso a un comando a través del archivo de configuración de sudoers, y la mayoría de las distribuciones de Linux no lo hacen por defecto, entonces este error no tendrá ningún efecto.
Construyendo un ataque
Para explotar realmente esta vulnerabilidad, un usuario necesitaría tener una directiva sudoer configurada para un comando que pueda lanzar otros comandos.
En nuestro ejemplo de directivas sudoers de arriba, tenemos ese comando; el comando VIM!
test ALL = (ALL, !root) /usr/bin/vim
Cuando estás en VIM, un usuario puede iniciar otro programa usando el comando :! . Por ejemplo, si estás en VIM, puedes ingresar !ls para ejecutar el comando ls en la carpeta actual.
Si utilizamos el comando sudo -u#-1 vim para explotar esta vulnerabilidad, VIM se ejecutará como root. Luego puedes confirmar esto ejecutando el comando !whoami.
Ahora que VIM se inicia como root, todos los comandos que se ejecutan desde él también se ejecutan como root.
Esto se puede usar fácilmente para iniciar un shell root que luego puede ejecutar cualquier comando que desees en el sistema comprometido. Este ataque se ilustra a continuación.
Si bien este error es obviamente poderoso, solo se puede usar en configuraciones no estándar, que no afectarán a la gran mayoría de los usuarios de Linux.
Para aquellos que utilizan directivas sudoers para sus usuarios, deben actualizar a sudo 1.8.28 o posterior lo antes posible.