Desbordamiento de tazas: cuando la impresora derrama más de tinta

Elastic Security Labs analiza las estrategias de detección y mitigación de vulnerabilidades en el sistema de impresión CUPS, que permiten a los atacantes no autenticados explotar el sistema a través de IPP y mDNS, lo que resulta en la ejecución remota de código (RCE) en sistemas basados en UNIX, como Linux, macOS, BSDs, ChromeOS y Solaris.

Desbordamiento: cuando tu impresora derrama más que tinta

Update October 2, 2024

The following packages introduced out-of-the-box (OOTB) rules to detect the exploitation of these vulnerabilities. Please check your "Prebuilt Security Detection Rules" integration versions or visit the Downloadable rule updates site.

  • Stack Version 8.15 - Package Version 8.15.6+
  • Stack Version 8.14 - Package Version 8.14.12+
  • Stack Version 8.13 - Package Version 8.13.18+
  • Stack Version 8.12 - Package Version 8.12.23+

Conclusiones clave

  • On September 26, 2024, security researcher Simone Margaritelli (@evilsocket) disclosed multiple vulnerabilities affecting the cups-browsed, libscupsfilters, and libppd components of the CUPS printing system, impacting versions <= 2.0.1.
  • Las vulnerabilidades permiten que un atacante remoto no autenticado explote el sistema de impresión a través de IPP (Protocolo de impresión de Internet) y mDNS para lograr la ejecución remota de código (RCE) en los sistemas afectados.
  • El ataque puede iniciar a través de la red pública de Internet o local, apuntando al puerto UDP 631 expuesto por cups-browsed sin ningún requisito de autenticación.
  • La cadena de vulnerabilidades incluye el filtro foomatic-rip , que permite la ejecución de comandos arbitrarios a través de la directiva FoomaticRIPCommandLine , un problema conocido (CVE-2011-2697, CVE-2011-2964) pero sin parches desde 2011.
  • Los sistemas afectados incluyen la mayoría de las distribuciones GNU/Linux, BSD, ChromeOS y Solaris, muchos de los cuales tienen el servicio cups-browsed habilitado de forma predeterminada.
  • Por el título de la publicación, "Atacando sistemas UNIX a través de CUPS, Parte I", Margaritelli probablemente espera publicar más investigaciones sobre el tema.
  • Elastic proporcionó protecciones y orientación para ayudar a las organizaciones a detectar y mitigar la posible explotación de estas vulnerabilidades.

El CUPS RCE de un vistazo

On September 26, 2024, security researcher Simone Margaritelli (@evilsocket) uncovered a chain of critical vulnerabilities in the CUPS (Common Unix Printing System) utilities, specifically in components like cups-browsed, libcupsfilters, and libppd. These vulnerabilities — identified as CVE-2024-47176, CVE-2024-47076, CVE-2024-47175, and CVE-2024-47177 — affect widely adopted UNIX systems such as GNU/Linux, BSDs, ChromeOS, and Solaris, exposing them to remote code execution (RCE).

En el centro del problema se encuentra la falta de validación de entrada en los componentes CUPS, lo que permite a los atacantes explotar el Protocolo de impresión de Internet (IPP). Los atacantes pueden enviar paquetes maliciosos al puerto UDP del objetivo 631 a través de Internet (WAN) o falsificar anuncios DNS-SD/mDNS dentro de una red local (LAN), lo que obliga al sistema vulnerable a conectarse a un servidor IPP malicioso.

Para contextualizar, el IPP es un protocolo de capa de aplicación que se emplea para enviar y recibir trabajos de impresión a través de la red. Estas comunicaciones incluyen el envío de información sobre el estado de la impresora (atascos de papel, poca tinta, etc.) y el estado de los trabajos. IPP es compatible con todos los principales sistemas operativos, incluidos Windows, macOS y Linux. Cuando una impresora está disponible, la impresora transmite (a través de DNS) un mensaje que indica que la impresora está lista, incluido su identificador uniforme de recursos (URI). Cuando las estaciones de trabajo Linux reciben este mensaje, muchas configuraciones predeterminadas de Linux agregarán y registrarán automáticamente la impresora para su uso dentro del sistema operativo. Como tal, la impresora maliciosa en este caso se registrará automáticamente y estará disponible para los trabajos de impresión.

