Red Hat ha emitido una advertencia urgente dirigida a la comunidad de ciberseguridad sobre una vulnerabilidad crítica descubierta en XZ Utils, una utilidad de compresión de formato XZ incluida en muchas distribuciones de Linux. Según la empresa, esta vulnerabilidad se ha identificado como una puerta trasera que permite la inyección de código y el acceso remoto no autorizado al sistema afectado. Se ha asignado a esta falla el identificador CVE-2024-3094 y se le ha otorgado una puntuación de 10.0 en el Sistema Común de Puntuación de Vulnerabilidades (CVSS).
Primero un poco de historia:
En 2021, Jia Tan crea su cuenta en GitHub y realiza sus primeros commits, que resultan ser sospechosos, introduciendo cambios en la biblioteca libarchive que podrían haber comprometido la seguridad. Más tarde, en 2022, bajo el alias de Jigar Kumar, presiona para que se fusionen parches irrelevantes en proyectos de software de código abierto, lo que genera sospechas sobre su intención real.
En 2023, Jia Tan gana la confianza en la comunidad de desarrollo al fusionar su primer commit en XZ Utils. A través de una serie de eventos, Jia comienza a tener un papel más activo en el proyecto, hasta convertirse en el segundo contribuyente más activo.
En 2024, se descubre que Jia Tan ha introducido una puerta trasera en XZ Utils, lo que permite comprometer la seguridad de los servidores SSH. La comunidad reacciona rápidamente, GitHub suspende la cuenta de Jia y se revierten los cambios maliciosos. Sin embargo, se observa una serie de intentos de Jia de incluir la versión comprometida en varias distribuciones de Linux, lo que genera preocupaciones adicionales sobre sus motivaciones.
Mientras tanto, se realizan investigaciones adicionales para determinar la verdadera identidad de Jia Tan, incluidas pistas encontradas en registros de Git y en LinkedIn. Aunque se han identificado algunas pistas, la verdadera identidad de Jia Tan sigue siendo un misterio.
Detalles de la vulnerabilidad.
La vulnerabilidad de inyección de código (CVE-2024-3094) permite que actores maliciosos inserten código en el proceso de autenticación, lo que les otorga acceso remoto al sistema comprometido. Esta vulnerabilidad se ha observado en las versiones 5.6.0 y 5.6.1 de XZ Utils, liberadas el 24 de febrero y el 9 de marzo, respectivamente.
Según el equipo de respuesta de seguridad de Tenable, la presencia del código malicioso se ha descubierto en los paquetes de origen de XZ y no en la distribución de Git, lo que sugiere un compromiso de la cadena de suministro. Este código modifica funciones dentro del código de liblzma, lo que podría permitir a los atacantes interceptar y modificar datos utilizados con la biblioteca.
Andres Freund descubrió la puerta trasera en XZ Utils después de notar un comportamiento inusual asociado con sshd, que consumía una cantidad sorprendentemente grande de CPU durante el proceso de inicio de sesión. Además, encontró numerosos errores al utilizar la herramienta ‘Valgrind’ para el perfilado y la depuración de memoria, lo que lo llevó a investigar más a fondo.
Como parte del proceso de compilación de XZ, se ejecuta el script Build-to-Host.m4, que contiene una línea que inyecta un script ofuscado para ser ejecutado al final del script de configuración. Este script se encarga de crear los MakeFiles para xz-utils y liblzma.
Mientras se ejecuta el script ofuscado, entre otras cosas, verifica dos condiciones: determina si el sistema operativo es x86-64 Linux y si es parte de una compilación de paquetes Debian o RPM. El script principalmente tiene como objetivo modificar el MakeFile de liblzma para interferir con su proceso de resolución de símbolos en tiempo de ejecución, haciendo que el símbolo RSA_public_decrypt@….pl apunte a su propio código de puerta trasera malicioso.
Un análisis adicional reveló que durante el proceso de autenticación de clave pública de sshd, se llama a la función RSA_public_decrypt@….pl, lo que hace que se ejecute el código del atacante. Luego, el código llama de vuelta a libcrypto para continuar con la autenticación normal. Se sospecha que durante la llamada a RSA_public_decrypt@….pl, el código malicioso permite al atacante evitar la autenticación bajo ciertas condiciones (que aún no se comprenden bien). En última instancia, este bypass podría conducir a la ejecución remota de código (RCE) en un servidor afectado.
Además, los requisitos observados para la explotación sugieren que el atacante pretendía complicar el proceso de análisis para los investigadores.
El código ofuscado que se ejecuta dentro del script de configuración instala la puerta trasera solo bajo ciertas condiciones. Entre varias verificaciones, las siguientes dos son notables:
- El sistema operativo objetivo debe ser x86-64 Linux. Si esta condición no se cumple, la puerta trasera no se instalará.
bashCopy codeif ! (echo "$build" | grep -Eq "^x86_64" > /dev/null 2>&1) && (echo "$build" | grep -Eq "linux-gnu$" > /dev/null 2>&1); then
- El proceso de compilación de XZ debe ser parte de una compilación de paquetes Debian o RPM. Esto hace que sea más difícil de reproducir, ya que la puerta trasera no se instalará al intentar compilar manualmente el paquete XZ.
bashCopy codeif test -f "$srcdir/debian/rules" || test "x$RPM_ARCH" = "xx86_64"; then
Además de estos, se han observado varios requisitos de tiempo de ejecución para la explotación:
- La variable de entorno TERM no debe estar establecida, ya que esto indica que el proceso aún no ha comenzado, lo cual es la etapa precisa que el exploit tiene como objetivo.
- La ruta al binario en ejecución actual, argv[0], debe ser /usr/sbin/sshd, lo que significa que el código malicioso solo se ejecutará cuando sshd use la biblioteca libzlma. No será relevante cuando otros binarios utilicen la biblioteca liblzma infectada.
- Las variables de entorno LD_DEBUG y LD_PROFILE no deben estar establecidas para evitar exponer el proceso de interferencia en la resolución de símbolos y otras manipulaciones de enlace/carga.
- La variable de entorno LANG debe estar establecida, ya que sshd siempre establece LANG.
- El exploit detecta si se están utilizando herramientas de depuración como rr y gdb y, si es así, no se ejecuta, lo que representa una técnica clásica contra la depuración.
Impacto y acciones recomendadas.
El impacto de esta puerta trasera es grave, ya que podría permitir a los atacantes comprometer la autenticación SSH y obtener acceso no autorizado al sistema. Red Hat recomienda encarecidamente a los usuarios que utilicen versiones afectadas de XZ Utils, especialmente en las distribuciones Fedora 41 y Fedora Rawhide, que dejen de usarlas de inmediato y sigan las instrucciones proporcionadas para parchear o deshabilitar SSH temporalmente.
Los usuarios pueden verificar si están ejecutando una versión afectada de XZ Utils utilizando el comando xz --version. Si el resultado indica que la versión es 5.6.0 o 5.6.1, se recomienda aplicar la actualización correspondiente si está disponible, degradar XZ Utils a una versión no comprometida o deshabilitar SSH hasta que se resuelva la vulnerabilidad.
Distribuciones afectadas y acciones tomadas.
Aunque esta vulnerabilidad afecta principalmente a las distribuciones de Linux, también se han reportado problemas en algunas versiones de MacOS. Varias distribuciones han tomado medidas para abordar esta vulnerabilidad:
- Red Hat: Las versiones vulnerables se encuentran en Fedora 41 y Fedora Rawhide. Red Hat Enterprise Linux (RHEL) no se ve afectado.
- SUSE: Se ha publicado una actualización para openSUSE (Tumbleweed o MicroOS).
- Debian Linux: Las versiones estables de la distribución no se ven afectadas, pero los paquetes comprometidos estaban presentes en las versiones de prueba, inestables y experimentales.
- Kali Linux: Se recomienda a los usuarios que actualicen nuevamente si sus sistemas se actualizaron entre el 26 y el 29 de marzo.
- Amazon Linux y Alpine: No se ven afectados por esta vulnerabilidad.
Conclusiones y acciones a seguir.
La identificación de esta puerta trasera en XZ Utils destaca la importancia de la seguridad en la cadena de suministro de software. Los usuarios y administradores de sistemas deben tomar medidas inmediatas para proteger sus sistemas, ya sea aplicando parches, degradando versiones afectadas o deshabilitando temporalmente servicios vulnerables.
Se insta a los profesionales de ciberseguridad a mantenerse informados sobre los últimos desarrollos relacionados con esta vulnerabilidad y a tomar medidas proactivas para proteger sus sistemas y redes contra posibles ataques. La colaboración con agencias de seguridad como la Agencia de Seguridad de Infraestructura y Ciberseguridad (CISA) puede ser fundamental para compartir hallazgos positivos y coordinar respuestas efectivas ante amenazas emergentes.
Esta advertencia subraya la importancia de la controlar constantemente y las prácticas sólidas de gestión de vulnerabilidades.
Fuentes:
