La version du paquet XZ Utils 5.8.1 a été publiée, incluant la bibliothèque liblzma et des utilitaires pour travailler avec des données compressées au format « .xz ». XZ Utils 5.8.1 est la première version majeure après l'incident de détection d'un backdoor permettant un accès via sshd. La semaine dernière, une étiquette 5.8.0 a été créée dans Git, mais la sortie n'a pas été annoncée officiellement en raison des problèmes de performance et de compatibilité avec les anciennes versions de GNU make qui ont été identifiés après la publication de l'étiquette.
La mise à jour XZ Utils 5.8.1 corrige une vulnérabilité (CVE-2025-31115) provoquant un accident lors de la tentative de décompression d'archives spécialement conçues. Cette vulnérabilité est causée par un accès à une mémoire déjà libérée (use after free). Un attaquant peut réussir à écrire sa valeur à une adresse calculée comme « pointeur nul + décalage ». Le problème est considéré comme une erreur non intentionnelle, car la modification à l'origine de celui-ci a été faite dans le code bien avant l'arrivée du développeur Jia Tan dans le projet, dont l'activité a conduit à l'injection du backdoor.
Le problème apparaît depuis la version XZ Utils 5.3.3alpha lors du décodage en mode multithread (le décodeur monocouche n'est pas concerné). En plus des utilitaires standards du paquet xz, la vulnérabilité se manifeste également dans des programmes tiers utilisant la fonction lzma_stream_decoder_mt de la bibliothèque liblzma. La vulnérabilité a été corrigée dans la version XZ Utils 5.8.1 et également transférée aux branches stables 5.4 et 5.6. Il est possible de suivre l'apparition des mises à jour dans les distributions sur les pages suivantes : Debian, Ubuntu, RHEL, SUSE/openSUSE, Fedora, Arch, FreeBSD. Comme solution de contournement, il est possible de désactiver le décodage de fichiers en mode multithread en utilisant lors du lancement de xz les options « —decompress —threads=1 » ou en appliquant l'utilitaire xzdec.
Parmi les changements fonctionnels dans la branche XZ Utils 5.8, on peut noter :
- Dans le décodeur LZMA/LZMA2, il a été ajouté la possibilité d'utiliser des instructions SSE2 au lieu de la fonction memcpy() sur les systèmes x86 32 et 64 bits. Ce changement permet de réduire le temps de décodage jusqu'à 5 % lors de la compilation avec Glibc et jusqu'à 15 % lors de la compilation avec musl pour décompresser des fichiers avec un très haut taux de compression.
- Dans liblzma, la vitesse d'encodage a été augmentée sur les systèmes PowerPC et RISC-V 64 bits.
- Dans lzma/bcj.h, une API de bas niveau pour les filtres BCJ (Branch/Call/Jump) a été ajoutée pour les systèmes RISC-V, ARM64 et x86.
- Le code de calcul du CRC CLMUL a été réécrit pour les systèmes x86, x86-64 et E2K.
- Sur les plates-formes équipées de processeurs LoongArch, des instructions sont utilisées pour accélérer le calcul des sommes de contrôle CRC32.
- Dans l'utilitaire « xz », l'appel de la fonction fsync() est assuré pour effacer les caches de fichiers du fichier résultant avant la suppression du fichier source. L'option « —no-sync » est mise en œuvre pour désactiver la synchronisation avant la suppression.
- Dans les utilitaires xz, xzdec et lzmainfo, lors de l'affichage des informations à l'écran, les caractères non imprimables sont remplacés par un point d'interrogation.
- Dans xz et xzdec sur la plateforme Linux, un support des versions 5 et 6 du mécanisme Landlock a été mis en œuvre pour isoler le processus.
- Un script pour vérifier les licences a été ajouté : build-aux/license-check.sh.
- Les scripts lzcmp, lzdiff, lzless, lzmore, lzgrep, lzegrep et lzfgrep, qui étaient des surcouches à l'utilitaire xz, ont été déclarés obsolètes.
Source : opennet.ru
