O Socket Research Team divulgou em 20 de fevereiro de 2026 a campanha SANDWORM_MODE: 19 pacotes npm com typosquatting que roubam credenciais, chaves de API de provedores de IA e se propagam automaticamente por repositórios GitHub. Os 19 pacotes foram removidos do npm e os domínios de C2 derrubados, mas o estrago potencial para quem instalou algum deles antes do takedown é significativo.

O que aconteceu

Pesquisadores do Socket identificaram 19 pacotes publicados no npmjs.com por duas contas (official334 e javaorg). Os nomes imitam bibliotecas populares: claud-code, cloude-code, suport-color, rimarf, opencraw, naniod, hardhta, entre outros. A técnica é typosquatting clássico: um npm install com erro de digitação é o suficiente para comprometer a máquina.

A campanha é uma evolução do Shai-Hulud, um worm de supply chain que já havia comprometido mais de 500 pacotes npm entre setembro e novembro de 2025. O SANDWORM_MODE adiciona dois vetores novos: roubo de chaves de provedores de IA e injeção de servidores MCP em assistentes de código.

Como o ataque funciona

O payload opera em dois estágios. O primeiro roda imediatamente: um loader escondido descriptografa código embutido e começa a exfiltrar tokens npm, credenciais SSH, variáveis de ambiente e chaves de carteiras crypto. Em ambientes de CI (GitHub Actions, GitLab CI, CircleCI, Jenkins, Buildkite), a detecção é automática e o segundo estágio dispara sem espera.

Em máquinas de desenvolvedor, o segundo estágio só ativa após 48 a 96 horas. Nesse ponto, o malware escala o acesso: varre CLIs de gerenciadores de senha (Bitwarden, 1Password, LastPass), faz scan de arquivos de carteira no filesystem, instala persistence via Git hooks e injeta servidores MCP maliciosos nos assistentes de IA.

O módulo McpInject é a parte mais preocupante. Ele cria um servidor MCP em um diretório oculto e registra tools como index_project, lint_check e scan_dependencies. Cada descrição de tool contém um bloco de prompt injection que instrui o assistente de IA a ler silenciosamente chaves SSH, credenciais AWS, tokens npm e arquivos .env da máquina.

A exfiltração usa quatro canais redundantes: HTTPS POST para um Cloudflare Worker, upload via GitHub API com duplo base64, DNS tunneling via queries base32 para domínios controlados, e um fallback DGA com seed sw2025 espalhado por dez TLDs.

Quem está na mira

O ataque coleta chaves de API de nove provedores de LLM: OpenAI, Anthropic, Google, Groq, Together, Fireworks, Replicate, Mistral e Cohere. Os assistentes de código visados para injeção MCP são Claude Code, Claude Desktop, Cursor, VS Code Continue e Windsurf.

Se você usa qualquer combinação dessas ferramentas com pacotes npm no workflow, você é alvo.

O que fazer agora

Se você suspeita que instalou algum dos 19 pacotes:

  • Delete node_modules e reinstale dependências a partir do lockfile verificado
  • Rotacione todos os tokens expostos: npm, GitHub PATs, chaves SSH, secrets de CI/CD
  • Audite package.json e lockfiles procurando pacotes que você não reconhece
  • Inspecione .github/workflows/ por GitHub Actions desconhecidas, especialmente com trigger pull_request_target
  • Verifique a configuração mcpServers dos seus assistentes de IA (Claude, Cursor, Windsurf) e remova entradas que você não adicionou
  • Cheque templates de Git hooks globais (git config --global init.templateDir) por scripts estranhos

Mesmo que você não tenha sido afetado, a lista de pacotes serve como lembrete: npm install sem verificação é um vetor de ataque. Ferramentas como npm audit, Socket e lockfile-lint ajudam, mas a defesa mais eficaz continua sendo revisar o que entra no package.json antes de rodar o install.

Referências pesquisadas nesta publicação