🐧Linux - Sudo Zeroday
Sudo
El programa sudo
se utiliza en sistemas operativos UNIX como Linux o macOS para iniciar procesos con los derechos de otro usuario. En la mayoría de los casos, se ejecutan comandos que solo están disponibles para los administradores. Sirve como una capa adicional de seguridad o una salvaguarda para evitar que el sistema y su contenido sean dañados por usuarios no autorizados. El archivo /etc/sudoers
especifica qué usuarios o grupos tienen permiso para ejecutar programas específicos y con qué privilegios.
Una de las últimas vulnerabilidades de sudo
lleva el CVE-2021-3156 y se basa en una vulnerabilidad de desbordamiento de búfer. Esto afectó a las versiones de sudo:
1.8.31 - Ubuntu 20.04
1.8.27 - Debian 10
1.9.2 - Fedora 33
y otros
Para saber la versión de sudo
, basta con el siguiente comando:
Lo interesante de esta vulnerabilidad es que estuvo presente durante más de diez años hasta que se descubrió. También existe una prueba de concepto pública que se puede utilizar para esto. Podemos descargarla en una copia del sistema de destino que hayamos creado o, si tenemos una conexión a Internet, en el propio sistema de destino.
Al ejecutar el exploit, se nos mostrará una lista que enumerará todas las versiones disponibles de los sistemas operativos que pueden verse afectados por esta vulnerabilidad.
Podemos saber con qué versión del sistema operativo estamos tratando utilizando el siguiente comando:
A continuación, especificamos el ID correspondiente a la versión del sistema operativo y ejecutamos el exploit con nuestro payload:
Omisión de la política de Sudo
En 2019 se encontró otra vulnerabilidad que afectaba a todas las versiones anteriores 1.8.28
y que permitía escalar privilegios incluso con un comando simple. Esta vulnerabilidad tiene el código CVE-2019-14287 y solo requiere un único requisito previo: permitir que un usuario del archivo /etc/sudoers
ejecute un comando específico.
De hecho, Sudo
también permite ejecutar comandos con identificadores de usuario específicos, lo que ejecuta el comando con los privilegios del usuario que lleva el identificador especificado. El identificador del usuario específico se puede leer desde el archivo /etc/passwd
.
Por lo tanto, el ID del usuario cry0l1t3
sería 1005
. Si se introduce un ID negativo (-1
) en sudo
, se procesa el ID 0
, que solo tiene root
. Por lo tanto, esto conduce al shell raíz inmediato.
Caso práctico
Aumente los privilegios y envíe el contenido de flag.txt como respuesta.
Al acceder por SSH comprobamos los permisos de ejecución y vemos que podemos ejecutar ncdu como root:
NCDU es un explorador de archivos con varias funcionalidades. Echándole un vistazo a GTFOBins encontramos algo curioso que podríamos utilizar:
Necesitamos saber la ruta completa al binario, lo podemos saber con:
Ahora vamos a ejecutar ncdu de la siguiente manera, con lo que le indicamos que lo ejecute como el usuario root:
Una vez que se abre solo tenemos que pulsar la tecla b
para lanzar una shell como root:
Última actualización