- En instalaciones de Debian sid se observaron algunos síntomas extraños relacionados con liblzma (parte del paquete xz), como mayor uso de CPU al iniciar sesión por SSH y errores de valgrind
- Se descubrió que la causa del problema era que el repositorio upstream y los tarballs de xz estaban infectados con una puerta trasera. Parte de la puerta trasera solo existe en los tarballs distribuidos
- El script incluido en el tarball se ejecuta al final de
configure y, si se cumplen ciertas condiciones, modifica $builddir/src/liblzma/Makefile para insertar código malicioso
Puerta trasera en el repositorio
- La parte principal de la puerta trasera existe en forma cifrada dentro del directorio
tests/files del repositorio
- Estos archivos no se usaron en las pruebas de la versión 5.6.0, y en la versión 5.6.1 hubo intentos de corregir errores de valgrind y fallas provocadas por la puerta trasera
Sistemas afectados
- El script de la puerta trasera se invoca por primera vez después de
configure y solo modifica el proceso de compilación bajo ciertas condiciones específicas (por ejemplo, sistemas Linux x86-64, uso de gcc y del enlazador GNU, y compilación de paquetes Debian o RPM)
Impacto en el servidor openssh
- Cuando se usa liblzma instalado con la puerta trasera, el inicio de sesión por SSH se vuelve más lento
- openssh no usa liblzma directamente, pero algunas distribuciones, incluido Debian, aplican parches a openssh para admitir notificaciones de systemd, y libsystemd depende de lzma
Análisis del código inyectado
- El análisis se realiza desde la perspectiva de un observador que no es investigador de seguridad ni experto en ingeniería inversa
- La puerta trasera intercepta la ejecución mediante un ifunc resolver y, durante la inicialización de sshd, resuelve símbolos para reemplazar el símbolo
RSA_public_decrypt con su propio código
Impacto en sshd
- Se modifica
RSA_public_decrypt@....plt para que apunte al código de la puerta trasera, de modo que dicho código se invoque durante el inicio de sesión con clave pública
- Se presume que esto permite omitir la autenticación o posibilitar la ejecución remota de código
Reporte del bug
- No se reportó como bug porque se sospechaba la participación del repositorio upstream
- Red Hat asignó a este problema el CVE-2024-3094
Detección de instalaciones vulnerables
- Se proporciona un script para detectar si el binario ssh del sistema es vulnerable
8 comentarios
Todo lo que sé sobre la puerta trasera de xz
Este es un texto escrito por Andres Freund, quien descubrió esa puerta trasera.
Es sorprendente lo meticulosamente que se movieron;; el proceso parece de película.
Aunque lo descuarticen, se lo merece.
¿Por qué?
Como fue un acto de insertar intencionalmente una puerta trasera en el código abierto... en el proceso también hicieron cosas como manipular discretamente la opinión pública.
Antes también hubo casos de insertar vulnerabilidades de forma maliciosa en el kernel de Linux, así que es bastante amargo.
Ah, creo que ahora ya entendí el matiz. Gracias.
Opiniones de Hacker News
Enlaces relacionados:
Resumen:
SECURITY.mdal proyectoxz-java. Este incluye instrucciones para que, si se encuentra una vulnerabilidad de seguridad, no se haga pública y se reporte de forma privada. Visto desde otra perspectiva, puede interpretarse como un intento de ganar tiempo para ajustar su exploit y aprovechar los objetivos.opensshno usaliblzmadirectamente, pero Debian y varias distribuciones aplican parches aopensshpara dar soporte a notificaciones desystemd. Esto hace quelibsystemddependa deliblzma, añadiendo dependencias extra a demonios críticos para la seguridad comoopensshy aumentando el riesgo de ataques a la cadena de suministro.liblzma5(5.6.0 o 5.6.1). Esto se añadió aproximadamente durante el último mes.sshddesdesystemd. El OpenSSH parcheado en algunas distribuciones usalibsystemdpara funciones de registro, y eso arrastra la versión vulnerable deliblzma5.5.6.1+really5.4.5-1, que en realidad es la versión anterior 5.4 reempaquetada como si fuera una nueva versión.curl | sh. La persona que distribuyó esto ya se había encargado de distribuciones antes y empezó a hacer commits desde 2022. Hay commits con muchos cambios reales, y también commits en proyectos relacionados comolibarchive. Hizo falta mucho esfuerzo para insertar la puerta trasera..tar.xz, usados como base de ciertos procesos de compilación. El objetivo no serían tarballs con código fuente, sino tarballs que distribuyen binarios precompilados.