Em 10 de maio de 2026, um pull request malicioso deu início a um ataque supply chain npm contra bibliotecas do TanStack, como Router e Query. O código roubava segredos de CI/CD e se espalhava pelas dependências. No dia 11, o problema já estava resolvido — mas o estrago potencial era enorme.
O que foi o ataque supply chain npm contra o TanStack?
O ataque supply chain npm contra o TanStack começou em 10 de maio de 2026, quando uma conta suspeita abriu um pull request malicioso no repositório do TanStack Router. O código infectou pacotes oficiais publicados no npm e roubou segredos de projetos que instalaram as versões comprometidas. Segundo o relato do video de Felipe Rocha, do canal Full Stack Club, bibliotecas como TanStack Router, TanStack Query e TanStack Start foram afetadas.
O caso assustou porque atinge ferramentas presentes no dia a dia de quem trabalha com React, Next.js e Node.js. O autor do vídeo mesmo reforça que não é especialista em segurança e recomenda ler o material oficial para os detalhes técnicos. Ainda assim, a sequência de eventos que ele descreve serve de aula prática sobre como um ataque de cadeia de suprimentos funciona.
A lição central é desconfortável: você não precisa ter código ruim para ser vítima. Basta que uma das suas dependências, ou a pipeline que publica uma dependência, seja comprometida em algum ponto da cadeia.
Como o pull request envenenou o cache do GitHub Actions?
O vetor do ataque foi a combinação entre um pull request e o cache de builds das GitHub Actions. Quando um pull request é aberto, é comum a pipeline rodar testes, build e type check automaticamente. Para acelerar esse processo, o cache de dependências é reutilizado entre execuções diferentes.
O fluxo descrito no vídeo funcionou assim:
- A conta atacante criou um fork do TanStack Router e abriu um pull request com um script
preparemalicioso, que apontava para um arquivo chamadotstackrunner.js. - Ao abrir o PR, a pipeline executou um install de dependências, e o script
preparerodou junto. - Esse script injetou código malicioso no cache do GitHub Actions.
- O cache é compartilhado entre runs, então execuções seguintes — inclusive o build oficial que gera a publicação no npm — consumiram o conteúdo contaminado.
- O pacote publicado no npm saiu com o malware embutido.
O detalhe perverso é que o pull request nem foi mesclado. Ele serviu apenas de cavalo de Troia para chegar ao cache. Como pipelines mais rápidas custam menos, o cache é uma prática recomendada — e foi exatamente essa otimização que virou porta de entrada.
Por que o script prepare é um vetor de ataque?
O script prepare faz parte do ciclo de vida de pacotes documentado pelo npm: ele roda automaticamente durante a instalação de dependências, inclusive com pnpm install e equivalentes. Isso significa que baixar um pacote já executa código no seu computador, antes de você usar qualquer função dele.
No caso do TanStack, o prepare malicioso rodou dentro da pipeline, não na máquina do desenvolvedor — pelo menos no primeiro estágio. Mas, depois que o pacote comprometido foi publicado, quem instalou as versões afetadas executou o malware localmente em um simples npm install.
Esse é o motivo pelo qual auditorias de dependências olham para scripts de ciclo de vida. Um código que roda na instalação tem acesso ao ambiente inteiro: variáveis de ambiente, arquivos de configuração e credenciais salvas no projeto.
O que o malware fazia depois de instalado?
De acordo com o relato do vídeo e o postmortem publicado pelo time do TanStack, o malware tinha dois comportamentos principais: roubar segredos e se espalhar.
- Roubo de credenciais: o código capturava secrets do projeto, como senhas de banco de dados e tokens de CI/CD. Por isso, a orientação imediata foi regenerar todas as variáveis sensíveis de quem instalou as versões afetadas.
- Propagação em cadeia: depois de comprometer um pacote, o malware tentava comprometer as dependências desse pacote, e as dependências das dependências. É esse efeito bola de neve que torna um ataque de supply chain tão grave para todo o ecossistema.
- Alteração de arquivos locais: o malware também modificava o arquivo
settings.do Claude Code, a ferramenta de codificação da Anthropic que roda no terminal, inserindo um hook desession startcom código malicioso.
Esse último ponto é inusitado e serve de alerta: ferramentas de IA no terminal leem arquivos de configuração e executam comandos, então viram alvo interessante. Quem usou Claude Code depois de instalar os pacotes comprometidos deveria revisar o settings. à procura de hooks que não criou.
Qual foi a linha do tempo do incidente?
A janela de exposição foi curta, mas suficiente para causar danos. Conforme relatado no vídeo, com base no postmortem oficial, o pull request malicioso foi aberto em 10 de maio de 2026 e a equipe do TanStack resolveu o problema já no dia 11 de maio de 2026.
Em cerca de 24 horas, o ataque conseguiu alcançar os pacotes publicados. Quem instalou as dependências afetadas entre 10 e 11 de maio de 2026 está na zona de risco e precisa agir. A resposta rápida da equipe limitou o estrago, mas o episódio mostra como uma janela de horas basta em um ataque desse tipo.
Vale comparar com outros incidentes recentes do ecossistema JavaScript, como o episódio envolvendo o Next.js citado no vídeo. A frequência crescente desses casos indica que segurança de cadeia de suprimentos deixou de ser assunto só de times de AppSec.
O que fazer agora para proteger seus projetos?
Se você mantém projetos JavaScript em produção, o checklist abaixo resume as ações recomendadas no vídeo e nas boas práticas do próprio incidente:
- Verifique as dependências. Confira se algum projeto seu instalou as versões comprometidas dos pacotes do TanStack, seja no
package.ou no lockfile. - Atualize os pacotes. Se encontrou uma versão afetada, atualize para a versão corrigida imediatamente.
- Regenere segredos. Troque senhas de banco de dados, tokens de API e credenciais de CI/CD que possam ter passado pelo ambiente comprometido. Prioridade máxima se o projeto está em produção.
- Revise o settings. do Claude Code. Procure hooks de
session startou qualquer alteração que você não tenha feito, inclusive no macOS. - Alerte o time. Comunique a equipe, registre o incidente e trate a troca de credenciais como prioridade 01.
- Revise suas pipelines. Avalie quais actions rodam em pull requests de forks e se o uso de cache compartilhado está seguro no seu contexto. A documentação das GitHub Actions traz guias de endurecimento para esses cenários.
Se você não é especialista em segurança, uma saída prática sugerida no vídeo é colar o postmortem em uma ferramenta de IA e pedir ajuda para auditar seus projetos em busca das bibliotecas afetadas.
O que é um postmortem e por que ele importa?
Postmortem é o documento que um time escreve depois de um incidente grave. Ele registra o que aconteceu, as causas, as medidas de contenção e as mudanças que evitam a repetição do problema. É um formato consolidado na indústria, especialmente após vazamentos de segurança e falhas em produção.
O time do TanStack publicou o postmortem do incidente listando os pacotes afetados, explicando o comportamento do malware e detalhando o mecanismo do cache. Ler esse tipo de documento é uma das formas mais eficientes de entender ataques reais, porque descreve o cenário exato: qual trigger rodou, qual script executou e como o código chegou ao npm.
Para o seu time, o postmortem alheio é um template gratuito de aprendizado. Pergunte sempre: a mesma falha existiria na nossa pipeline? Quem pode abrir pull requests que disparam actions com acesso a segredos?
Perguntas frequentes
- O pull request malicioso chegou a ser mesclado no branch principal? Não. Segundo o relato do incidente, o PR nunca foi mesclado. O dano ocorreu porque a abertura do pull request disparou uma pipeline que executou o script
preparee contaminou o cache reutilizado por builds seguintes.
- Preciso trocar minhas senhas mesmo sem usar os pacotes afetados? Se nenhum projeto seu instalou as versões comprometidas entre 10 e 11 de maio de 2026, o risco direto é baixo. Ainda assim, vale conferir lockfiles de todos os repositórios, incluindo projetos antigos e ambientes de produção.
- Como descubro se instalei uma versão comprometida? Verifique o
package.e o arquivo de lock de cada projeto, comparando com a lista de pacotes e versões do postmortem oficial do TanStack. Ferramentas de IA podem ajudar a varrer vários repositórios de uma vez.
- Como posso transformar um vídeo como esse em artigo? Se você acompanhou esse incidente por vídeo e quer registrar o aprendizado em texto, o Skala Blog converte a transcrição de um YouTube em artigo estruturado: você cola o link, o vídeo é transcrito e o artigo é gerado para você revisar.
Do vídeo ao artigo: registre o que você aprendeu
Incidentes como esse passam rápido: em 24 horas o assunto saturou as redes e sumiu dos feeds. Transformar a explicação em texto é uma forma de o conhecimento ficar pesquisável e útil por muito mais tempo.
Se você produz conteúdo em vídeo sobre programação, segurança ou qualquer outro tema técnico, o fluxo é simples: você cola a URL de um vídeo do YouTube no Skala Blog, o conteúdo é transcrito e um artigo estruturado é gerado para sua revisão. O que você explicou falando vira material escrito, pronto para ser encontrado por quem precisar dele depois.
Fork this article
Start a new branch from the same video, shaped your way. You keep the credit; the original keeps the attribution.
A fork in another language is filed as a translation of this article, so the two pages point at each other. You can unlink it later from the editor.
0/240
You are creating
- Format
- For
- Language
- Source
- Your angle
You will be asked to sign in before it is generated.
Buy credits