Fondo
Ayer, 26 de septiembre, tras una gran expectación y un espectacular revuelo en las redes sociales, se revelaron una serie de vulnerabilidades en Common Unix Printing Service (CUPS), una utilidad de impresión muy utilizada en muchas distribuciones de Linux (en concreto en éstas, según el informe original del investigador).
Estas vulnerabilidades se resumen a continuación:
ID CVE |
Gravedad |
Servicio afectado |
Descripción |
CVE-2024-47176 |
8.3 |
cups-browsed <= 2.0.1 |
Se vincula a UDP INADDR_ANY:631 confiando en cualquier paquete de cualquier origen para activar una solicitud IPP Get-Printer-Attributes a una URL controlada por el atacante. |
CVE-2024-47076 |
8.6 |
libcupsfilters <= 2.1b1 |
cfGetPrinterAttributes5 no valida ni sanea los atributos IPP devueltos desde un servidor IPP, proporcionando datos controlados por atacantes al resto del sistema CUPS. |
CVE-2024-47175 |
8.6 |
libppd <= 2.1b1 |
ppdCreatePPDFromIPP2 no valida ni sanea los atributos IPP al escribirlos en un archivo PPD temporal, lo que permite la inyección de datos controlados por atacantes en el PPD resultante. |
CVE-2024-47177 |
9.0 |
cups-filters <= 2.0.1 |
foomatic-rip permite la ejecución arbitraria de comandos a través del parámetro PPD FoomaticRIPCommandLine. |
Fuente: https://www.evilsocket.net/2024/09/26/Attacking-UNIX-systems-via-CUPS-Part-I/#Summary
La más bulliciosa de estas vulnerabilidades es CVE-2024-47176, que afecta a cups-browsed. Tras un debate en el foro de seguridad de Red Hat, inicialmente se asoció extraoficialmente con una puntuación CVSS de 9,9, pero GitHub le asignó recientemente una puntuación de 8,3 (Alta).
Comprender CUPS e IPP
CUPS se encuentra en muchos sistemas Linux y otros sistemas Unix para gestionar trabajos y colas de impresión. Se utiliza junto con el Protocolo de Impresión de Internet (IPP) para la comunicación en red entre ordenadores e impresoras. IPP fue diseñado para permitir a los dispositivos descubrir impresoras y gestionar trabajos de impresión a través de una red. Según RFC8011, este protocolo se ejecuta a través de TCP y se le ha asignado el puerto 631.
En tándem con IPP, el servicio cups-browsed descubre nuevas impresoras en la red a través de broadcast, unicast (gracias al UDP listener) y mDNS para que las impresoras aparezcan automáticamente ante los clientes.
Este servicio vinculado no es IPP; es un protocolo completamente diferente, el CUPS Browse Protocol. Debe tenerse en cuenta que la comunicación a través de este protocolo usando unicast es unidireccional, lo que significa que puedes enviarle datos, pero nunca recibirás datos de vuelta. Este hecho hace que el escaneo de este servicio sea casi imposible, ya que no hay datos de retorno, y se ejecuta sobre UDP, y más a menudo que no, los mensajes ICMP de puerto inalcanzable (que es como algunos escáneres determinan si hay un servicio UDP remoto escuchando) se filtran en el borde o en el host.
El primer CVE de la cadena es CVE-2024-47176, que afirma que el servicio cups-browsed se enlaza en INADDR_ANY (lo que significa que se enlaza a todas las interfaces de red) en el puerto UDP 631. Esto básicamente permite a cualquier usuario remoto comunicarse con el servicio subyacente.
Un usuario malicioso podría enviar un paquete especialmente diseñado que informe a este servidor "navegado" de que hay una impresora IPP (TCP) localizada en Internet. A continuación, el proceso intenta conectarse a ese servidor remoto (utilizando IPP a través de TCP); una vez establecido, ese servidor malicioso podría enviar de vuelta un conjunto de configuraciones y descripciones de impresora PostScript (PPD) que pueden provocar que el servidor víctima ejecute comandos arbitrarios después de que se haya puesto en cola un trabajo de impresión.
NOTA: Este exploit requiere que la víctima seleccione y utilice manualmente el servidor de impresión malicioso.
Esto no importa para los servidores que no ejecutan o exponen CUPS públicamente. Sin embargo, si un host expone un servicio CUPS afectado a la Internet pública, un actor de amenazas remoto puede enviar un paquete UDP malicioso al puerto 631 sin necesidad de autenticación, lo que desencadenará que el servicio CUPS se conecte de nuevo a un servidor malicioso a través de TCP.
Además, la misma inyección de servidor se puede hacer a través de mDNS si CUPS ha sido configurado para ello.
¿De qué debe preocuparse?
Factores que mitigan el riesgo:
- Si CUPS se instaló involuntariamente en un servidor pero nunca se utiliza realmente para imprimir, entonces es poco probable que esto tenga un impacto directo, ya que requiere que una persona envíe un trabajo de impresión a la cola de impresión maliciosa. Sin embargo, si crees que puedes haber sido afectado, ejecuta el comando lpstat -a y obtendrás una lista de todas las impresoras conocidas en el servidor local. Si alguna de las entradas parece extraña o sospechosa, lo más probable es que alguien haya atacado su servidor. No intente imprimir en ese servidor sospechoso.
- Este exploit requiere la interacción del usuario (debe activarse un trabajo de impresión a la impresora maliciosa) para conducir a RCE. Dado este hecho, es más probable que esta vulnerabilidad se utilice para moverse lateralmente dentro de una red:
- El atacante inyecta un servidor de impresión malicioso
- El atacante ejecuta $ echo nop | lpr -P $MALICIOUS_PRINTER_NAME
Factores que acentúan el riesgo:
Censys Perspectiva
Censys revelan que hay 63.096 servicios CUPS IPP expuestos ejecutándose en la Internet pública. Tenga en cuenta que no puede determinar si se está ejecutando el protocolo Browse a menos que envíe el exploit real y haga que el servicio se conecte de vuelta a través de TCP.
De ellos, 7.289 muestran indicios de ejecutar una versión afectada por estos CVE (versiones = 2.0.1). Tenga en cuenta que los distintos escáneres cuentan los servicios afectados de forma diferente. Para los propósitos de este post, estamos tratando TCP/631 (IPP) como un proxy para la exposición potencial UDP/631.
Map of Publicly Exposed CUPS services running a version <= 2.0.1.
Tenga en cuenta que no todos estos servicios están necesariamente ejecutando el demonio cups-browsed afectado, y de nuevo, un trabajo de impresión debe ser lanzado en la máquina de destino a la impresora maliciosa para que el exploit tenga éxito.
País |
Recuento de anfitriones |
Estados Unidos |
2230 |
Corea del Sur |
567 |
Taiwán |
522 |
Francia |
343 |
Alemania |
207 |
Japón |
204 |
Italia |
183 |
Hong Kong |
178 |
Reino Unido |
174 |
Polonia |
172 |
¿Qué se puede hacer?
Exponer un servicio CUPS a la Internet pública no es aconsejable a menos que sea absolutamente necesario para su funcionamiento. Aún no hay parches disponibles para esta vulnerabilidad, por lo que mientras tanto se recomienda deshabilitar el servicio cups-browsed ejecutando los siguientes comandos en su servidor:
systemctl detener cups-browsed
systemctl disable cups-browsed
Además, se recomienda bloquear el tráfico a 631/UDP, aunque tenga en cuenta que esto no mitiga el riesgo de explotación de la red local a través de mDNS o los otros canales mencionados anteriormente.
Referencias