¡El cielo se está cayendo! (otra vez)
Ya hemos pasado por esto, ¿verdad? Cada dos semanas, una nueva vulnerabilidad con una puntuación CVSS por las nubes provoca un frenesí. Esta vez, se trata de una vulnerabilidad CVSS de 9,9 que se anunciaba como un regalo para los hackers: un exploit remoto que supuestamente dejaría indefensos a todos los sistemas Linux. El anuncio de la vulnerabilidad vino acompañado del habitual drama previo al lanzamiento (la fecha del anuncio se hizo pública con antelación), lo que llevó la especulación a un punto álgido. Pero cuando llegó el día D, resultó que... bueno, no era la catástrofe que la gente temía.
Entonces, ¿qué pasa con el demonio CUPS, la cadena de vulnerabilidades y por qué una puntuación de 9,9 no siempre significa que estás condenado?
La vulnerabilidad: Una cadena de infortunios
En primer lugar, no se trata de una única vulnerabilidad. Se trata de una cadena de problemas (CVE-2024-47076, CVE-2024-47175, CVE-2024-47176, CVE-2024-47177), todos ellos relacionados con el demonio de impresión CUPS. CUPS (Common UNIX Printing System) es el venerable servicio que ha manejado la impresión en Linux durante décadas, asegurándose de que su sistema pueda descubrir e interactuar con impresoras de red sin esfuerzo. Si alguna vez te ha sorprendido cómo una nueva instalación de Linux muestra "mágicamente" las impresoras cercanas, debes agradecérselo a CUPS.
Aunque la impresión siempre ha sido notoriamente dolorosa, Linux, gracias a CUPS, ha hecho que sea un poco menos dolor de cabeza. Pero esta comodidad tiene un coste. Una de las formas en que CUPS funciona tan bien es confiando en los dispositivos que se identifican como impresoras en la red - sin darles un sondeo profundo. A principios de la década de 2000, esto podría haber estado bien, pero mirándolo desde la perspectiva de 2024, es un riesgo de seguridad obvio. Si CUPS acepta todos los dispositivos sin cuestionarlos, ¿qué pasa si alguien falsifica una impresora?
Lo ha adivinado: CUPS la aceptará encantado. Tanto si la impresora falsa está en la misma red como si está al otro lado del mundo, mientras un paquete UDP manipulado llegue al puerto abierto del demonio CUPS (UDP 631), aparecerá como una impresora válida. Y aquí es donde empieza la diversión.
Este es el quid de la cuestión: a través de esta impresora falsa, un atacante puede ejecutar código como root en un sistema vulnerable aprovechando la forma en que CUPS interactúa con los dispositivos. La "impresora" controlada por el atacante puede enviar datos cuidadosamente diseñados para engañar al sistema para que ejecute código malicioso con privilegios elevados, ya que CUPS se ejecuta con acceso de nivel raíz.
¡El cielo se está cayendo! (¿O no?)
Sí, la vulnerabilidad es explotable remotamente. Pero no, no es el escenario catastrófico que muchos hicieron parecer. ¿Cuál es la razón? La mayoría de los sistemas de servidor Linux ni siquiera tienen CUPS ejecutándose por defecto. Aunque es una parte habitual de los entornos Linux de escritorio, esos sistemas no suelen estar expuestos directamente a Internet. Ahora, no estoy diciendo que no haya algunos demonios CUPS colgando por ahí, esperando a ser explotados. Una rápida búsqueda en Internet el día de la revelación de la vulnerabilidad reveló decenas de miles de instancias de CUPS expuestas. Pero, en la mayoría de los entornos, esto no es una amenaza inmediata o realista.
Hay otra advertencia importante: la cadena de exploits no se activa sólo con que aparezca una impresora falsa. Alguien tiene que intentar imprimir algo en ella para que el ataque tenga éxito. Sin esa interacción, no es más que una "impresora" aleatoria en la red. Pero, como escribió sabiamente Terry Pratchett, "Si pones un gran interruptor en alguna cueva, con un cartel que diga 'Interruptor del fin del mundo. POR FAVOR NO TOCAR', la pintura ni siquiera tendría tiempo de secarse".
¿Por qué la puntuación de 9,9?
Entonces, ¿por qué la aterradora puntuación de 9,9? Es una combinación de factores. Cuando los expertos en seguridad oyen las palabras "ejecución remota de código", tienden a asumir lo peor e inflar la puntuación por precaución. Además, el proceso de puntuación CVSS es, a veces, un poco como una caja negra, con puntuaciones que varían dependiendo de la distribución o el proveedor. Por ejemplo, algunas distribuciones puntuaron esta vulnerabilidad con un 9,1, mientras que otras lo hicieron con un 9,9, y otras simplemente decidieron que algún otro número (aleatorio) era bueno. La discrepancia no radica en la gravedad de los fallos reales (son los mismos en todas las distribuciones), sino en los juicios subjetivos sobre lo expuesto que puede estar un sistema típico.
Y seamos realistas: La puntuación CVE no siempre es tan científica como parece. A veces, está influenciada por el ruido que se espera que genere una vulnerabilidad, o incluso por intereses organizativos. El hecho de que nosotros, como industria, basemos gran parte de nuestra gestión de riesgos en estos números es un defecto sistémico.
¿Debería preocuparse?
En la mayoría de los casos, no. Si estás en un servidor, probablemente no tengas CUPS funcionando. Si estás en un sistema de escritorio, no deberías estar exponiendo CUPS a Internet en primer lugar. En cualquier caso, el bloqueo del puerto UDP 631 detendrá el problema en seco. Alternativamente, puedes desactivar CUPS si tus sistemas no necesitan capacidades de impresión. Y, por supuesto, aplicar los parches tan pronto como estén disponibles.
Merece la pena señalar que no se trata tanto de un fallo como de una "función" diseñada en una época más inocente. A medida que los investigadores de seguridad sigan investigando sistemas heredados como CUPS, es de esperar que aparezcan más fallos extravagantes como este.