La creadora de OpenSnitch detecto vulnerabilidades en CUPS que permiten la ejecución remota de código
La creadora del firewall OpenSnitch y el analizador de redes Bettercap, dio a conocer hace poco la información sobre las vulnerabilidades críticas en el servidor de impresión CUPS y que permiten la ejecución remota de código sin autenticación. Estas fallas afectan a sistemas Linux, Solaris, FreeBSD y otras distribuciones de BSD.
La divulgación de manera inicial estaba prevista para el 6 de octubre, pero una filtración obligó a adelantar la divulgación antes de que la mayoría de las distribuciones tuvieran tiempo de implementar los parches de seguridad necesarios.
Las vulnerabilidades identificadas son las siguientes:
- CVE-2024-47176: Esta vulnerabilidad afecta al proceso de exploración de CUPS, que crea un socket de red que escucha conexiones en el puerto 631, conectándose a todas las interfaces de red del sistema. A través de este puerto, acepta solicitudes IPP de tipo «Get-Printer-Attributes» desde sistemas externos. Al manipular este servicio, un atacante puede añadir una impresora controlada remotamente y explotar vulnerabilidades en otros componentes de CUPS mediante la transferencia de configuraciones PPD maliciosas.
- CVE-2024-47177: Esta vulnerabilidad se encuentra en el controlador foomatic-rip del paquete cups-filters. Permite la ejecución de código arbitrario al pasar el parámetro FoomaticRIPCommandLine dentro de un archivo PPD. Debido a la vulnerabilidad en el proceso de navegación de CUPS, un atacante puede enviar archivos PPD maliciosos que contengan comandos de shell. Estos comandos, como los especificados en FoomaticRIPCommandLine, se ejecutan sin restricciones.
- CVE-2024-47175: Esta vulnerabilidad en libppd está relacionada con la falta de validación del valor ppdCreatePPDFromIPP2 al escribir atributos IPP en un archivo PPD temporal. Esto permite la sustitución arbitraria de datos en el archivo PPD resultante, aprovechando la inserción de atributos con un carácter de salto de línea. De esta manera, un atacante podría eludir la validación de atributos permitidos y explotar la vulnerabilidad en cups-filters mediante la sustitución de parámetros.
- CVE-2024-47076: Esta vulnerabilidad afecta a la biblioteca libcupsfilters del paquete cups-filters debido a la falta de verificación de los valores devueltos por el comando cfGetPrinterAttributes5 de un servidor IPP externo. Un atacante podría aprovechar esto para procesar atributos IPP arbitrarios dentro de otros subsistemas de CUPS, como la generación de archivos PPD.
Sobre la información que se dio a conocer, se menciona que, el ataque afecta a servidores CUPS que tienen el proceso cups-browsed ejecutándose y que aceptan conexiones de red en el puerto UDP. Además, el ataque puede originarse desde redes locales que utilicen los protocolos zeroconf, mDNS o DNS-SD para acceder a los servidores de impresión. Solo los sistemas donde el archivo de configuración tenga el parámetro BrowseRemoteProtocols configurado son vulnerables.
El investigador que descubrió la vulnerabilidad desarrolló un exploit funcional que aprovecha una combinación de varias fallas, lo que posibilita la ejecución remota de código con los privilegios del proceso encargado de gestionar los trabajos de impresión en CUPS (normalmente asignado al usuario «lp»). Este exploit permite modificar los parámetros de una impresora sin que el usuario lo note o agregar una nueva impresora vinculada a un servidor IPP malicioso. Al iniciar un trabajo de impresión, el archivo PPD manipulado por el atacante puede desencadenar la ejecución de su código, siempre que la víctima envíe una tarea de impresión a la impresora comprometida o suplantada.
En muchas distribuciones de Linux, cups-browsed se ejecuta por defecto en una configuración que permite la explotación. En sistemas que usan systemd, puedes verificar si el servicio cups-browsed está activo con el comando: sudo systemctl status cups-browsed.
La vulnerabilidad afecta a todos los sistemas de impresión que utilizan CUPS y versiones vulnerables de los paquetes de este. Por ahora, las correcciones solo están disponibles en forma de parches y las versiones actuales hasta la 2.0.1 son vulnerables. Como medida temporal para mitigar el riesgo mientras las distribuciones despliegan las actualizaciones pertinentes, es posible bloquear el acceso al puerto UDP 631 desde redes externas, deshabilitar el servicio cups-browsed o cambiar la opción de BrowseRemoteProtocols a «none».
Finalmente, si estás interesado en poder conocer más al respecto, puedes consultar los detalles en el siguiente enlace.