Vulnerabilidades explotadas de manera remota en el servidor de impresión CUPS

Simone Margaritelli, autor del cortafuegos OpenSnitch y del analizador de red bettercap, reveló prematuramente información sobre vulnerabilidades críticas previamente anunciadas que permiten ataques remotos a distribuciones de GNU/Linux, Solaris, FreeBSD y algunos otros sistemas BSD. Inicialmente, la publicación estaba programada para el 6 de octubre, pero debido a la filtración de información, tuvo que publicarse antes de que la mayoría de las distribuciones pudiera preparar una actualización de paquetes. Las vulnerabilidades afectan al servidor de impresión CUPS y permiten la ejecución remota de código en el sistema sin autentificación.

El investigador que encontró el problema ha preparado un prototipo funcional de exploit que utiliza una combinación de varias vulnerabilidades y permite ejecutar código de forma remota con los privilegios del proceso de manejo de trabajos de impresión de CUPS (normalmente el usuario 'lp'). El exploit permite reemplazar silenciosamente los parámetros de la impresora del usuario o añadir una nueva impresora asociada con un servidor IPP controlado por el atacante, que proporciona una descripción PPD especialmente elaborada. El procesamiento de este PPD durante la ejecución del trabajo de impresión conduce a la ejecución del código del atacante (es necesario que la víctima inicie la impresión en la impresora insertada o reemplazada por el atacante).

Los sistemas con el servidor CUPS y el proceso cups-browsed en ejecución, que acepta conexiones de red en el puerto 631 (UDP), son vulnerables. El ataque también puede llevarse a cabo desde una red local donde se utilizan servidor protocolos zeroconf, mDNS o DNS-SD para acceder a la impresión. Solo son vulnerables las configuraciones de cups-browsed en las que en el archivo /etc/cups/cups-browsed.conf el parámetro BrowseRemoteProtocols está configurado con el valor 'cups'. En las distribuciones con systemd, se puede verificar el uso del servicio cups-browsed con el comando 'sudo systemctl status cups-browsed'.

La vulnerabilidad se presenta en todos los sistemas de impresión basados en CUPS que utilizan versiones vulnerables de los paquetes cups-filters, libcupsfilters, libppd y cups-browsed. Las correcciones están disponibles solo en forma de parches (1, 2, 3) — las versiones actuales de cups-filters 2.0.1, libcupsfilters 2.1b1, libppd 2.1b1 y cups-browsed 2.0.1 son vulnerables. En las distribuciones, el problema permanece sin resolver, y se pueden rastrear las actualizaciones en las siguientes páginas: Debian, Ubuntu, RHEL, SUSE/openSUSE, Fedora, Arch, FreeBSD. Como una solución alternativa de protección antes de instalar la actualización, se puede restringir el acceso a la red externa al puerto UDP 631, desactivar el servicio cups-browsed o configurar la opción BrowseRemoteProtocols en «none».

Vulnerabilidades detectadas:

  • CVE-2024-47176 — vulnerabilidad en el proceso cups-browsed, que crea un socket de red que acepta conexiones en el puerto 631, vinculado a todas las interfaces de red existentes en el sistema y acepta solicitudes IPP «Get-Printer-Attributes» de cualquier sistema externo. Al manipular este servicio, se puede añadir una impresora controlada por el atacante al sistema y explotar a través de la transmisión de la configuración PPD vulnerabilidades en otros componentes de CUPS.
  • CVE-2024-47177 — vulnerabilidad en el controlador foomatic-rip del conjunto cups-filters, que permite la ejecución de código mediante la transmisión del parámetro FoomaticRIPCommandLine en un archivo PPD, que el atacante puede enviar gracias a la vulnerabilidad mencionada anteriormente en cups-browsed. Los comandos de shell especificados en el parámetro FoomaticRIPCommandLine se ejecutan tal cual, sin consideración de que el parámetro puede ser establecido por un tercero. Por ejemplo, para escribir en el archivo /tmp/VULNERABLE se puede indicar «FoomaticRIPCommandLine: «echo 1 > /tmp/VULNERABLE».
  • CVE-2024-47175 — vulnerabilidad en libppd, causada por la falta de verificación de la validez del valor ppdCreatePPDFromIPP2 al escribir atributos IPP en un archivo PPD temporal. El problema permite la sustitución de datos arbitrarios en el archivo PPD resultante mediante la adición de atributos, utilizando el carácter de nueva línea. Por ejemplo, se puede eludir la verificación y junto con los atributos permitidos se puede insertar el atributo FoomaticRIPCommandLine para explotar la vulnerabilidad mencionada en cups-filters.
  • CVE-2024-47076 — una vulnerabilidad en la biblioteca libcupsfilters del paquete cups-filters, relacionada con la falta de verificación de los valores cfGetPrinterAttributes5 devueltos por un servidor IPP externo, lo que permite al atacante organizar el procesamiento de atributos IPP arbitrarios en otros subsistemas de CUPS, por ejemplo, al generar archivos PPD.

El esquema de ataque a CUPS se reduce a los siguientes pasos:

  • Despliegue por parte del atacante de su propio servidor IPP.
  • Envío a la víctima de un paquete UDP con un enlace a la impresora vinculada al servidor IPP que el atacante ha puesto en marcha.
  • Tras recibir este paquete, el sistema de la víctima se conecta al servidor IPP del atacante y solicita los atributos de la impresora.
  • En respuesta a la solicitud de la víctima, el servidor IPP del atacante devuelve un archivo PPD con atributos, entre los cuales se indica el atributo FoomaticRIPCommandLine. Este atributo se adjunta a uno de los atributos permitidos, utilizando el símbolo «\n» en una línea (por ejemplo, «cupsPrivacyURI: "https://www.google.com/\n*FoomaticRIPCommandLine: " ), lo que permite eludir la verificación y resulta en que FoomaticRIPCommandLine se registre como un atributo separado al guardar los datos recibidos en un archivo temporal.
  • Como resultado del procesamiento de los atributos transmitidos en el sistema de la víctima, se crea un archivo PPD: … *cupsSNMPSupplies: False *cupsLanguages: "es" *cupsPrivacyURI: "https://www.google.com/" *FoomaticRIPCommandLine: "echo 1 > /tmp/I_AM_VULNERABLE" *cupsFilter2 : "application/pdf application/vnd.cups-postscript 0 foomatic-rip" *cupsSingleFile: True *cupsFilter2: "application/vnd.cups-pdf application/pdf 0 -" …
  • Al enviar la impresión a la impresora sustituida por el atacante en el sistema de la víctima, se ejecutará el comando "echo 1 > /tmp/I_AM_VULNERABLE".

El investigador que descubrió las vulnerabilidades señala que le tomó un par de días encontrar la vulnerabilidad, pero luego siguió un extenso intercambio de 22 días con los desarrolladores del proyecto OpenPrinting intentando convencerles de la importancia del problema y la necesidad de preparar parches. La discusión se enredó en debates sobre si debería corregirse realmente los problemas mencionados, y la situación solo se logró cambiar al generar un alboroto público sobre la identificación del problema crítico. También es interesante la aparición de la filtración de información, en la que el informe confidencial y el exploit entregados a CERT aparecieron en el foro breachforums.st de acceso público, a pesar de que se había impuesto un embargo sobre la divulgación de información.

Fuente: opennet.ru

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster