Pular para o conteúdo principal
Fechar
Segurança

TrapDoor, TanStack e npm: Quando IA e Registry Viram Vetor

Gabriel Ferraresi· CEO | Tech8629 de maio de 20265 min
supply chainnpmiatrapdoorcursor

Seu AI coding assistant pode estar executando comandos que você não consegue ver. A campanha TrapDoor planta instruções invisíveis em .cursorrules e CLAUDE.md usando caracteres Unicode de largura zero. O TanStack sofreu um segundo ataque que roubou tokens OIDC para publicar sob identidade confiável. 33 pacotes npm impersonam namespaces corporativos com flag de ativação remota. Três vetores, mesmo resultado: código malicioso entra pelo npm install ou pela configuração do AI assistant.

TrapDoor: quando o assistente de IA vira vetor de execução

34 pacotes maliciosos. 384+ versões publicadas. npm, PyPI e Crates.io. Ativa desde 19 de maio. O diferencial do TrapDoor não é o payload em si — é o alvo. A campanha explora deliberadamente arquivos de configuração de AI coding assistants.

O payload planta dois arquivos no projeto: .cursorrules com instruções para o Cursor, e CLAUDE.md com instruções para o Claude Code. As instruções maliciosas são escondidas com zero-width Unicode characters: U+200B, U+200C, U+200D e U+FEFF. Invisíveis em qualquer editor. Totalmente parseadas e executadas pelo AI assistant.

O ciclo é silencioso: desenvolvedor abre o projeto. O assistant lê a configuração. Executa as instruções ocultas. O humano não vê nada. O segundo vetor é ainda mais escalável — PRs maliciosos contra langchain, browser-use, llama_index, MetaGPT, OpenHands e langflow com commit messages como "docs: add .cursorrules". Se mergeados, todo clone teria o payload invisível. Todos foram rejeitados. Mas o vetor está provado.

TanStack round 2: OIDC token theft sob identidade confiável

O TanStack sofreu o segundo ataque em semanas. 84 versões maliciosas em 42 pacotes @tanstack/* publicadas em 6 minutos. CVE-2026-45321. CVSS 9.6. CISA KEV desde 27 de maio com prazo de remediação em 10 de junho.

A cadeia de ataque: pull_request_target com Pwn Request + cache poisoning fork↔base + extração do token OIDC do runner. O atacante usou o OIDC trusted-publisher binding do TanStack no GitHub Actions. Com o token, publicou sob a identidade confiável da organização. A mesma cadeia do primeiro ataque — GitHub Actions trust boundary → OIDC token theft → publicação sob identidade confiável — mas agora com refinamento. O primeiro round usou cache poisoning. O segundo roubou a chave do castelo.

A lição é direta: OIDC trusted-publisher binding é um mecanismo de delegação, não de segurança. O token atesta que a publicação veio do workflow autorizado. Não atesta que o workflow não foi comprometido.

npm dependency confusion: namespace impersonation com ativação remota

A Microsoft descobriu 33 pacotes npm sob scopes que imitam namespaces internos corporativos. Três aliases de operador — mr.4nd3r50n, ce-rwb, t-in-one — todos com emails Yandex. Um mesmo X-Secret hardcoded nos três aliases: operador único.

A técnica é dependency confusion clássica: versão pública com número mais alto que a interna. O npm resolve pela versão mais alta. Seu npm install baixa o pacote do atacante. Os package.json spoofam URLs de GitHub Enterprise, Jira e portais internos. Parece legítimo na code review.

O postinstall hook executa um stager obfuscado que fingerprinta o ambiente: hostname, env vars, pacotes instalados. O stager detecta CI: se a variável CI existe, aborta silenciosamente. Evita alertas em pipelines monitorados. RECON_ONLY = 1 por agora — flag toggleável server-side para full exploitation: exfiltração, credential theft, backdoor. C2 em oob.moika[.]tech. Scopes impersonados incluem @sber-ecom-core/sberpay-widget do Sberbank.

A convergência: AI coding assistants são o novo alvo de supply chain

30+ CVEs contra agentic AI tooling em 60 dias. A superfície de ataque foi instrumentada a machine speed. PraisonAI: scanners em 3h44min após disclosure. LMDeploy: exploração em 12h31min após advisory. A janela de patch para AI infra colapsou para horas. Pipelines com approval gates de dias são incompatíveis com essa realidade.

O TrapDoor prova que AI coding assistants não são apenas ferramentas — são vetores de execução. O desenvolvedor confia que o assistant vai sugerir código. O assistant confia que .cursorrules e CLAUDE.md contêm instruções legítimas. Essa cadeia de confiança delegada é explorável da mesma forma que o npm resolve pela versão mais alta: o sistema faz o que foi projetado para fazer, mas o input foi forjado.

npm install não é operação de confiança implícita. É confiança delegada. Você confia no registry, no publisher, no namespace. Cada um pode ser forjado. O mesmo vale para AI assistants: você confia no arquivo de configuração, no modelo, no contexto. Cada um pode ser envenenado.

Defesa prática: hardening para a nova superfície

Na Tech86, implementamos supply chain security em três camadas: registry privado com scope-to-registry mapping para eliminar dependency confusion, CI hardening com --ignore-scripts e validação de integridade antes de qualquer execução, e AI security-by-design com auditoria de arquivos de configuração e restrição de MCP server auto-execução.

Se seu time usa Cursor ou Claude Code sem hardening, está exposto. Se seu npm install resolve pacotes que ninguém da empresa publicou, o pipeline está exposto. Se seu CI não bloqueia egress para domínios de C2 conhecidos, a exfiltração já pode estar acontecendo. A convergência entre supply chain attacks e AI coding assistants não é uma tendência futura — é a realidade de maio de 2026.

Interessado nesta solução?

Conheça nossos serviços gerenciados e infraestrutura.

Conheça Segurança Ofensiva

Perguntas Frequentes

TrapDoor é uma campanha de supply chain com 34 pacotes maliciosos e 384+ versões em npm, PyPI e Crates.io. O payload planta instruções invisíveis em .cursorrules e CLAUDE.md usando zero-width Unicode characters (U+200B, U+200C, U+200D, U+FEFF). O AI assistant lê e executa essas instruções, mas o desenvolvedor não vê nada no editor.

O atacante encadeou pull_request_target com cache poisoning cross-boundary e extração do token OIDC da memória do runner. Com o token, publicou 84 versões maliciosas em 42 pacotes sob a identidade confiável do TanStack. CVSS 9.6, CISA KEV desde 27 de maio.

O atacante publica pacotes com versão mais alta que a interna sob scopes que imitam namespaces corporativos. O npm resolve pela versão mais alta, então seu npm install baixa o pacote do atacante. 33 pacotes foram descobertos usando essa técnica com flag RECON_ONLY toggleável server-side para ativação remota.

Busque .cursorrules e CLAUDE.md no repositório por zero-width characters. Verifique se PRs com mensagens como 'docs: add .cursorrules' foram mergeados recentemente. Audite logs do AI assistant para comandos executados que você não solicitou. Se encontrar, revogue tokens e restrinja MCP server auto-execução.

É mais seguro, mas não infalível. Registry privado elimina dependency confusion para scopes internos, mas não protege contra pacotes públicos comprometidos como os do TanStack. Combine registry privado com --ignore-scripts em CI, lockfile auditing e egress monitoring.

Blog — Fale Conosco

Tem alguma pergunta sobre nossos artigos ou serviços? Nossa equipe está pronta para ajudar.

Agendar Reunião

Reserve um horário.

Agendar Agora

E-mail

Envie uma mensagem.

[email protected]

WhatsApp

Conversa rápida.

Endereço

Avenida Paulista, 1636 - São Paulo - SP - 01310-200

Especialista Tech86

Online agora

Olá! Como podemos ajudar a escalar seu negócio hoje?

Tech86 Engineering

Nós valorizamos sua privacidade

Utilizamos cookies e tecnologias similares para otimizar a sua experiência, analisar o tráfego do site e personalizar conteúdo. Ao clicar "Aceitar Todos", você concorda com o uso de todos os cookies. Leia nossa Política de Privacidade.