Al conectarse, el servidor malicioso devuelve atributos IPP creados que se inyectan en archivos PostScript Printer Description (PPD), que CUPS emplea para describir las propiedades de la impresora. Estos archivos PPD manipulados permiten al atacante ejecutar comandos arbitrarios cuando se activa un trabajo de impresión.

Una de las principales vulnerabilidades en esta cadena es el filtro foomatic-rip , que se sabe que permite la ejecución de comandos arbitrarios a través de la directiva FoomaticRIPCommandLine. A pesar de ser vulnerable durante más de una década, sigue sin parchearse en muchas implementaciones modernas de CUPS, lo que agrava aún más el riesgo.

Si bien estas vulnerabilidades son muy críticas con un puntaje CVSS de hasta 9,9, se pueden mitigar desactivando cups-browsed, bloqueando el puerto UDP 631 y actualizando CUPS a una versión parcheada. Muchos sistemas UNIX tienen este servicio habilitado de forma predeterminada, lo que hace que este sea un problema urgente para las organizaciones afectadas.

Análisis de POC de Elastic

Los ingenieros de investigación de amenazas de Elastic localizaron inicialmente la prueba de concepto original escrita por @evilsocket, que se filtró. Sin embargo, elegimos emplear la prueba de concepto (PoC) de cupshax en función de su capacidad para ejecutar localmente.

Para empezar, la PoC hizo uso de una clase personalizada de Python que se encargó de crear y registrar el servicio de impresora falsa en la red empleando mDNS/ZeroConf. Esto se logra principalmente mediante la creación de una entrada de servicio ZeroConf para la impresora falsa del Protocolo de impresión de Internet (IPP).

Tras la ejecución, la PoC emite un anuncio falso de la impresora y escucha las solicitudes de IPP. Cuando un sistema vulnerable ve la transmisión, la víctima aplicar automáticamente los atributos de la impresora de una URL proporcionada en el mensaje de transmisión. La PoC responde con atributos IPP, incluido el parámetro FoomaticRIPCommandLine, que es conocido por su historial de CVE. La víctima genera y almacena un archivo de descripción de impresora PostScript (PPD) a partir de estos atributos IPP.

En este punto, la ejecución continua requiere la interacción del usuario para iniciar un trabajo de impresión y elegir enviarlo a la impresora falsa. Una vez que se envía un trabajo de impresión, el archivo PPD le indica a CUPS cómo manejar el trabajo de impresión. La directiva FoomaticRIPCommandLine incluida permite la ejecución de comandos arbitrarios en la máquina víctima.

Durante nuestra revisión y prueba de los exploits con la PoC de Cupshax, identificamos varios obstáculos notables y detalles clave sobre estos procesos de ejecución y endpoints vulnerables.

Al ejecutar comandos arbitrarios para crear archivos, observamos que lp es el usuario y el grupo notificados para la ejecución de comandos arbitrarios, el grupo de impresión predeterminado en los sistemas Linux que emplean utilidades CUPS. Por lo tanto, la PoC/exploit de Cupshax requiere que tanto las vulnerabilidades de CUPS como el usuario lp tengan licencias suficientes para recuperar y ejecutar una carga útil maliciosa. De forma predeterminada, el usuario lp en muchos sistemas tendrá estas licencias para ejecutar cargas efectivas, como shells inversos; sin embargo, una mitigación alternativa es restringir lp de modo que estas cargas útiles sean ineficaces a través de controles nativos disponibles dentro de Linux, como las políticas de AppArmor o SELinux, junto con las políticas de aplicación de firewall o IPtables.

El usuario lp en muchas configuraciones predeterminadas tiene acceso a comandos que no son necesarios para el servicio de impresión, por ejemplo, telnet. Para reducir la superficie expuesta a ataques, se recomienda quitar los servicios innecesarios y agregarles restricciones cuando sea necesario para evitar que el usuario lp los use.

También tomamos nota de que los shells inversos interactivos no se admiten inmediatamente a través de esta técnica, ya que el usuario lp no tiene un shell de inicio de sesión; sin embargo, con algunas tácticas creativas, pudimos lograr esto con la PoC. Las PoC típicas prueban el exploit escribiendo un archivo en /tmp/, que es trivial de detectar en la mayoría de los casos. Tenga en cuenta que el usuario que escriba este archivo será lp por lo que habrá un comportamiento similar para los atacantes que descarguen y almacenen una carga útil en el disco.

