Vulnerabilidades en CUPS permiten ejecución remota de código en sistemas Linux
Vulnerabilidades en CUPS permiten ejecución remota de código en sistemas Linux

Vulnerabilidades en CUPS permiten ejecución remota de código en sistemas Linux

El investigador de seguridad Simone Margaritelli, conocido como @evilsocket, ha identificado una vulnerabilidad crítica que afecta a todos los sistemas GNU/Linux y potencialmente a otros. La vulnerabilidad permite la ejecución remota de código (RCE) no autenticada y ha sido reconocida por empresas como Canonical y Red Hat, quienes han confirmado su gravedad con una puntuación CVSS de 9,9 sobre 10.

Divulgación controlada

Margaritelli reveló la existencia de la vulnerabilidad hace aproximadamente tres semanas, pero ocultó detalles específicos para dar tiempo a los desarrolladores. A pesar de esto, actualmente no hay ninguna solución funcional disponible.

Las discusiones entre el investigador y los desarrolladores han llevado a un cronograma acordado para la divulgación:

  • 30 de septiembre: divulgación inicial a la lista de correo de seguridad de Openwall.
  • 6 de octubre: divulgación pública completa de los detalles de la vulnerabilidad.

Curiosamente, ha habido un retraso en la asignación de identificadores de vulnerabilidades y exposiciones comunes (CVE) a este problema. Margaritelli sugiere que se deberían asignar al menos tres CVE, posiblemente hasta seis, debido a la naturaleza multifacética de las vulnerabilidades involucradas.

Impacto en sistemas Linux

CUPS (Common UNIX Printing System) es el sistema de impresión más utilizado en sistemas Linux y compatible con dispositivos que ejecutan sistemas operativos similares a Unix, como FreeBSD, NetBSD y OpenBSD. Bajo ciertas condiciones, los atacantes pueden encadenar un conjunto de vulnerabilidades en múltiples componentes del sistema de impresión CUPS para ejecutar código arbitrario de forma remota en máquinas vulnerables.

Identificados como CVE-2024-47076 (libcupsfilters), CVE-2024-47175 (libppd), CVE-2024-47176 (cups-browsed) y CVE-2024-47177 (cups-filters), estos fallos de seguridad no afectan a los sistemas en su configuración predeterminada.

Uno de sus componentes es el demonio de navegación de CUPS, que busca impresoras compartidas en la red. Margaritelli descubrió que si el demonio de navegación está habilitado, lo cual no está en la mayoría de los sistemas, este escucha en el puerto UDP 631 y permitirá conexiones remotas desde cualquier dispositivo en la red para crear una nueva impresora.

Margaritelli descubrió que podía crear una impresora PostScript Printer Description (PPD) maliciosa que podía anunciarse manualmente en un servicio de navegación de CUPS expuesto en el puerto UDP 631. Esto hace que la máquina remota instale automáticamente la impresora maliciosa y la ponga a disposición. Si el usuario de ese servidor expuesto imprime en la nueva impresora, el comando malicioso en el PPD se ejecutará localmente en la computadora.

El comando a ejecutar al imprimir se agrega a través del filtro foomatic-rip, que ejecuta comandos en un dispositivo para que un trabajo de impresión se represente correctamente.

Condiciones y mitigaciones

La primera condición es que los sistemas de destino deben tener habilitado el demonio explorado por CUPS, que generalmente no está habilitado de manera predeterminada. Luego, el atacante tiene que engañar al usuario para que imprima desde un servidor de impresora maliciosa en su red local que aparece de repente en su máquina.

Red Hat ha calificado las fallas como de impacto «Importante» en lugar de crítica. RHEL, en un aviso, dijo que todas las versiones del sistema operativo se ven afectadas por las cuatro fallas, pero señaló que no son vulnerables en su configuración predeterminada.

Por ahora no hay parche, pero hay medidas de mitigación disponibles:

  • sudo systemctl stop cups-browsed
  • sudo systemctl disable cups-browsy
  • sudo systemctl status cups-browsed

Los usuarios de Red Hat también pueden usar el siguiente comando para saber si cups-browsed se está ejecutando en sus sistemas:

Si el resultado muestra «Active: inactive (dead)», entonces la cadena de explotación se detiene y el sistema no es vulnerable. Si el resultado muestra «running» o «enabled» y la directiva «rowseRemoteProtocols» contiene el valor «cups» en el archivo de configuración /etc/cups/cups-browsed.conf, entonces el sistema es vulnerable.

Rapid7 señaló que los sistemas afectados son explotables, ya sea desde Internet pública o a través de segmentos de red, solo si se puede acceder al puerto UDP 631 y el servicio vulnerable está escuchando.