
Explotando la vulnerabilidad llamada "Dirty_Sock" (CVE-2019-7304) en la API REST del daemon snapd de Canonical.
Explotar la vulnerabilidad llamada "Dirty_Sock" (CVE-2019-7304) en la API REST del demonio snapd de Canonical (un servicio predeterminado en Ubuntu Linux), para obtener acceso root.
Guía de Ramil Mustafayev: https://kryptohaker.medium.com/linux-privilege-escalation-via-snapd-using-dirty-sock-exploit-and-demonstration-of-cve-2019-7304-892716cf99ca
Esta vulnerabilidad fue explotada en versiones de snapd anteriores a la 2.37, debido a una validación y análisis incorrectos de la dirección del socket remoto al realizar controles de acceso en su socket UNIX. Esto también afectó a algunas distribuciones Unix y Linux en ese momento (por ejemplo, Ubuntu 16.04). Por lo tanto, para implementar esta explotación, necesitamos snapd 2.32 y Ubuntu 16.04
Obtuve el paquete Debian de snapd 2.32 desde https://launchpad.net/ubuntu/+source/snapd

Primero, compruebo la máquina Ubuntu para ver si es vulnerable a la explotación utilizando los comandos cat /etc/lsb-release (que muestra la versión de Ubuntu con su descripción) y uname -a (que comprueba la información del ordenador y del sistema operativo actuales). Entonces, nos aseguramos de que esta máquina es explotable.

El siguiente paso es iniciar el servicio snapd utilizando el comando systemctl start snapd (En realidad, cuando los atacantes explotan esta falla, el servicio snapd debe ser iniciado por el administrador, de lo contrario no podrán lanzarlo con éxito). Luego, podemos comprobar la versión de snapd para asegurarnos de que es vulnerable.

A continuación, comprobaré los privilegios del usuario utilizando los comandos id (muestra la información del usuario y del grupo) y tail /etc/passwd (el archivo /etc/passwd se utiliza para llevar un registro de cada usuario registrado). Los resultados siguientes muestran que el atacante con el nombre de usuario "coby" es un usuario normal, que tiene el acceso más bajo al sistema.

Para lanzar este ataque, utilizaremos el script dirty_sock, que tiene dos versiones, y obtenido de https://github.com/initstring/dirty_sock. Mientras que la Versión Uno requiere una conexión a Internet saliente y ejecutar el servicio SSH, la Versión Dos se puede ejecutar directamente sin ningún requisito.
En el archivo dirty_sockv2.py, que se utilizará en esta explotación, se deben tener en cuenta algunos componentes clave. El primer componente clave de este script es la variable TROJAN_SNAP, que es una cadena codificada en base64 que representa un paquete snap instalable. Este paquete es un snap "devmode" vacío que tiene un script bash en el gancho de instalación, que creará un nuevo usuario ("devmode" (modo desarrollador) es un modo de instalación especial que permite a los snaps omitir el confinamiento estricto para fines de desarrollo y depuración).

Otro componente importante en este script es la función create_sockfile(). Esta función explota el análisis inseguro en el archivo "ucrednet.go" de snapd para generar un archivo de socket aleatorio e introducir el dirty sock, ;uid=0;, lo que nos permite sobrescribir la variable UID.

Para implementar esta explotación, simplemente ejecuto dirty_sockv2.py en la terminal. Después de ejecutar con éxito el exploit dirty_sock, podemos ver que el script creó automáticamente una cuenta dirty_sock con la misma contraseña.

Luego, reviso /etc/passwd para ver la lista de usuarios registrados y observo que se creó un nuevo usuario llamado "dirty_sock".

Usando el comando su, puedo iniciar sesión en la cuenta "dirty_sock" con las credenciales descubiertas. Después de iniciar sesión correctamente, puedo comprobar los privilegios de este usuario y ver que está en el grupo sudo. Esto significa que el atacante ya ha obtenido el control total del sistema y puede hacer cualquier cosa con los privilegios más altos.

La puntuación CVSS de esta vulnerabilidad es 8.8 (Severidad Alta), lo que significa que puede causar un gran impacto en el sistema si se explota. Esta vulnerabilidad tiene una severidad alta, ya que no requiere un privilegio alto para explotarse. Cuando un atacante ya tiene algún punto de apoyo en el sistema (por ejemplo, un usuario de bajos privilegios), puede escalar privilegios hasta root, convirtiendo esta vulnerabilidad en una seria amenaza local de seguridad, especialmente en entornos multiusuario o en la nube.