Junto a estas observaciones, el proceso padre, foomatic-rip se observó en nuestra telemetría ejecutando un shell, lo cual es muy poco común

Ejecución de la POC 'Cupshax'

Para demostrar el impacto de estas vulnerabilidades, intentamos lograr dos escenarios diferentes: usar una carga útil para un shell inverso empleando técnicas de vivir de la tierra y recuperar y ejecutar una carga útil remota. Estas acciones suelen ser comunes para que los grupos adversarios intenten aprovechar una vez que se identifica un sistema vulnerable. Aunque está en sus inicios, no se observó una explotación generalizada, pero es probable que reproduzca algunos de los escenarios que se describen a continuación.

Nuestros primeros intentos de ejecutar la PoC de Cupshax se encontraron con un serial de obstáculos menores debido a los grupos de usuarios predeterminados asignados al usuario lp , es decir, restricciones en torno al inicio de sesión interactivo, un atributo común a los usuarios que requieren acceso remoto a los sistemas. Sin embargo, esto no afectó nuestra capacidad para descargar una carga útil, compilar y ejecutar una carga remota en el sistema host afectado:

Se realizaron pruebas continuas en torno a la invocación de shell inverso, que se demuestran con éxito a continuación:

Evaluación del impacto

  • Severidad: A estas vulnerabilidades se les otorgan puntajes CVSS de hasta 9,9, lo que indica una gravedad crítica. El uso generalizado de CUPS y la capacidad de explotar de forma remota estas vulnerabilidades hacen que este sea un problema de alto riesgo.
  • ¿A quién afecta?: La vulnerabilidad afecta a la mayoría de los sistemas basados en UNIX, incluidas las principales distribuciones de GNU/Linux y otros sistemas operativos como ChromeOS y BSD que ejecutan los componentes CUPS afectados. Los sistemas orientados al público o expuestos a la red corren un riesgo particular. Es probable que los proveedores proporcionen más orientación y notificaciones a medida que los parches estén disponibles, junto con más pasos de corrección. A pesar de que CUPS generalmente escucha en localhost, el Reporte Shodan destaca que más de 75,000 servicios de CUPS están expuestos en el Internet.
  • Daño potencial: Una vez explotado, los atacantes pueden obtener el control del sistema para ejecutar comandos arbitrarios. Dependiendo del entorno, esto puede conducir a la exfiltración de datos, la instalación de ransomware u otras acciones maliciosas. Los sistemas conectados a impresoras a través de WAN corren un riesgo especial, ya que los atacantes pueden aprovechar de ello sin necesidad de acceder a la red interna.

Soluciones

Como se destaca en @evilsocket, hay varias recomendaciones de remediación.

  • Deshabilite y desinstale el servicio cups-browsed . Por ejemplo, consulte las recomendaciones de Red Hat y Ubuntu.
  • Cerciorar de que sus paquetes CUPS estén actualizados a las últimas versiones disponibles para su distribución.
  • Si la actualización no es posible, bloquee el 631 de puerto UDP y el tráfico DNS-SD de los hosts potencialmente afectados e investigue las recomendaciones mencionadas anteriormente para endurecer aún más la configuración de usuarios y grupos lp en el host.

Protecciones elásticas

En esta sección, analizamos las consultas de detección y búsqueda diseñadas para descubrir actividades sospechosas relacionadas con las vulnerabilidades publicadas actualmente. Al centrar en los comportamientos de los procesos y los patrones de ejecución de comandos, estas consultas ayudan a identificar posibles intentos de explotación antes de que se conviertan en ataques en toda regla.

Ejecución de shell cupsd o foomatic-rip

La primera regla de detección se dirige a los procesos de los sistemas Linux generados por foomatic-rip e inmediatamente inicia un shell. Esto es eficaz porque los trabajos de impresión legítimos rara vez requieren la ejecución de shell, lo que convierte a este comportamiento en un fuerte indicador de actividad maliciosa. Nota: Un shell puede no ser siempre el objetivo de un adversario si es posible la ejecución de comandos arbitrarios.

process where host.os.type == "linux" and event.type == "start" and
 event.action == "exec" and process.parent.name == "foomatic-rip" and
 process.name in ("bash", "dash", "sh", "tcsh", "csh", "zsh", "ksh", "fish") 
 and not process.command_line like ("*/tmp/foomatic-*", "*-sDEVICE=ps2write*")

