Backdoor no XZ Utils: o caso CVE-2024-3094 e as lições para segurança e gestão de riscos
Em março de 2024, administradoras(es) de sistemas Linux de todo o mundo receberam um alerta que rapidamente se tornou um dos episódios mais comentados da história recente do software livre.
Um código malicioso havia sido introduzido no XZ Utils, um conjunto de ferramentas de compressão utilizado em inúmeras distribuições Linux.
A vulnerabilidade recebeu a identificação:
CVE-2024-3094
e classificação crítica, com pontuação CVSS 10.0 atribuída pela Red Hat. (nvd.nist.gov)
Na época, a Diretoria Geral de Tecnologia da Informação — DGTI/Uerj publicou um alerta direcionado às(aos) administradoras(es) de sistemas Linux da Universidade.
A preocupação era justificável.
O código malicioso tinha sido desenvolvido de forma extremamente sofisticada e poderia, em determinadas configurações, interferir justamente em um dos principais mecanismos utilizados para administração remota de servidores Linux:
o SSH.
O que é o XZ Utils?
O XZ Utils é um conjunto de ferramentas utilizado para compressão e descompressão de dados.
Entre seus componentes está a biblioteca:
liblzma
utilizada por diversos programas no ecossistema Linux.
Isso significa que o problema não precisava ficar restrito ao aplicativo xz.
Uma biblioteca pode ser utilizada indiretamente por outros programas.
É justamente essa característica que tornou o caso tão preocupante.
A vulnerabilidade atingia especificamente os tarballs distribuídos das versões:
XZ Utils 5.6.0
e
XZ Utils 5.6.1. (tukaani.org)
Uma descoberta quase acidental
A história de como o problema foi descoberto é uma das partes mais interessantes.
Andres Freund, desenvolvedor do PostgreSQL e engenheiro da Microsoft, estava investigando um comportamento estranho em instalações Debian.
Algumas conexões SSH estavam consumindo mais CPU do que deveriam e determinadas ferramentas de análise apresentavam erros relacionados à liblzma.
Em vez de simplesmente aceitar aquilo como um pequeno problema de desempenho, Freund continuou investigando.
Em 29 de março de 2024, publicou suas conclusões na lista de segurança oss-security.
Ele havia encontrado algo muito mais grave:
o XZ Utils havia sido deliberadamente adulterado.
Sua mensagem original alertava que partes do código malicioso estavam presentes nos pacotes distribuídos das versões 5.6.0 e 5.6.1 e poderiam comprometer o servidor SSH em determinadas configurações. (openwall.com)
Uma investigação de desempenho havia encontrado uma:
backdoor.
O que é uma backdoor?
Uma backdoor — literalmente, uma “porta dos fundos” — é um mecanismo que permite contornar formas normais de autenticação, controle ou proteção de determinado sistema.
Ela pode ser criada legitimamente para alguma função específica, embora isso gere riscos.
Mas também pode ser introduzida de maneira maliciosa.
No caso do XZ Utils, tratava-se de:
código malicioso inserido deliberadamente no processo de distribuição do software.
O objetivo era interferir em sistemas que atendessem a determinadas condições e potencialmente permitir execução remota de código antes mesmo da autenticação normal do SSH.
O CERT da União Europeia classificou o cenário como possibilidade de execução remota de código pré-autenticação, desde que determinadas condições fossem atendidas e o atacante possuísse a chave correspondente. (cert.europa.eu)
Mas o XZ não é um programa de compressão? O que ele tem a ver com SSH?
Essa foi uma das perguntas mais frequentes na época.
O OpenSSH não precisava utilizar diretamente a biblioteca XZ para que o ataque funcionasse.
Em determinadas distribuições Linux, o serviço sshd utilizava componentes relacionados ao systemd.
Essas dependências acabavam carregando:
libsystemd → liblzma
e, consequentemente, a versão comprometida da biblioteca podia acabar dentro do processo do servidor SSH.
Foi essa cadeia de dependências que criou o caminho utilizado pelo código malicioso. (cert.europa.eu)
Esse detalhe traz uma importante lição:
uma vulnerabilidade em uma biblioteca aparentemente distante pode atingir aplicações muito mais sensíveis por meio das dependências de software.
O ataque não atingia qualquer computador Linux
Nos primeiros momentos do incidente, havia muita incerteza.
Hoje sabemos que o cenário era mais específico.
O código malicioso precisava encontrar determinadas condições de:
sistema operacional;
arquitetura;
processo de compilação;
distribuição;
biblioteca;
configuração do
sshd.
Além disso, as versões comprometidas eram muito recentes.
Por isso, o código havia chegado principalmente a versões de desenvolvimento, teste ou atualização contínua de algumas distribuições.
A Red Hat, por exemplo, informou que:
Red Hat Enterprise Linux — RHEL não foi afetado.
O Fedora 40 Beta chegou a possuir versões do XZ 5.6.0, embora a empresa tenha informado que aquela versão não parecia vulnerável à exploração completa e recomendasse a reversão para a série 5.4. (redhat.com)
O Kali Linux informou que usuários que haviam atualizado seus sistemas entre 26 e 29 de março de 2024 poderiam ter recebido o pacote comprometido e deveriam atualizar imediatamente. (kali.org)
Esse alcance limitado foi extremamente importante.
O ataque foi descoberto antes de as versões comprometidas serem incorporadas de maneira ampla às principais distribuições estáveis utilizadas em servidores de produção.
Se tivesse permanecido oculto por mais tempo, o cenário poderia ter sido muito diferente.
O que realmente havia nos arquivos?
Aqui também vale atualizar a informação publicada nos primeiros dias.
Inicialmente, parecia especialmente intrigante que parte do código malicioso não aparecesse claramente no repositório Git.
A estratégia utilizada era bastante sofisticada.
O processo envolvia:
arquivos aparentemente relacionados a testes;
dados maliciosos escondidos nesses arquivos;
scripts ofuscados;
diferenças entre o repositório e os pacotes de distribuição;
código executado durante a compilação;
alteração da
liblzma.
O NIST atualmente descreve a vulnerabilidade como um processo no qual o sistema de compilação da liblzma extraía um objeto pré-compilado escondido dentro de um arquivo de testes e o utilizava para modificar funções da biblioteca. (nvd.nist.gov)
Ou seja:
não se tratava simplesmente de alguém acrescentando uma linha chamada:
“backdoor = true”.
O código foi deliberadamente desenvolvido para dificultar sua descoberta.
E quem colocou a backdoor?
No alerta inicial da época, ainda existia dúvida.
Poderia ter ocorrido:
comprometimento do computador de uma pessoa desenvolvedora;
invasão de uma conta;
participação deliberada de alguém ligado ao projeto.
Hoje temos uma compreensão muito mais clara.
A página oficial do XZ Utils afirma que Jia Tan, que atuou como co-mantenedor do projeto entre 2022 e 2024, e o grupo associado a ele introduziram deliberadamente a backdoor nas versões 5.6.0 e 5.6.1. (tukaani.org)
Isso transforma o episódio em algo ainda mais relevante:
um ataque à cadeia de suprimentos de software.
O que é um ataque à cadeia de suprimentos?
Uma organização pode proteger:
seus servidores;
suas senhas;
suas redes;
seus computadores.
Mas ela também utiliza programas criados por terceiros.
E esses programas dependem de:
bibliotecas;
frameworks;
pacotes;
plugins;
código aberto.
Imagine que o invasor perceba que atacar diretamente milhares de servidores é difícil.
Existe outra possibilidade:
comprometer um componente utilizado por milhares de servidores.
Depois, esperar que as próprias organizações:
baixem;
instalem;
atualizem
o código malicioso.
Esse é o problema da cadeia de suprimentos.
Em vez de atacar cada vítima individualmente, tenta-se comprometer aquilo em que todas elas confiam.
O aspecto humano do ataque talvez seja ainda mais interessante
O caso XZ não começou apenas com código.
A história do projeto mostra um processo de longo prazo de conquista de confiança.
O XZ Utils era mantido durante muitos anos principalmente por um número extremamente pequeno de pessoas.
Jia Tan começou contribuindo com o projeto e gradualmente recebeu maior participação e confiança.
Posteriormente tornou-se co-mantenedor.
Quando as versões comprometidas foram lançadas, a pessoa responsável pelo ataque já ocupava uma posição que lhe permitia interferir diretamente no processo de desenvolvimento e distribuição.
Isso mostra que segurança da informação não depende apenas de:
firewall;
antivírus;
criptografia.
Também depende de:
governança.
Uma pequena biblioteca sustentava uma enorme cadeia
Talvez essa seja uma das maiores lições do episódio.
XZ Utils não era uma empresa gigantesca com centenas de programadoras(es).
Era um projeto de código aberto mantido por pouquíssimas pessoas.
Mesmo assim, seu código estava presente ou poderia ser utilizado indiretamente em:
milhões de sistemas.
Isso cria uma assimetria impressionante.
Um componente pequeno pode se tornar infraestrutura para organizações enormes.
Uma universidade.
Um banco.
Uma empresa de tecnologia.
Um governo.
Todos podem depender de um pequeno projeto mantido por poucas pessoas em seu tempo disponível.
O que a Administração pode aprender com o caso XZ?
À primeira vista, esse parece ser um assunto apenas para profissionais de Tecnologia da Informação.
Não é.
É também um excelente caso de:
gestão de riscos;
governança;
gestão de fornecedores;
controles internos;
continuidade;
gestão do conhecimento;
cadeia de suprimentos.
1. Conheça suas dependências
Uma organização sabe quais softwares utiliza?
E sabe:
de quais bibliotecas esses softwares dependem?
A quantidade de dependências pode ser enorme.
Por isso, surgiu uma prática chamada:
SBOM — Software Bill of Materials
ou:
Lista de Materiais de Software.
A lógica é semelhante à composição de um produto industrial.
Se ocorre um problema com determinado componente, precisamos conseguir responder:
Onde ele está sendo utilizado?
Sem inventário, a primeira pergunta durante uma vulnerabilidade vira:
“Será que temos isso em algum servidor?”
2. Atualização também é risco
Normalmente ensinamos:
mantenha tudo atualizado.
Continua sendo uma boa recomendação.
Mas o episódio XZ mostra uma nuance.
As versões antigas não estavam contaminadas.
As versões:
5.6.0
e
5.6.1
estavam.
Ou seja, naquele caso específico, quem havia atualizado primeiro poderia estar mais exposto.
Não significa que devemos deixar de atualizar sistemas.
Significa que uma política de atualizações precisa considerar:
criticidade;
testes;
homologação;
origem dos pacotes;
canais de distribuição;
estabilidade da versão.
Em ambientes sensíveis, “instalar imediatamente qualquer nova versão” também pode representar risco.
3. Não dependa apenas da reputação
XZ Utils era um projeto legítimo.
O problema estava dentro do próprio processo de desenvolvimento.
Isso ensina algo importante sobre controles:
confiança não substitui verificação.
Uma pessoa confiável pode ter uma conta comprometida.
Um fornecedor tradicional pode ser atacado.
Uma biblioteca conhecida pode receber código malicioso.
Uma boa estrutura de controle trabalha com a ideia de:
confiança + verificação.
4. Monitore comportamentos estranhos
A backdoor foi descoberta porque alguém observou:
algumas conexões SSH estavam consumindo CPU demais.
Era um detalhe.
Andres Freund poderia simplesmente ter pensado:
“deve ser algum bug”.
Mas investigou.
Segurança também depende da capacidade de perceber:
algo mudou.
Isso vale para TI e para Administração.
Despesas aumentando inesperadamente.
Prazo de atendimento se tornando maior.
Número de reclamações subindo.
Processamento ficando mais lento.
Indicadores anormais podem ser sintomas de problemas muito maiores.
5. Revisão independente importa
Código aberto possui uma vantagem importante:
em princípio, outras pessoas podem examinar o código.
Mas:
código disponível para revisão
não significa automaticamente:
código efetivamente revisado.
Milhares de projetos utilizavam XZ.
Pouquíssimas pessoas provavelmente acompanhavam cada mudança realizada em seu desenvolvimento.
A mesma lógica vale para organizações.
Um procedimento pode ter:
dupla conferência.
Um pagamento pode exigir:
segregação de funções.
Uma análise pode passar por:
revisão independente.
Não porque todas as pessoas sejam suspeitas.
Mas porque controles existem justamente para evitar que um único ponto de falha comprometa todo o sistema.
6. Pessoas sobrecarregadas também são risco organizacional
Projetos críticos mantidos por poucas pessoas criam riscos.
Se apenas uma pessoa conhece determinado sistema:
temos um risco.
Se apenas uma pessoa sabe executar determinado procedimento:
temos um risco.
Se apenas uma pessoa pode revisar determinado código:
temos um risco.
Isso se relaciona diretamente à:
gestão do conhecimento
e à:
continuidade organizacional.
A dependência excessiva de indivíduos cria fragilidade mesmo quando não existe qualquer intenção maliciosa.
7. Segurança também é governança
O episódio XZ mostra que segurança da informação precisa participar das decisões de gestão.
Não basta perguntar:
“Nosso antivírus está atualizado?”
Também é necessário perguntar:
Quais softwares utilizamos?
Quem pode instalá-los?
De onde vêm?
Como atualizamos?
Como identificamos componentes vulneráveis?
Quem acompanha alertas de segurança?
Quem decide quando uma atualização urgente precisa ser aplicada?
Como respondemos se uma biblioteca utilizada em dezenas de servidores for comprometida?
Essas são questões administrativas.
O alerta da DGTI/Uerj estava correto?
Considerando as informações disponíveis na manhã de 30 de março de 2024, o alerta da DGTI cumpriu exatamente aquilo que uma área de Tecnologia da Informação deveria fazer:
avisar rapidamente as(os) administradoras(es) para verificar seus ambientes.
Naquele momento ainda existiam muitas dúvidas sobre:
abrangência;
mecanismo;
autoria;
distribuições afetadas;
possíveis consequências.
Por isso, a recomendação de verificar a presença das versões 5.6.0 e 5.6.1 fazia sentido diante da incerteza existente.
Hoje, entretanto, sabemos que o alcance foi mais limitado do que se temia inicialmente e que muitas distribuições estáveis nunca chegaram a oferecer as versões comprometidas.
O caso deixou de ser uma emergência mundial em andamento.
Mas tornou-se um extraordinário:
estudo de caso.
E qual é a situação hoje?
Se um sistema Linux moderno está devidamente mantido e utiliza os repositórios oficiais atualmente disponíveis, não há motivo para instalar deliberadamente versões vulneráveis do XZ Utils 5.6.0 ou 5.6.1.
Essas são versões historicamente comprometidas.
O próprio projeto XZ identifica oficialmente os tarballs 5.6.0 e 5.6.1 como contendo a backdoor e não os distribui como versões seguras. (tukaani.org)
O registro CVE continua existindo porque vulnerabilidades não desaparecem do histórico quando são corrigidas.
Elas permanecem documentadas justamente para:
auditoria;
investigação;
gestão de ativos antigos;
análise forense;
inteligência de ameaças.
Em 2026, o NVD continua registrando especificamente as versões 5.6.0 e 5.6.1 como afetadas. (nvd.nist.gov)
O detalhe que mudou uma história
Talvez o aspecto mais fascinante de todo esse episódio seja pensar no que poderia ter acontecido se Andres Freund simplesmente tivesse ignorado aquele pequeno aumento no consumo de CPU.
Uma diferença de desempenho levou a:
uma investigação;
que encontrou:
uma biblioteca modificada;
que revelou:
uma backdoor;
que expôs:
um ataque à cadeia de suprimentos construído durante anos.
E tudo foi identificado antes que as versões comprometidas chegassem amplamente às distribuições Linux estáveis.
Foi um caso no qual:
curiosidade técnica + investigação + compartilhamento rápido da informação
evitaram um problema potencialmente muito maior.
Para guardar
O CVE-2024-3094 não deve ser lembrado apenas como:
“aquele problema do XZ Utils”.
Ele demonstra que uma organização pode possuir excelente segurança interna e continuar vulnerável por meio de seus fornecedores e dependências.
Também demonstra que:
pequenos componentes podem sustentar grandes infraestruturas;
confiança precisa ser acompanhada de controles;
dependências precisam ser conhecidas;
atualizações precisam ser gerenciadas;
conhecimento não deveria ficar concentrado em poucas pessoas;
e comportamentos aparentemente pequenos podem revelar grandes problemas.
Para quem trabalha com Administração, fica uma lição especialmente importante:
gestão de riscos não consiste apenas em imaginar o que pode dar errado dentro da organização. É preciso compreender também de quem — e de quê — a organização depende para continuar funcionando.
Matéria original
Este texto foi inspirado no alerta publicado pela Diretoria Geral de Tecnologia da Informação — DGTI/Uerj em março de 2024:
Aos administradores de sistemas Linux
https://www.dgti.uerj.br/aos-administradores-de-sistemas-linux/
Para saber mais
National Vulnerability Database — CVE-2024-3094
Registro oficial da vulnerabilidade no NIST. (nvd.nist.gov)
Divulgação original de Andres Freund — oss-security
Mensagem que apresentou publicamente a descoberta em 29 de março de 2024. (openwall.com)
XZ Utils
Página oficial do projeto com o registro histórico da backdoor. (tukaani.org)



