La semana pasada, Andres Freund —un desarrollador alemán de 38 años que trabaja para Microsoft— decidió probar en su ordenador las últimas versiones de algunas librerías de Linux. Un auténtico tostón para la mayoría de los mortales, pero rutinario para Andres, uno de los principales contribuidores de la base de datos open source Postgres.
Pero los resultados de esas pruebas fueron todo menos rutinarios. Andres observó que el proceso SSH —con el que se puede acceder y ejecutar comandos en una máquina de forma remota— estaba tardando medio segundo más en ejecutarse. Medio.
Muchos técnicos habríamos obviado ese pequeño detalle —hace mucho tiempo que los ordenadores alcanzaron tal nivel de potencia como para que pudiéramos dejar de prestar atención a la optimización de nuestro código y concentrarnos en «cosas más importantes», como añadir capa de abstracción tras capa de abstracción hasta alejar por completo ese código del hardware que lo ejecuta—, pero no Andres, un auténtico oldskooler para el que medio segundo más de tiempo de procesamiento es una auténtica eternidad.
Andres recordó que, durante el vuelo de vuelta a casa después de visitar a sus padres por Navidad, encontró unos cuantos mensajes de error de SSH que no reconocía en un registro de pruebas automatizadas. En ese momento no le dio importancia, pero ahora tenía curiosidad por ver si estaban relacionados con esa bajada de rendimiento.
Trazó el origen de los mismos a las últimas actualizaciones de XZ Utils, una librería de compresión de datos que poco o nada tiene que ver con SSH. Al bucear en el código de esas actualizaciones, descubrió un código malicioso que instalaba una «puerta trasera» y permitía a su creador usar el mecanismo de autenticación de SSH para ejecutar cualquier programa en la máquina infectada sin ninguna restricción.
Afortunadamente, esas actualizaciones de XZ solo se habían incorporado a versiones de prueba de algunas distribuciones de Linux que aún no habían sido certificadas como aptas para pasar a producción, pero si a Andres no le hubiera dado por investigar qué estaba robándole medio segundo de su CPU, «los malos» podrían haber accedido a cualquier servidor Linux que se actualizara a una versión que contuviera la puerta trasera. Para ser conscientes de la magnitud del potencial desastre, basta recordar que el 96,3% del millón de servidores web con más tráfico en Internet usa Linux.
Pero este no es otro intento más de hackear servidores remotos, no ya por su sofisticada implementación y los enormes esfuerzos por ocultarlo sino por algo nunca visto hasta ahora: para tener la oportunidad de incluirlo en el código que se distribuye con Linux, el hacker estuvo ganándose la confianza de la Comunidad open source durante dos años, haciendo más de 6.000 contribuciones a la misma… hasta explotar sus debilidades.
Y es que, como tantas otras utilidades de software libre, aunque XZ es utilizado por millones de empresas de todo tipo, básicamente es mantenido de forma altruista por un único desarrollador, Lasse Collins. Y aquí es donde todo empieza a entrar en un terreno oscuro y perturbador.
Entre 2005 y 2008, Lasse —con ayuda de otros programadores— lanza el formato de fichero .xz que emplea el algoritmo LZMA para comprimir ficheros hasta un 70% más que gzip.
Con el tiempo, el formato se populariza y es ampliamente utilizado para comprimir y distribuir software como, por ejemplo, distintas distribuciones de Linux. Sin embargo, detrás del mismo sigue estando —fundamentalmente— Lasse.
A finales de 2021, 13 años después, aparece en escena un tal Jin Tan que empieza a enviar parches y mejoras a la lista de correo de XZ. En febrero de 2022, Collins incluye por primera vez en la librería código creado por Tan. A mediados de año, Jin Tan envía otro parche y otros supuestos desarrolladores —como «Jigar Kumar» o «Dennis Ens»— entran en acción y reprochan a Lasse su lentitud a la hora de incorporar código de terceros y evolucionar el software, «patches spend years on this mailing list. There is no reason to think anything is coming soon».
Collins se disculpó, explicando que hacía lo que podía para responder todos los correos que le llegaban, y apunta que —quizás— Jin Tan deberí asumir un rol más importante en el desarrollo de XZ.
Los supuestos desarrolladores siguieron presionando a Lasse para que diera permisos de mantenimiento a más personas e incluso le amenazaron sutilmente con crear un fork de su software, una copia que evolucione de forma independiente. «Progress will not happen until there is new maintainer […] you are better off waiting until new maintainer happens or fork yourself. Submitting patches here has no purpose these days. The current maintainer lost interest or doesn't care to maintain anymore. It is sad to see for a repo like this».
Lasse replica que no ha perdido el interés, pero que su capacidad para gestionar la librería es limitada debido a sus «problemas mentales» y recuerda que el proyecto no está remunerado.
Aunque sigue incorporando más y más parches de Tan, la presión no disminuye: «I am sorry about your mental health issues, but its important to be aware of your own limits. I get that this is a hobby project for all contributors, but the community desires more. Why not pass on maintainership for XZ for C so you can give XZ for Java more attention?».
Finalmente, Lasse claudica y da permisos de mantenimiento a Jin Tan a finales de 2022. En marzo de 2023 Tan publica la versión 5.4.2, la primera de la que se hace responsable. En junio de ese mismo año, un tal Hans Jansen envío un par de parches con optimizaciones que, sin ser malas por sí mismas, fueron cruciales para poder cargar el código malicioso posteriormente.
En febrero de 2024, Tan incorpora la puerta trasera como un fichero de testing más a la versión 5.6.0 de la librería y empieza a presionar a los líderes de distintas distribuciones de Linux para que la incluyan lo antes posible porque «soluciona errores y problemas de rendimiento». Si no hubiera sido por la intervención de Andres, lo habrían logrado.
No hay ningún rastro más de Jansen en Internet excepto un correo más, enviado en 2024, en el que se sumaba a la petición de Tan para que la versión infectada de XZ se incorporara lo antes posible a las nuevas distribuciones de Linux. Investigaciones posteriores tampoco han podido demostrar que Kumar o Ens —ni mucho menos Tan— sean identidades reales.
Puede que detrás de todo esto «solo» haya un grupo de hackers, pero el nivel técnico requerido para crear parches de una librería open source, la sofisticación de la puerta trasera y —sobre todo— la paciencia necesaria para invertir DOS AÑOS en ganar la confianza del desarrollador original para poder incluirla en su código, es algo inaudito. Tanto, que muchos miembros de la Comunidad de ciberseguridad sospechan que detrás solo puede estar algún estado con capacidad de ciberataque, como China, Rusia o Estados Unidos.
Fuentes:
No hay comentarios:
Publicar un comentario