Esta consulta logró detectar todos 33 intentos de PoC que realizamos:

https://github.com/elastic/detection-rules/blob/a3e89a7fabe90a6f9ce02b58d5a948db8d231ee5/rules/linux/execution_cupsd_foomatic_rip_shell_execution.toml

Ejecución de shell de usuario de impresora (lp)

Esta regla de detección supone que el usuario de impresora predeterminado (lp) se encarga de los procesos de impresión. Al especificar este usuario, podemos reducir el alcance mientras ampliamos la lista de procesos principales para incluir cupsd. Aunque actualmente no hay indicios de que RCE pueda ser explotado a través de cupsd, no podemos descartar la posibilidad.

process where host.os.type == "linux" and event.type == "start" and
 event.action == "exec" and user.name == "lp" and
 process.parent.name in ("cupsd", "foomatic-rip", "bash", "dash", "sh", 
 "tcsh", "csh", "zsh", "ksh", "fish") and process.name in ("bash", "dash", 
 "sh", "tcsh", "csh", "zsh", "ksh", "fish") and not process.command_line 
 like ("*/tmp/foomatic-*", "*-sDEVICE=ps2write*")

Al centrarnos en el nombre de usuario lp, ampliamos el alcance y detectamos, como anteriormente, todas las ejecuciones de PoC 33 :

https://github.com/elastic/detection-rules/blob/a3e89a7fabe90a6f9ce02b58d5a948db8d231ee5/rules/linux/execution_cupsd_foomatic_rip_lp_user_execution.toml

Conexión de red por CUPS foomatic-rip child

Esta regla identifica las conexiones de red iniciadas por procesos secundarios de foomatic-rip, que es un comportamiento que levanta sospechas. Dado que las operaciones legítimas normalmente no implican que estos procesos establezcan conexiones salientes, cualquier actividad detectada debe examinar detenidamente. Si se esperan este tipo de comunicaciones en su entorno, cerciorar de que las direcciones IP de destino se excluyan correctamente para evitar alertas innecesarias.

sequence by host.id with maxspan=10s
  [process where host.os.type == "linux" and event.type == "start" 
   and event.action == "exec" and
   process.parent.name == "foomatic-rip" and
   process.name in ("bash", "dash", "sh", "tcsh", "csh", "zsh", "ksh", "fish")] 
   by process.entity_id
  [network where host.os.type == "linux" and event.type == "start" and 
   event.action == "connection_attempted"] by process.parent.entity_id

Al capturar la relación padre/hijo, nos cercioramos de que las conexiones de red se originen en la aplicación potencialmente comprometida.

https://github.com/elastic/detection-rules/blob/a3e89a7fabe90a6f9ce02b58d5a948db8d231ee5/rules/linux/command_and_control_cupsd_foomatic_rip_netcon.toml

Creación de archivos por CUPS foomatic-rip child

Esta regla detecta eventos sospechosos de creación de archivos iniciados por procesos hijos de foomatic-rip. Como todas las pruebas de concepto actuales tienen una carga útil de prueba predeterminada de escritura en un archivo en /tmp/, esta regla lo detectaría. Además, puede detectar escenarios en los que un atacante descarga una carga maliciosa y, posteriormente, crea un archivo.

sequence by host.id with maxspan=10s
  [process where host.os.type == "linux" and event.type == "start" and 
   event.action == "exec" and process.parent.name == "foomatic-rip" and 
   process.name in ("bash", "dash", "sh", "tcsh", "csh", "zsh", "ksh", "fish")] by process.entity_id
  [file where host.os.type == "linux" and event.type != "deletion" and
   not (process.name == "gs" and file.path like "/tmp/gs_*")] by process.parent.entity_id

La regla excluye /tmp/gs_* para tener en cuenta el comportamiento de cupsd predeterminado, pero para mejorar la seguridad, puede optar por quitar esta exclusión, teniendo en cuenta que puede generar más ruido en las alertas.

https://github.com/elastic/detection-rules/blob/a3e89a7fabe90a6f9ce02b58d5a948db8d231ee5/rules/linux/execution_cupsd_foomatic_rip_file_creation.toml

Ejecución sospechosa desde el padre foomatic-rip o cupsd

