Se ha publicado la versión del paquete XZ Utils 5.8.1, que incluye la biblioteca liblzma y utilidades para trabajar con datos comprimidos en formato «.xz». XZ Utils 5.8.1 es la primera versión significativa después del incidente en el que se descubrió un backdoor que permitía el acceso a través de sshd. La semana pasada se creó una etiqueta 5.8.0 en Git, pero el lanzamiento no se anunció oficialmente debido a los problemas de rendimiento y compatibilidad con versiones anteriores de GNU make que se detectaron tras la publicación de la etiqueta.
La actualización XZ Utils 5.8.1 corrige una vulnerabilidad (CVE-2025-31115) que provoca un cierre inesperado al intentar descomprimir archivos especialmente diseñados. La vulnerabilidad se debe a un acceso a un área de memoria ya liberada (uso después de la liberación). Un atacante puede lograr que se escriba su valor en una dirección calculada como «puntero nulo + desplazamiento». El problema se considera un error no intencionado, ya que la modificación que lo causó se introdujo en el código mucho antes de la llegada del desarrollador Jia Tan al proyecto, cuya actividad llevó a la implementación del backdoor.
El problema se manifiesta desde el lanzamiento de XZ Utils 5.3.3alpha al decodificar en modo multihilo (el decodificador de un solo hilo no se ve afectado). Además de las utilidades estándar del paquete xz, la vulnerabilidad también se presenta en programas de terceros que utilizan la función lzma_stream_decoder_mt de la biblioteca liblzma. La vulnerabilidad se ha corregido en el lanzamiento de XZ Utils 5.8.1 y también se ha trasladado a las ramas estables 5.4 y 5.6. Se pueden seguir las actualizaciones en las distribuciones en las siguientes páginas: Debian, Ubuntu, RHEL, SUSE/openSUSE, Fedora, Arch, FreeBSD. Como solución alternativa, se puede desactivar la decodificación de archivos en modo multihilo utilizando las opciones «—decompress —threads=1» al iniciar xz o aplicando la utilidad xzdec.
Entre los cambios funcionales en la rama de XZ Utils 5.8 se pueden destacar:
- Se ha añadido la capacidad de usar instrucciones SSE2 en lugar de la función memcpy() en el decodificador LZMA/LZMA2 en sistemas x86 de 32 y 64 bits. Este cambio ha permitido reducir el tiempo de decodificación en un 5% al compilar con Glibc, y hasta un 15% al compilar con musl al descomprimir archivos con un nivel de compresión muy alto.
- En liblzma se ha mejorado la velocidad de codificación en sistemas de 64 bits PowerPC y RISC-V.
- Se ha añadido una API de bajo nivel para los filtros BCJ (Branch/Call/Jump) en lzma/bcj.h para los sistemas RISC-V, ARM64 y x86.
- Se ha reescrito el código de cálculo de CLMUL CRC para los sistemas x86, x86-64 y E2K.
- En las plataformas con procesadores LoongArch se utilizan instrucciones para acelerar el cálculo de sumas de verificación CRC32.
- En la utilidad 'xz' se ha asegurado la llamada a la función fsync() para vaciar los cachés de archivos del archivo resultante antes de eliminar el archivo original. Para desactivar la sincronización antes de la eliminación, se implementó la opción '—no-sync'.
- En las utilidades xz, xzdec y lzmainfo, al mostrar información en la pantalla se ha asegurado la sustitución de caracteres no imprimibles por un signo de interrogación.
- En xz y xzdec en la plataforma Linux se ha implementado soporte para las versiones 5 y 6 del mecanismo Landlock para aislar el proceso.
- Se ha añadido un script para la verificación de licencias build-aux/license-check.sh.
- Se han declarado obsoletos los scripts lzcmp, lzdiff, lzless, lzmore, lzgrep, lzegrep y lzfgrep, implementados como extensiones sobre la utilidad xz.
Fuente: opennet.ru
