# Attaque de XZ Utils par porte dérobée

L'attaque de XZ Utils par porte dérobée est une grave atteinte à l'intégrité de son code ayant visé par rebond le serveur OpenSSH qui a été détectée fin mars 2024 par le développeur allemand Andres Freund. Selon de nombreux analystes de sécurité, elle constitue une attaque de la chaîne logistique (en) de Linux d'une envergure encore inégalée.

## Détection

Le 29 mars 2024, un message a été envoyé sur la liste de diffusion oss-security d'Openwall (en) montrant que le code de liblzma, une composante de l'outil de compression XZ Utils, était probablement compromis. L'auteur du fil de discussion, Andres Freund, employé de Microsoft, a identifié des fichiers de test compressés qui ont été ajoutés au code pour implanter une porte dérobée via des ajouts au script Configure dans les archives tar. Il a commencé son enquête parce que ses tests de performance sur PostgreSQL ont décelé une étrange régression de performances :sshd montrait une charge CPU anormale, des temps d'exécution plus élevés et des erreurs Valgrind inexplicables. Signalé par Red Hat, le problème a reçu le score de gravité maximale (10) sur le référentiel CVE$^,$.

## Description

Le code malveillant est connu pour affecter les versions 5.6.0 et 5.6.1 de XZ Utils. Bien que l'exploit reste inactif sans qu'un patch spécifique au serveur SSH ne soit utilisé, cette faille pourrait permettre à un acteur malveillant de contourner l'authentification ssh et d'obtenir un accès distant non autorisé à l'ensemble du système. Le mécanisme malveillant consiste en deux fichiers de test compressés contenant le code binaire malveillant. Ces fichiers sont disponibles dans le référentiel git, mais restent dormants à moins d'être extraits et injectés dans le programme.
Le code utilise le mécanisme glibc IFUNC pour remplacer une fonction existante dans OpenSSH appelée RSA_public_decrypt par une version malveillante. OpenSSH ne charge normalement pas liblzma, mais un patch tiers utilisé par plusieurs distributions Linux provoque le chargement de libsystemd, qui à son tour charge liblzma. Une version modifiée de build-to-host.m4 a été incluse dans le fichier tar de la version téléchargée sur GitHub, qui extrait un script qui effectue l'injection réelle dans liblzma. Ce fichier m4 modifié n'est pas présent dans le dépôt git ; il n'est disponible qu'à partir des fichiers tar publiés par le mainteneur, séparément de git. Le script semble effectuer l'injection uniquement lorsque le système est compilé sur un système Linux x86-64 qui utilise glibc et GCC et est construit via dpkg ou rpm.
La reconnaissance de l'attaquant se base sur une clé publique au format ed448 présente dans le fichier binaire infecté.

## Réactions
### Remédiation

GitHub a immédiatement fermé le dépôt XZ Utils pour violation des conditions de service, à cause de l'attaque de la chaîne logistique, avant de le rouvrir le 9 avril 2024.
De nombreuses distributions Linux populaires sont concernées, dont Debian (testing et unstable), Fedora Rawhide, Kali Linux, et OpenSUSE Tumbleweed. La plupart des distributions Linux qui suivent un modèle de mise à jour stable ne sont pas affectées, car elles utilisent des versions plus anciennes de xz.
Arch Linux a publié un avis invitant les utilisateurs à mettre à jour immédiatement, bien qu'il ait également noté que le package OpenSSH d'Arch n'inclut pas le patch nécessaire à la porte dérobée. FreeBSD n'est pas affecté par cette attaque, car toutes les versions de FreeBSD prises en charge incluent des versions de xz antérieures à celles concernées et l'attaque cible la glibc de Linux.

### Identification de l'auteur

La porte dérobée a été ajoutée par « JiaT75 » alias Jia Cheong Tan, l'un des deux mainteneurs officiels du projet, bien que récemment arrivé. Les analystes considèrent généralement que Jia Tan est un pseudonyme, voire un paravent pour un groupe organisé. JiaT75 a sciemment tenté de dissimuler ses traces, en mettant en cause Valgrind au nom d'un bug sans lien$^,$, et a utilisé plusieurs faux-nez pour inciter le projet et les distributions ciblées à incorporer ses contributions$^,$. Il est également responsable de modifications curieuses sur d'autres projets, au moins libarchive (en).
Plusieurs experts en sécurité interrogés par le magazine américain Wired voient derrière cette attaque la main du groupe russe Cozy Bear, lié au SVR, le service de renseignement extérieur, déjà mis en cause pour une attaque de même type visant les logiciels SolarWinds en 2020. D'autres services étatiques sont évoqués : l'Iran, la Corée du Nord, Israël, mais surtout la Chine via Double Dragon (groupe de hackers) (en), un autre groupe constituant une menace persistante.

### Analyses

L'informaticien Alex Stamos a estimé que cette attaque « aurait pu être la porte dérobée la plus répandue et la plus efficace jamais implantée dans un logiciel », notant que si elle n'avait pas été détectée, elle aurait « donné à ses créateurs une clé maîtresse sur n'importe lequel des centaines de millions d'ordinateurs dans le monde utilisant SSH ».
En outre, l'incident a également lancé un débat sur la viabilité de faire dépendre les éléments critiques de l'infrastructure numérique de bénévoles non rémunérés. De telles inquiétudes avaient déjà été formulées lors de l'attaque Log4Shell visant Log4j, mais aussi OpenSSL (faille Heartbleed), et des fragilités de type point de défaillance unique menaçant GPG, NTP ou encore npm. Sur les réseaux sociaux, le dessin Dépendance du comics xkcd a été largement repris pour illustrer ce problème. Il met en avant la fragilité de toute l'infrastructure numérique moderne reposant sur des briques logicielles maintenues bénévolement.