Incidente do backdoor no XZ: resultados da análise inicial
(securelist.com)- O backdoor no XZ Utils/liblzma foi divulgado em 29 de março de 2024 na lista de e-mails OSS-security da Openwall, e é bastante provável que o objetivo final do invasor fosse implantar capacidade de execução remota de código no sshd, o servidor OpenSSH, em distribuições baseadas em systemd
- A cadeia de infecção foi composta por uma injeção em múltiplas etapas usando arquivos de teste e a infraestrutura de build do repositório XZ, passando por
build-to-host.m4,bad-3-corrupt_lzma2.xzegood-large_compressed.lzma, até que um arquivo objeto malicioso fosse vinculado aoliblzmadurante a compilação - O XZ 5.6.0 e 5.6.1 com backdoor foi distribuído em builds beta e experimentais de alguns grandes fornecedores, e o CVE-2024-3094 recebeu severidade 10
- O backdoor binário é carregado abusando do IFUNC da GLIBC e do caminho de chamada de
cpuid, e depois tenta monitorar conexões na máquina infectada por meio de hooks em funções relacionadas a OpenSSL/libcrypto - O código malicioso verifica se
/usr/bin/sshdestá em execução e se existe uma variável de ambiente de kill switch, além de dificultar análise e detecção com processamento de strings baseado em trie, resolução dinâmica de símbolos e patch em tempo de execução dertdl-audit
Visão geral do incidente e escopo do impacto
- Em 29 de março de 2024, a descoberta do backdoor no XZ foi divulgada por meio desta mensagem na lista de e-mails OSS-security da Openwall
- XZ é um utilitário de compressão integrado a várias distribuições Linux importantes
- O ponto central do risco é que o
liblzmacom backdoor podia se conectar ao processosshddo servidor OpenSSH em algumas distribuições baseadas em systemd- Ubuntu, Debian e RedHat/Fedora Linux aplicam patches no OpenSSH para usar recursos do systemd, o que o faz depender dessa biblioteca
- Arch Linux e Gentoo são considerados não afetados
- É bastante provável que o objetivo final do invasor fosse adicionar uma função de execução remota de código no sshd que outras pessoas não pudessem usar
- Ao contrário de outros ataques à cadeia de suprimentos centrados em um único patch malicioso, pacote falso ou pacote de typosquatting, este caso se aproxima de uma operação em múltiplas etapas que quase conseguiu comprometer servidores SSH no mundo todo
Como o backdoor foi inserido
- O backdoor no
liblzmafoi inserido em dois níveis, usando ao mesmo tempo o processo de build e arquivos de teste- O código-fonte da infraestrutura de build que gera o pacote final foi modificado com a adição de
build-to-host.m4 - Scripts ocultos e componentes binários escondidos dentro de arquivos de teste eram extraídos durante a compilação
- O código-fonte da infraestrutura de build que gera o pacote final foi modificado com a adição de
- O fluxo de infecção gira em torno de três arquivos
build-to-host.m4: script de build que extrai o script da etapa seguintebad-3-corrupt_lzma2.xz: arquivo de teste com um shell script ocultogood-large_compressed.lzma: arquivo de teste com um objeto binário malicioso oculto
- O componente binário malicioso extraído era vinculado à biblioteca legítima durante a compilação e podia assim chegar aos repositórios Linux
- Grandes fornecedores distribuíram esse componente malicioso em builds beta e experimentais
- À invasão do XZ Utils foi atribuído o CVE-2024-3094, com severidade máxima de 10
Linha do tempo principal
- 19 de janeiro de 2024: o novo maintainer
jiaT75migra o site do XZ para GitHub Pages - 15 de fevereiro de 2024:
build-to-host.m4é adicionado ao.gitignore - 23 de fevereiro de 2024: são adicionados dois “arquivos de teste” contendo a etapa do script malicioso
- 24 de fevereiro de 2024: XZ 5.6.0 é lançado
- 26 de fevereiro de 2024: entra em
CMakeLists.txtum commit que interfere no recurso de segurança Landlock - 4 de março de 2024: o backdoor passa a causar problemas relacionados ao Valgrind
- 9 de março de 2024: os dois arquivos de teste são atualizados, a função CRC é modificada e o problema com o Valgrind é “corrigido”
- 9 de março de 2024: XZ 5.6.1 é lançado
- 28 de março de 2024: o bug é descoberto e Debian e RedHat são notificadas
- 28 de março de 2024: o Debian faz rollback do XZ 5.6.1 para a versão 5.4.5-0.2
- 29 de março de 2024: o e-mail público é publicado na lista OSS-security
- 29 de março de 2024: a RedHat confirma que uma versão do XZ com backdoor foi distribuída no Fedora Rawhide e no Fedora Linux 40 beta
- 30 de março de 2024: o Debian interrompe os builds e inicia o processo de rebuild
- 2 de abril de 2024: o principal desenvolvedor do XZ reconhece o incidente do backdoor
As 3 etapas da cadeia de infecção
-
Etapa 1:
build-to-host.m4modificado- Os releases do repositório oficial do XZ no GitHub incluíam os arquivos de teste maliciosos, mas no início eles eram inofensivos porque não tinham chance de ser executados
- O código malicioso que inicializa a infecção parece ter sido incluído no release fornecido por
xz[.]tukaani.org, controlado porjiaT75 - A maioria das distribuições usava essa URL, e o release baixado incluía o arquivo
build-to-host.m4com código malicioso build-to-host.m4é executado durante o processo de build, corrige os dados “corrompidos” debad-3-corrupt_lzma2.xzcomtre depois descompacta comxz -d- O resultado da descompressão contém um shell script que depois será executado com
/bin/bash
-
Etapa 2: shell script inserido
- O script inserido pelo arquivo
.m4malicioso verifica se está sendo executado em uma máquina Linux e dentro do processo de build pretendido - A execução da próxima etapa usa
good-large_compressed.lzma - Esse arquivo está compactado normalmente com XZ, mas os dados descompactados contêm dados lixo
- O script executa um pipeline de
headcomevalpara extrair os dados - Cada comando
headignora os próximos 1024 bytes ou extrai os próximos 2048 bytes ou 724 bytes - No total, são extraídos 33.492 bytes
tailmantém os últimos 31.265 bytes do arquivo e ignora o restante- Em seguida,
traplica substituições básicas para desfazer a ofuscação, e um segundo comando XZ descompacta os bytes transformados como um stream raw delzma, enviando o resultado ao shell
- O script inserido pelo arquivo
-
Etapa 3: extração do objeto do backdoor
- O shell script da etapa final verifica várias condições para confirmar se está sendo executado no ambiente esperado
- Ele verifica se o projeto está configurado para usar IFUNC
- Verifica se a compilação está sendo feita com GCC
- Depois confirma a existência, no projeto, de arquivos específicos que o script vai usar
- Essa etapa extrai um arquivo objeto escondido em outro offset de
good-large_compressed.lzma - O procedimento de extração executa vários comandos em sequência, passando a saída de cada um como entrada do próximo
- Extrai
good-large_compressed.lzmacom a ferramenta XZ - Usa
eval $ie várias chamadas ahead - Descriptografa os dados binários com um algoritmo customizado semelhante a RC4
- Extrai novamente o arquivo compactado já descriptografado com XZ
- Remove alguns bytes do início e salva o resultado como
liblzma_la-crc64-fast.o - Por fim, o script modifica a função
is_arch_extension_supportedno arquivocrc_x86_clmul.hdoliblzma - Ele troca a chamada
__get_cpuidpor_get_cpuid, removendo um sublinhado - Essa mudança permite que o objeto do backdoor seja vinculado à biblioteca
Como o backdoor binário é carregado
- O código original do XZ tem funções especiais para cálculo de CRC,
lzma_crc32elzma_crc64 - As duas funções são armazenadas na tabela de símbolos ELF com o tipo IFUNC da GLIBC
- O IFUNC permite que o linker dinâmico escolha dinamicamente qual função usar ao carregar uma biblioteca compartilhada
- O XZ usa esse mecanismo para decidir se deve usar funções CRC otimizadas depois de verificar recursos modernos do processador, como CLMUL, SSSE3 e SSE4.1
- A checagem dos recursos do processador exige a instrução
cpuid, e o wrapper__get_cpuidfornecido pela GLIBC é chamado - Quando o script malicioso troca
__get_cpuidpor_get_cpuid, a chamada do código passa a ser ligada ao símbolo_get_cpuiddentro do arquivo objeto do backdoor - O código inicial do backdoor é chamado duas vezes porque
lzma_crc32elzma_crc64usam a mesma função modificada_get_cpuid- Um contador simples verifica se ele já foi executado
- Quando o IFUNC de
lzma_crc64chama_get_cpuide o contador vale 1, começa a etapa que redireciona para o ponto de entrada final
Comportamento em tempo de execução e alvos dos hooks
- O backdoor inicializa estruturas que contêm informações essenciais sobre o processo em execução
- Ele encontra o endereço da Global Offset Table(GOT) por offsets hardcoded e localiza ali o ponteiro de
cpuid - Em seguida, troca esse ponteiro pela função maliciosa principal, fazendo com que a função maliciosa seja chamada como se estivesse chamando
cpuid - O objetivo principal é aplicar hooks em funções específicas para poder monitorar conexões que chegam à máquina infectada
- As funções-alvo estão relacionadas ao
libcryptoRSA_public_decrypt: usada para descriptografar um texto cifrado assinado com chave privadaEVP_PKEY_set1_RSA: usada para definir uma chave RSA em um contexto específico- Não aparece em versões mais novas do servidor SSH, mas é usada em uma ferramenta independente de geração de chaves SSH
RSA_get0_key: usada para obter uma chave RSA
- O processo de hook exige acesso a várias estruturas internas e manipulação de estruturas específicas do processo, e o código malicioso também executa checagens para evitar análise
Verificações do ambiente de execução e técnicas de evasão de análise
-
Verificação de
sshde kill switch- O backdoor começa fazendo parsing do linker dinâmico
ld-linux, que resolve endereços de símbolos dinamicamente - Ele verifica se o ambiente de execução atual atende aos critérios
- Confirma se o processo atual é
/usr/bin/sshd - Verifica se existe um kill switch
- O nome do processo atual é extraído de
argv[0] - Todas as variáveis de ambiente do processo são analisadas para verificar se correspondem a valores da tabela interna de strings
- Se houver uma variável de ambiente correspondente ou se o processo não for
sshd, o código malicioso interrompe a execução - A única variável da tabela interna,
yolAbejyiejuvnup=Evjtgvsh5okmkAvj, funciona neste contexto como kill switch
- O backdoor começa fazendo parsing do linker dinâmico
-
Processamento de strings baseado em trie
- Uma das características do backdoor é usar uma única estrutura trie para operações com strings
- Em vez de comparar diretamente constantes como nomes de função ou usar hash de strings, ele verifica se o resultado da busca na trie é igual a um valor constante específico
- O valor mágico do cabeçalho ELF retorna 0x300 na trie
- O nome da função
systemcorresponde ao valor retornado 0x9F8 - A trie é usada não só para comparação, mas também para encontrar strings dentro do binário hospedeiro
- Por exemplo, funções que usam ponteiros para strings como
ssh-2.0procuram essas strings no binário hospedeiro para não deixar dados suspeitos no corpo do backdoor - A implementação usa uma máscara de bits de 16 bytes
- Cada metade corresponde aos intervalos de bytes de entrada
0x00-0x3Fe0x40-0x7F - Os nós-folha da trie têm 2 bytes; 3 bits são usados como flags e o restante é reservado para o valor ou para a posição do próximo nó
Resolução de símbolos e hook de rtdl-audit
-
Rotinas de resolução de símbolos
- O backdoor tem pelo menos 3 rotinas de resolução de símbolos para encontrar estruturas ELF Symbol
- Todas as funções de resolução recebem como entrada uma chave a ser buscada na trie
- Uma das funções percorre todos os símbolos até encontrar o símbolo com a chave desejada e, ao encontrá-lo, retorna a estrutura
Elf64_Sym - Essa estrutura é então usada para preencher estruturas internas do backdoor e armazenar os ponteiros de função necessários
- Esse processo é semelhante às rotinas de hash de API comuns em ameaças para Windows
- Depois, o backdoor procura várias funções OpenSSL
libcryptoque serão usadas em rotinas criptográficas - Ele acompanha a quantidade de funções encontradas e resolvidas, e usa esse valor para decidir se a execução segue normalmente ou é interrompida
-
Allocator falso abusando de
lzma_alloc- Outro resolvedor de símbolos abusa da própria função
lzma_allocdoliblzma lzma_allocajuda a alocar memória com eficiência usando o allocator padrãomallocou um allocator customizado- No backdoor do XZ, essa função passa a operar como outro resolvedor de símbolos por meio de um allocator falso
- O parâmetro originalmente usado como “tamanho da alocação” é na verdade usado como chave de símbolo dentro da trie
- Esse truque tem como objetivo dificultar a análise do backdoor
- O backdoor resolve símbolos dinamicamente em tempo de execução, sem ficar limitado a resolver tudo de uma vez ou apenas quando necessário
- Os alvos incluem desde funções OpenSSL legítimas até
system, usada para executar comandos na máquina
- Outro resolvedor de símbolos abusa da própria função
-
Patch em tempo de execução de
rtdl-audit- Para fazer hook de funções, o backdoor usa o recurso rtdl-audit do linker dinâmico
- Em geral, o
rtdl-auditpermite que desenvolvedores criem uma biblioteca compartilhada customizada para receber notificações de eventos do linker, como resolução de símbolos - Em vez de criar uma biblioteca compartilhada separada, o backdoor do XZ faz um patch em tempo de execução na interface padrão já registrada na memória para sequestrar a rotina de resolução de símbolos
- A estrutura maliciosa
audit_ifacearmazenada na variável globaldl_auditda área de memória do linker dinâmico contém o endereço do callbacksymbind64 - Quando o linker dinâmico chama esse callback, todas as informações de símbolo passam para o controle do backdoor, que retorna endereços maliciosos para as funções-alvo e assim conclui o hook
- Os endereços de
dl_auditedl_nauditsão obtidos por desassemblagem das funçõesdl_mainedl_audit_symbind_alt - O backdoor inclui um desmontador interno mínimo para decodificar instruções, amplamente usado ao procurar valores específicos como endereços
*audit
Distribuições com backdoor confirmadas e informações de detecção
-
Distribuições de código-fonte com backdoor
- xz-5.6.0
- MD5:
c518d573a716b2b2bc2413e6c9b5dbde - SHA1:
e7bbec6f99b6b06c46420d4b6e5b6daa86948d3b - SHA256:
0f5c81f14171b74fcc9777d302304d964e63ffc2d7b634ef023a7249d9b5d875
- MD5:
- xz-5.6.1
- MD5:
5aeddab53ee2cbd694f901a080f84bf1 - SHA1:
675fd58f48dba5eceaf8bfc259d0ea1aab7ad0a7 - SHA256:
2398f4a8e53345325f44bdd9f0cc7401bd9025d736c6d43b372f4dea77bf75b8
- MD5:
- xz-5.6.0
-
Principais artefatos analisados
bad-3-corrupt_lzma2.xz:86fc2c94f8fa3938e3261d0b9eb4836be289f8aebuild-to-host.m4:b4dd2661a7c69e85f19216a6dbbb1664good-large_compressed.lzma:540c665dfcd4e5cfba5b72b4787fec4fliblzma_la-crc64-fast.o:212ffa0b24bb7d749532425a46764433
-
Bibliotecas conhecidas com backdoor
- Debian Sid
liblzma.so.5.6.0- MD5:
4f0cf1d2a2d44b75079b3ea5ed28fe54 - SHA1:
72e8163734d586b6360b24167a3aff2a3c961efb - SHA256:
319feb5a9cddd81955d915b5632b4a5f8f9080281fb46e2f6d69d53f693c23ae
- MD5:
- Debian Sid
liblzma.so.5.6.1- MD5:
53d82bb511b71a5d4794cf2d8a2072c1 - SHA1:
8a75968834fc11ba774d7bbdc566d272ff45476c - SHA256:
605861f833fc181c7cdcabd5577ddb8989bea332648a8f498b4eef89b8f85ad4
- MD5:
- Debian Sid
-
Nomes de detecção
- Produtos da Kaspersky detectam objetos maliciosos relacionados ao ataque como HEUR:Trojan.Script.XZ e Trojan.Shell.XZ
- O Kaspersky Endpoint Security for Linux detecta o código malicioso na memória do processo SSHD como MEM:Trojan.Linux.XZ como parte da tarefa Critical Areas Scan
- A regra Yara fornecida é
liblzma_get_cpuid_function, voltada a encontrar a função maliciosaget_cpuidrelacionada ao CVE-2024-3094
1 comentários
Opiniões do Hacker News
Esta frase parece, na verdade, minimizar o que aconteceu
Mais assustador do que o aspecto técnico do backdoor é a quantidade e o nível de engenharia social envolvidos. O backdoor foi o produto final, e ele só pôde ser inserido porque, naquele momento, todo o projeto xz já estava sob controle de agentes maliciosos, isto é, “Jia Tan” e seu entorno, havia um longo tempo. Eles travaram uma guerra psicológica contra o mantenedor por mais de um ano, e nem o mantenedor nem ninguém mais percebeu
Parece coisa de romance de espionagem, e se algo assim é possível, dá vontade de pensar no que mais pode estar acontecendo em outros projetos neste exato momento
O próprio código do backdoor revela a mesma forma de pensar. Não se trata apenas de parecer inofensivo; ele constrói ativamente uma narrativa sobre o que aparenta fazer por meio de mensagens de commit, comentários, nomes de variáveis e escolhas de comandos, enquanto na prática faz algo completamente diferente. A estrutura foi feita para levar quem analisa o código primeiro a duvidar da própria compreensão, depois a suspeitar de um bug, e só muito mais tarde a suspeitar de má-fé
Espero que alguma agência de inteligência esteja investigando esse caso mais a fundo
É frustrante ver, em toda thread do HN sobre backdoors, gente descartando essa possibilidade como paranoia ou chapéu de papel-alumínio. Tratam como se isso não acontecesse, mas desta vez foi apenas um caso concreto que foi pego; os que ainda não foram descobertos são incontáveis
Neste caso, por ser um projeto open source, foi relativamente mais fácil detectar, e ainda assim foi preciso sorte. Agora pense em produtos de código fechado: inserir um backdoor passa a ser apenas uma questão de infiltrar ou pressionar uma organização. Isso acontece com frequência. Ninguém quer acreditar, mas é comum. Quem já trabalhou em empresas de infraestrutura tecnológica provavelmente tem algumas histórias. É difícil falar por causa de NDA ou motivos ainda piores, mas isso de fato acontece
Pode ser o resultado da obsessão de alguém, ou o trabalho de uma empresa privada de segurança ou de um agente estatal que faz esse tipo de coisa como trabalho de escritório, das 9 às 5, em vários projetos
Até agora, é natural que a atenção tenha se concentrado no sucesso operacional do backdoor e em como ele atingia seu objetivo
Ainda assim, eu gostaria de ver uma análise mais profunda dos erros e das partes excessivamente engenheiradas. Na entrevista de Bryan Cantrill [1], Andrés diz que isso parece um componente de backdoor pronto, que nem foi feito com pleno conhecimento do modo de distribuição, e por isso há várias partes burras. Por exemplo, a busca na tabela de símbolos que o levou à investigação
Da mesma forma, também queria entender por que cortaram 48 bytes com RC4 [2]
Gostaria de ouvir discussões sobre como isso poderia ter sido feito melhor, se tivessem mais tempo ou uma equipe melhor, ou em que pontos eles erraram de forma mais grave
[1] https://youtu.be/jg5F9UupL6I?si=gvXsYFXgagkGOMd4
[2] https://twitter.com/matthew_d_green/status/17744729080201014...
Se entendi corretamente, uma medida útil seria fazer com que cada biblioteca de linkagem dinâmica tenha sua própria GOT e marcar a tabela como somente leitura quando a linkagem dinâmica terminar. Em outras palavras, impedir que se faça patch em entradas ifunc do outro lado da fronteira dinâmica
Isso poderia melhorar a segurança da cadeia de suprimentos para código que é linkado em algum lugar, mas não chega a ser executado
Indo além, talvez fosse melhor implementar ifunc de forma declarativa, para que não fosse possível disparar execução arbitrária de código em cada biblioteca durante a linkagem. A implementação atual deve ser difícil de mudar por causa da compatibilidade retroativa, mas no longo prazo isso parece algo que poderia ser introduzido em camadas. Por exemplo, se uma certa biblioteca fosse compilada com um bit de recurso “ifunc de linkagem declarativa”, o linker dinâmico falharia na execução caso nem todas as bibliotecas conectadas tivessem o mesmo flag de recurso
Hoje, a maioria das builds de bibliotecas funciona executando scripts extremamente complexos e obscuros, que exigem ambientes Turing-completos. Isso dá ao atacante uma superfície de ataque praticamente infinita, e quando o processo de build é comprometido, surgem oportunidades
Ajudaria migrar para um processo de build declarativo em que o executor fosse apenas uma máquina de estados restrita. Também valeria considerar a exigência de que todo bloco de código-fonte fosse reproduzível
A partir desse momento, todas as defesas perdem o sentido. Se quiser, ele pode remapear a GOT como gravável de novo, e mesmo que esse tipo de ação seja detectado como “suspeito” ou que o sistema operacional impeça essa transição, o código injetado ainda pode inverter o fluxo de controle de centenas de outras maneiras. Leitura/escrita arbitrária, execução de código, tudo é possível. Não existe mitigação de segurança que impeça uma invasão nesse estágio. Se quiser, ele pode até exfiltrar a chave privada e enviá-la diretamente ao atacante, ou abrir um shell. Tentar projetar proteção nesse estágio é perda de tempo
O ponteiro de função correto é carregado na primeira chamada e inserido na tabela no lugar do stub, e isso pode acontecer em um futuro arbitrariamente distante. De fato, em ecossistemas grandes de bibliotecas, como apps gtk, a maioria das funções linkadas nunca chega a ser chamada
-march=nativeé comum, e definir-multiarchnos USE flags da glibc torna simples desabilitar ifunc. Não vi impactos negativosEm relação às 3 primeiras etapas, este texto não acrescenta muito ao que já se sabia nas últimas 2 semanas. É mais um bom texto de organização com fluxograma
Mas a parte que analisa o binário nesse nível de detalhe parece nova
Como será que o código-fonte mostrado ali foi produzido? Rodaram um disassembler, entenderam o que o código fazia e depois trocaram todos os nomes por nomes descritivos? Para algo feito em 2 semanas, parece um resultado bem impressionante
Global Research & Analysis Team, Kaspersky Lab
https://securelist.com/author/great/
Como quem escreveu parece ser a equipe de análise de malware da Kaspersky Lab, é bem provável que sejam muito bons em engenharia reversa de binários
https://hex-rays.com/ida-pro/
O que eu realmente queria saber é o que exatamente causou o atraso inicial no SSH que desencadeou a investigação do xz. Quem descobriu isso?
Segundo quem fez a engenharia reversa do código, a mensagem de comando também precisava ser vinculada à chave de host do SSH. Então, se a chave de host fosse uma chave RSA, ele talvez também executasse uma operação adicional de descriptografia RSA por conexão
Se for isso, parece suficiente para explicar a latência
É uma forma fácil de descobrir de fora se um servidor foi infectado, sem nem tentar injetar código primeiro
Os autores conhecem as estruturas internas da glibc em um nível muito profundo. É o tipo de coisa que você só sabe estando mergulhado até o pescoço no código-fonte, e há muitas técnicas novas também
O parser ELF customizado e o disassembler são complexos demais; é difícil imaginar que esse código não tenha sido usado antes em outro lugar ou que nunca mais venha a ser reutilizado
Fico me perguntando se esse caso vai receber uma investigação séria no nível que merece, mas não parece que vai
Alguém analisou o bug no backdoor que acabou causando o erro no Valgrind e a lentidão no SSH, e que no fim revelou tudo isso?
A “correção” do Valgrind foi desativar o ifunc, e com isso o backdoor foi desativado, então o erro desapareceu
Pelo que sei, a lentidão vinha de todas as consultas de símbolos e instruções executadas pelo backdoor
Vendo por outro ângulo, considerando o esforço que o atacante colocou em evitar detecção nos scripts e no código, o projeto inteiro pode ter sido uma distração ou uma contingência enquanto várias tentativas aconteciam ao mesmo tempo
Como ficar um passo à frente de algo assim? O foco da comunidade no SSHD afeta outras partes do sistema como um todo? E outros aspectos técnicos ou sociais?
O chapéu de papel-alumínio é divertido
Ou comprar código fechado de algum lugar como a Microsoft e torcer para que eles tenham os recursos e a disposição para revisar o código de forma mais rigorosa
E sempre existe a abordagem de ter uma ótima equipe de operações de segurança para detectar atividade de rede estranha e tentativas de elevação de privilégio
Mas contribuidores que não têm histórico nem pegadas fora do projeto em que estão trabalhando deveriam passar a ser vistos como um sinal de alerta
Grupos antigos como GOBBLES, ADM, ac1db1tch3z, ~el8 já faziam esse tipo de coisa, e “pesquisadores de segurança” privados como a isec.pl também
O problema agora é que atores estatais estão explorando o capitalismo corporativo que criou uma era em que projetos de infraestrutura são sustentados por trabalho mal remunerado. Os agentes maliciosos têm recursos praticamente ilimitados para atingir seus objetivos
Isso acabou gerando a demanda e o surgimento de organizações como NSO e Zerodium
Antes disso, exploits e backdoors quase não tinham valor, e hackers esperavam patrocínio ou contratação por empresas como a Qualys
Já vi algumas análises do Google sobre hacks de vulnerabilidades zero-day, e elas também eram absurdamente impressionantes, mas este ataque parece ser um dos maiores de todos os tempos
Vi que o repositório do xz voltou ao GitHub, e o Lasse com um novo contribuidor estavam organizando as coisas. Removeram o suporte a ifunc e fizeram commit no repositório do código de geração dos arquivos de teste para que os arquivos de teste possam ser criados sem blobs. Parece que estão trabalhando na direção certa