Cibersegurança

Como o código malicioso entra no software de confiança pela cadeia de suprimentos

Susan Hill

Um ataque à cadeia de suprimentos não invade o software que você usa. Ele envenena uma das peças com que esse software é construído e então espera que o processo normal de atualização o leve até a sua máquina. O aplicativo instala sem problemas, a assinatura continua válida e a atualização chega pelo canal oficial. O código malicioso viaja junto. É essa inversão que torna a técnica tão eficaz: transforma a confiança que faz o software funcionar no ponto que é explorado.

Quase nada do que você executa hoje é escrito por inteiro pela empresa cujo nome aparece na tela. Um único aplicativo pode arrastar consigo centenas ou milhares de pacotes de código aberto, cada um mantido por desconhecidos e cada um com mais pacotes atrás. Os desenvolvedores raramente leem esse código; confiam no registro de onde ele veio e no número de versão que o acompanha. Quem se infiltra em qualquer elo dessa cadeia atinge de uma só vez todos os que estão abaixo, e por isso uma única peça envenenada pode afetar dezenas de milhares de projetos antes que alguém perceba.

Os pontos de entrada se agrupam em poucos padrões. O typosquatting coloca um pacote malicioso com um nome a uma tecla de distância do popular e espera pelo erro de digitação. A confusão de dependências explora como as ferramentas resolvem os nomes e as engana para que peguem um pacote público no lugar do privado da empresa. O sequestro de contas se apodera das credenciais de um mantenedor real e distribui o malware como uma atualização de rotina; no início de 2026, o muito usado pacote axios chegou a publicar uma versão comprometida depois que a máquina do seu mantenedor principal foi violada por engenharia social. E o envenenamento da linha de montagem mira os sistemas automáticos que montam e publicam o software, onde um único passo corrompido atinge todos os projetos que dependem dele.

A linha de montagem virou o alvo mais cobiçado justamente por estar acima de todo o resto. Quando o popular componente do GitHub Actions tj-actions/changed-files foi comprometido em 2025, os atacantes reescreveram suas etiquetas de versão para apontar a código malicioso e extraíram segredos dos logs de compilação de mais de vinte mil repositórios: chaves de acesso, tokens e chaves privadas, tudo em texto puro. Uma campanha posterior, batizada de Megalodon pelos pesquisadores, transformou o GitHub Actions numa porta dos fundos capaz de se propagar sozinha, chegando a 5.561 repositórios em cerca de seis horas. A máquina que constrói o seu software pode ser subvertida com a mesma facilidade que o próprio software.

As ferramentas que os desenvolvedores usam todos os dias também estão na zona de impacto. O GlassWorm, detectado pela primeira vez no fim de 2025, se espalhou por extensões do Visual Studio Code nas lojas do OpenVSX e da Microsoft. Escondia sua carga com caracteres Unicode invisíveis, de modo que as linhas maliciosas eram literalmente ilegíveis no editor e passavam pela revisão humana. Uma vez instalado, roubava credenciais do npm, do GitHub e do Git e as usava para infectar automaticamente mais pacotes e extensões, o traço que define um worm. Como os editores atualizam as extensões em segundo plano e em silêncio, as vítimas recebiam as versões envenenadas sem clicar em nada. Outra extensão envenenada do VS Code serviu para roubar cerca de 3.800 repositórios internos do próprio GitHub.

O que torna esses ataques tão difíceis de pegar é que cada passo, isoladamente, parece legítimo. O pacote está assinado. A atualização vem do registro real. A conta do mantenedor é autêntica. As defesas tradicionais procuram arquivos já conhecidos como nocivos e malware evidente, mas os ataques à cadeia de suprimentos se escondem dentro de código confiável, esperado e muitas vezes invisível, que chega exatamente quando e como o software deve chegar. Pior ainda: o conselho de segurança de sempre, atualizar na hora, é justamente o mecanismo de que o atacante depende. Pela primeira vez, instalar a versão mais recente não é, sem ressalvas, a escolha segura.

Quem defende foi convergindo para um punhado de práticas que funcionam. Os arquivos de bloqueio fixam cada dependência a uma versão exata e verificada, para que o instalador baixe apenas o que foi revisado, e não o mais novo. Desativar os scripts de instalação automáticos corta a via mais comum pela qual um pacote malicioso executa código assim que chega. Fixar as GitHub Actions a um hash de commit específico, em vez de uma etiqueta móvel, anula o truque de reescrever etiquetas. Uma lista de materiais do software, o inventário detalhado de cada componente dentro de uma build, permite a uma equipe saber em minutos se está exposta quando o próximo incidente é revelado. Muitas das organizações que escaparam dos ataques recentes não fizeram nada de exótico: compilavam a partir de um arquivo de bloqueio confirmado e trabalhavam atrás de um proxy de registro que colocava em quarentena os pacotes recém-publicados.

Para quem não programa, a proteção é sobretudo indireta, mas a lição não é. A cadeia de suprimentos de software é hoje um campo de batalha de primeira linha, e são as empresas que constroem os aplicativos do seu celular e do seu notebook que precisam protegê-la. A resposta sensata não é o pânico nem o velho reflexo de atualizar tudo assim que aparece um aviso. É preferir o software de equipes que tornam público o que entregam e como constroem, e tratar a ideia de fonte confiável como algo que precisa ser conquistado em cada elo, e não como uma propriedade que desce sozinha pela cadeia.

A resposta do setor está tomando forma em torno da proveniência: uma prova criptográfica de onde nasceu um trecho de código e de como ele foi construído, verificada automaticamente antes de se instalar qualquer coisa. É a mesma ideia que há uma geração tornou seguro o tráfego na web, aplicada agora à linha de montagem do próprio software. Até essa prova ser universal, cada instalação continua sendo um ato de confiança em pessoas que você nunca vai conhecer.

Discussão

Há 0 comentários.