Ataque a la cadena de suministro en Linux: A fuego lento

3 de abril de 2024

Introducción

La importancia de los ataques a la cadena de suministro continúa su tendencia creciente. Sabemos que los atacantes siempre buscan al eslabón más débil de la cadena como objetivo para iniciar sus ataques. En el caso que expondremos en este artículo una librería open source mantenida durante mucho tiempo por un único desarrollador fue el objeto de un premeditado y largo, acoso y derribo.

Allá por 2018 ya publicamos un artículo en este mismo blog sobre la frustración del mantenedor de open source como vector de ataque, a la vista de lo acontecido en el conocido caso de Log4Shell a finales de 2021 y en este mismo marzo podemos concluir que la vigencia de este riesgo sigue sin resolverse.

Todo esto debería hacer reflexionar al ecosistema tecnológico global sobre la validez, eficacia e insuficiente cobertura de las iniciativas gubernamentales, de fundaciones como Linux Foundation y de las grandes tecnológicas creadas para paliar los escasos recursos de los que disponen los desarrolladores de algunas de las librerías core de código abierto ampliamente usadas por los sistemas operativos.

¿Qué ha ocurrido?

Este pasado 29 de marzo Andres Freund (un desarrollador de Microsoft) investigando un comportamiento inusual de consumo de CPU en sus pruebas fallidas de acceso SSH, descubrió “de forma casual” un mecanismo de puerta trasera en xz utils, una librería que soporta compresión sin pérdida. La librería es extremadamente popular y se usa en la mayoría de las principales distribuciones de Linux y en un montón de aplicaciones de Linux y macOS.

Meme descriptivo de la cadena de acontecimientos tras el descubrimiento

Oficialmente denominado CVE-2024-3094, tiene la puntuación CVSS más alta posible de 10 sobre 10 (al igual que la tuvo Log4Shell). En el CVE Red Hat informa que el código malicioso modifica funciones dentro de liblzma, que forma parte del paquete xz utils.

De no ser por esta detección temprana, que ha impedido que las distribuciones de Linux incluyesen esta librería envenenada en sus distribuciones estables de producción, este código podría haber representado una amenaza muy grave para Linux ya que podría haber comprometido la autenticación por ssh en millones de servidores a nivel global.

¿Qué permitía hacer dicha puerta trasera?

La puerta trasera presumiblemente (ya que se sigue investigando activamente su alcance) intercepta las operaciones de descifrado de claves RSA SSH, que son redirigidas al código de la puerta trasera.

Esto permitiría al atacante manipular la operación de autenticación SSH y ejecutar código en sistemas remotos si usan la librería atacada. Probablemente también se añadió la funcionalidad de llave maestra para permitir a los atacantes acceder a todos los servidores afectados a voluntad.

El código de la puerta trasera se encontró en las versiones 5.6.0 y 5.6.1 de xz utils.

La puerta trasera estuvo activa durante aproximadamente un mes antes de su detección.

¿Por qué nadie más detectó la puerta trasera?

Mientras que Jia Tan (el usuario atacante) agregó algo de código al proyecto xz utils, la mayor parte nunca se agregó al repositorio de GitHub del proyecto. La puerta trasera real residía en los tarballs de xz utils. Estos son archivos tar que se generan automáticamente cada vez que los desarrolladores lanzan una nueva versión de una librería.

Los proyectos de software de terceros no suelen, por simplicidad, tirar del código fuente y compilar todo el proyecto, simplemente extraen el tarball. Jia Tan modificó líneas en la configuración del tarball para cargar la puerta trasera, que estaba oculta en archivos de datos de prueba binarios.

Los desarrolladores generalmente auditan el código fuente, pensando, erróneamente, que los tarballs reflejan perfectamente el código.

En realidad, se pueden manipular tarballs y otros archivos de las releases de Software con bastante facilidad, y otros actores de amenazas lo han hecho en el pasado. De hecho, algunos miembros de la comunidad de desarrolladores están llamando a la eliminación de tarballs generados automáticamente y otros archivos potencialmente vulnerables de las releases de los proyectos.

A fuego lento

Lo que hace más especial a este ataque, en nuestra opinión, es la manera en la que se fraguó y la extrema planificación y paciencia con la que se ejecutó el ataque.

Al parecer, inicialmente el atacante identificó que xz utils era de forma efectiva una dependencia de OpenSSH. Siendo OpenSSH una herramienta crítica de administración remota utilizada en servidores por todo el mundo.

Esta dependencia no existía debido a una decisión de diseño de los desarrolladores de OpenSSH, sino por un parche añadido por algunas distribuciones de Linux para integrar la herramienta con el nuevo servicio de orquestación del sistema operativo, systemd.

Armado con ese conocimiento sobre xz, el supuesto atacante en cuestión se inventó la persona de Jia Tan, un desarrollador sin historial previo que apareció de la nada en octubre de 2021 y comenzó a hacer contribuciones útiles a xz utils.

Desde 2009 hasta ese momento, xz tenía un único mantenedor no remunerado, Lasse Collin, quien estaba lidiando con problemas de salud y estaba rezagado en las tareas de mantenimiento. Poco después de la llegada de Jia, varias cuentas, posiblemente de títeres de apoyo al propio atacante, comenzaron a presionar a Lasse para que pasara el relevo: parece que cedió en algún momento de 2023.

Desde entonces, Jia continuó con eficacia el trabajo de mantenimiento, perpetrando finalmente su ataque en febrero de 2024 con la introducción de una puerta trasera sofisticada y bien oculta dentro de uno de los scripts de construcción de la librería.

Algún tiempo después de insertar la puerta trasera, Jia, junto con un nuevo elenco de cuentas de títeres, comenzó a contactar a los mantenedores de las distribuciones de Linux para que empaquetaran y distribuyeran la biblioteca comprometida a los usuarios finales.

Conclusiones

Si revisamos detenidamente los acontecimientos podemos concluir que, claramente, no es el modus operandi de un aficionado. Hoy en día, si tienes la capacidad técnica y la paciencia para llevar esto a cabo, puedes conseguir fácilmente un trabajo estable que te mantenga de por vida sin arriesgarte a pasar tiempo en prisión.

En otras palabras, todo indica que esto fue una operación profesional bien pagada, y no sería sorprendente si fuera financiada por un actor estatal.

La puerta trasera de xz no es un problema meramente técnico y probablemente no se pueda resolver solo con tecnología. En gran medida, es un desafío de contrainteligencia, directamente dentro de las competencias de los gobiernos y un puñado de gigantes comerciales tecnológicos con capacidades de vigilancia a nivel de ecosistema global.

Afortunadamente, en esta ocasión, parece que esas versiones afectadas no fueron incorporadas en ninguna versión de producción para las principales distribuciones de Linux, pero es una llamada desesperada de atención:

“Si no se hubiera descubierto, habría sido catastrófico para el mundo tecnológico”

Para finalizar rescatamos el mítico meme Dependency de XKCD sobre la realidad de la construcción del software moderno que debe ser tomada muy en serio si se quiere atajar el problema raíz.

Dependency de XKCD
Riesgo de terceros: la amenaza oculta para tu negocio
Ciberseguridad
Riesgo de terceros: la amenaza oculta para tu negocio
13 de noviembre de 2023