Esta regla detecta líneas de comandos sospechosas ejecutadas por procesos secundarios de foomatic-rip y cupsd. Se centra en la identificación de actividades potencialmente maliciosas, incluidos los mecanismos de persistencia, las descargas de archivos, las operaciones de codificación/decodificación, los shells inversos y la carga de objetos compartidos a través de go awayBins.

process where host.os.type == "linux" and event.type == "start" and 
 event.action == "exec" and process.parent.name in 
 ("foomatic-rip", "cupsd") and process.command_line like (
  // persistence
  "*cron*", "*/etc/rc.local*", "*/dev/tcp/*", "*/etc/init.d*", 
  "*/etc/update-motd.d*", "*/etc/sudoers*",
  "*/etc/profile*", "*autostart*", "*/etc/ssh*", "*/home/*/.ssh/*", 
  "*/root/.ssh*", "*~/.ssh/*", "*udev*", "*/etc/shadow*", "*/etc/passwd*",
    // Downloads
  "*curl*", "*wget*",

  // encoding and decoding
  "*base64 *", "*base32 *", "*xxd *", "*openssl*",

  // reverse connections
  "*GS_ARGS=*", "*/dev/tcp*", "*/dev/udp/*", "*import*pty*spawn*", "*import*subprocess*call*", "*TCPSocket.new*",
  "*TCPSocket.open*", "*io.popen*", "*os.execute*", "*fsockopen*", "*disown*", "*nohup*",

  // SO loads
  "*openssl*-engine*.so*", "*cdll.LoadLibrary*.so*", "*ruby*-e**Fiddle.dlopen*.so*", "*Fiddle.dlopen*.so*",
  "*cdll.LoadLibrary*.so*",

  // misc. suspicious command lines
   "*/etc/ld.so*", "*/dev/shm/*", "*/var/tmp*", "*echo*", "*>>*", "*|*"
)

Al hacer una excepción de las líneas de comandos como hicimos en la regla anterior, podemos ampliar el alcance para detectar también el cupsd padre, sin temor a falsos positivos.

https://github.com/elastic/detection-rules/blob/a3e89a7fabe90a6f9ce02b58d5a948db8d231ee5/rules/linux/execution_cupsd_foomatic_rip_suspicious_child_execution.toml

Descubrimiento de ataques de Elastic

Además del contenido prediseñado publicado, el Attack Discovery de Elastic puede proporcionar contexto e información mediante el análisis de alertas en tu entorno y la identificación de amenazas mediante el aprovechamiento de modelos de lenguaje grandes (LLM). En el siguiente ejemplo, Detección de ataques proporciona un breve resumen y una escala de tiempo de la actividad. A continuación, los comportamientos se asignan a una cadena de ataque para resaltar las etapas afectadas y ayudar a clasificar las alertas.

Conclusión

La reciente divulgación de la vulnerabilidad de CUPS pone de manifiesto la evolución del panorama de amenazas, lo que subraya la importancia de proteger servicios como la impresión. Con un alto puntaje CVSS, este problema requiere una acción inmediata, especialmente dada la facilidad con la que estos fallos se pueden explotar de forma remota. Aunque el servicio se instala de forma predeterminada en algunos sistemas operativos UNIX (basados en la cadena de suministro), es necesaria la interacción manual del usuario para desencadenar el trabajo de impresora. Recomendamos que los usuarios permanezcan atentos, continúen cazando y no subestimen el riesgo. Si bien la amenaza requiere la interacción del usuario, si se combina con un documento de spear phishing, puede obligar a las víctimas a imprimir con la impresora maliciosa. O peor aún, reemplazar silenciosamente las impresoras existentes o instalar otras nuevas según lo indicado por @evilsocket.

Esperamos que se revele más, ya que la divulgación inicial se etiquetó como parte 1. En última instancia, las capacidades de visibilidad y detección siguen estando a la vanguardia de las estrategias defensivas para estos sistemas, lo que garantiza que los atacantes no puedan explotar las vulnerabilidades pasadas por alto.

Referencias clave

El lanzamiento y el momento de cualquier característica o funcionalidad descrita en esta publicación quedan a discreción exclusiva de Elastic. Es posible que cualquier característica o funcionalidad que no esté disponible en este momento no se lance a tiempo o no se lance en absoluto.