El viernes, un desarrollador solitario de Microsoft sacudió al mundo cuando reveló una Puerta trasera había sido colocado intencionalmente en XZ Utils, una utilidad de compresión de datos de código abierto disponible en casi todas las instalaciones de Linux y otros sistemas operativos similares a Unix. La persona o personas detrás de este proyecto probablemente pasaron años en él. Probablemente estaban muy cerca de ver la actualización de puerta trasera fusionada con Debian y Red Hat, las dos distribuciones más grandes de Linux, cuando un desarrollador de software con vista de águila vio algo sospechoso.
«Este podría ser el ataque a la cadena de suministro mejor ejecutado que hemos visto descrito abiertamente, y es un escenario de pesadilla: malicioso, competente, autorizado en una biblioteca ampliamente utilizada», dijo el ingeniero de software y criptografía Filippo Valsorda. dicho del esfuerzo, que estuvo terriblemente cerca de tener éxito.
Los investigadores han pasado el fin de semana reuniendo pistas. Esto es lo que sabemos hasta ahora.
¿Qué son las utilidades XZ?
XZ Utils es casi omnipresente en Linux. Proporciona compresión de datos sin pérdidas en prácticamente todos los sistemas operativos tipo Unix, incluido Linux. XZ Utils proporciona funciones críticas para comprimir y descomprimir datos durante todo tipo de operaciones. XZ Utils también admite el formato heredado .lzma, lo que hace que este componente sea aún más crucial.
¿Qué pasó?
Andrés Freund, un desarrollador e ingeniero que trabaja en las ofertas PostgreSQL de Microsoft, estuvo recientemente solucionando problemas de rendimiento que un sistema Debian estaba experimentando con SSH, el protocolo más utilizado para iniciar sesión de forma remota en dispositivos a través de Internet. Específicamente, los inicios de sesión SSH consumían demasiados ciclos de CPU y generaban errores con puerta electoraluna utilidad para monitorear la memoria de la computadora.
Por pura suerte y la cuidadosa mirada de Freund, finalmente descubrió que los problemas eran el resultado de las actualizaciones que se habían realizado en XZ Utils. El viernes, Freund recurrió a la Lista de seguridad de código abierto para revelar que las actualizaciones fueron el resultado de que alguien colocó intencionalmente una puerta trasera en el software de compresión.
¿Qué hace la puerta trasera?
El código malicioso agregado a las versiones 5.6.0 y 5.6.1 de XZ Utils modificó la forma en que funciona el software al realizar operaciones relacionadas con la compresión o descompresión de .lzma. Cuando estas funciones involucraban SSH, permitían que se ejecutara código malicioso con privilegios de root. Este código permitía a alguien en posesión de una clave de cifrado predeterminada iniciar sesión en el sistema de puerta trasera a través de SSH. A partir de ese momento, esa persona tendría el mismo nivel de control que cualquier administrador autorizado.
¿Cómo surgió esta puerta trasera?
Parecería que esta puerta trasera tardó años en desarrollarse. En 2021, alguien con el nombre de usuario JiaT75 hizo su primer compromiso conocido a un proyecto de código abierto. En retrospectiva, el cambiar al proyecto libarchive es sospechoso, porque reemplazó la función safe_fprint con una variante que durante mucho tiempo se ha reconocido como menos segura. Nadie se dio cuenta en ese momento.
Al año siguiente, JiaT75 envió un parche a la lista de correo de XZ Utils y, casi de inmediato, un participante nunca antes visto llamado Jigar Kumar se unió a la discusión y argumentó que Lasse Collin, el antiguo mantenedor de XZ Utils, no había sido actualizar el software con frecuencia o lo suficientemente rápido. Kumar, con el apoyo de Dennis Ens y varias otras personas que nunca habían estado presentes en la lista, presionó a Collin para que contratara a un desarrollador adicional para mantener el proyecto.
En enero de 2023, JiaT75 hizo su primer compromiso a XZ Utils. En los meses siguientes, JiaT75, que usaba el nombre de Jia Tan, se involucró cada vez más en los asuntos de XZ Utils. Por ejemplo, Tan reemplazó la información de contacto de Collins con la suya propia en oss-fuzz, un proyecto que escanea software de código abierto en busca de vulnerabilidades que puedan explotarse. Tan también solicitó que oss-fuzz deshabilitara la función ifunc durante las pruebas, un cambio que le impidió detectar los cambios maliciosos que Tan pronto haría en XZ Utils.
En febrero de este año, Tan emitió confirmaciones para las versiones 5.6.0 y 5.6.1 de XZ Utils. Las actualizaciones implementaron la puerta trasera. En las semanas siguientes, Tan u otros pidieron a los desarrolladores de Ubuntu, Red Hat y Debian que fusionaran las actualizaciones en sus sistemas operativos. Finalmente, una de las dos actualizaciones llegó a varias versiones, de acuerdo a empresa de seguridad Tenable. Hay más sobre Tan y la línea de tiempo. aquí.
¿Puede decirnos más sobre lo que hace esta puerta trasera?
En pocas palabras, permite a alguien con la clave privada correcta secuestrar sshd, el archivo ejecutable responsable de realizar conexiones SSH, y desde allí ejecutar comandos maliciosos. La puerta trasera se implementa a través de un cargador de cinco etapas que utiliza una serie de técnicas simples pero inteligentes para ocultarse. También proporciona los medios para entregar nuevas cargas útiles sin que se requieran cambios importantes.
Varias personas que han aplicado ingeniería inversa a las actualizaciones tienen mucho más que decir sobre la puerta trasera. El desarrollador Sam James proporcionó una descripción general aquí.