Aikido

Habilidades de Agente Estão Espalhando Comandos npx Alucinados

Charlie EriksenCharlie Eriksen
|
#
#
#
#
#

Em 14 de janeiro de 2026, reivindiquei um pacote no npm chamado react-codeshift.

Eu não era o autor. Nunca havia escrito uma linha de código para ele. O pacote nunca existiu. Ninguém jamais o havia publicado. E, no entanto, 237 repositórios do GitHub já o estavam referenciando, instruindo agentes de IA a instalá-lo. Alguns deles estavam realmente tentando. Eu estava recebendo downloads para um pacote que acabara de publicar, sem nada dentro. 

De onde veio o nome? Um LLM o inventou. Como ele se espalhou para 237 repositórios? Arquivos de habilidades de agentes. Copiados e colados, bifurcados, traduzidos para o japonês, nunca verificados. Eu o encontrei e reivindiquei antes que qualquer outra pessoa pudesse.

A pesquisa

Em julho de 2025, comecei a investigar Problemas de confusão com o npx. Estes são nomes de pacotes npm que aparecem na documentação/código, mas que nunca foram realmente publicados. A ideia era simples: extrair package.json scripts e arquivos README em todo o npm para npx <package> padrões e verificar se esses pacotes realmente existem. Acontece que muitos deles não existem.

Então aconteceu todo o ataque S1ngularity, então eu arquivei a pesquisa. Chegou a época das festas de fim de ano e eu retomei o trabalho. Este post cobre apenas um ramo dessa pesquisa. Mais novidades em breve.

Entra react-codeshift

Retomei a pesquisa em dezembro e decidi estendê-la para também indexar o GitHub, fazendo um scrape de referências a npx comandos. react-codeshift apareceu muito. Mais de 200 repositórios. Quando o reivindiquei, esse número havia crescido para 237+.

215 arquivos correspondentes a "npx react-codeshift" no GitHub

A questão é que, react-codeshift não existia. Não até que eu o reivindicasse. Mas o nome soa legítimo. Dois pacotes reais existem:

🧬 ALUCINAÇÃO DE LLM
Anatomia da Alucinação
Como um LLM confundiu dois pacotes reais em um falso
jscodeshift
Executor genérico de codemods
Facebook
+
react-codemod
Transformações específicas para React
Equipe React
=
react-codeshift
Plausível. Não existe.
🚫 Alucinado

Um LLM misturou tudo isso e criou o react-codeshift. Um nome plausível para uma ferramenta que não existe. Um clássico.

A história de origem

Eu rastreei até um único commit: 65e5cb0 no wshobson/agents repositório, datado de 17 de outubro de 2025.

Esse commit despejou 47 "Agent Skills" geradas por LLM em 14 plugins. Nenhuma revisão humana aparente. Pelo menos duas dessas skills (react-modernization e dependency-upgrade) continham isso:

npx react-codeshift --transform=react-codeshift/transforms/rename-unsafe-lifecycles.js ./src

npx react-codeshift --transform=react-codeshift/transforms/new-jsx-transform.js ./src

Parece legítimo. Soa legítimo. Os caminhos de transformação espelham a estrutura de codemods reais.

Exceto que não existia.

Skills: A nova superfície de ataque

Já vimos typosquatting e pacotes de IA slop. Este é um caso real de slopsquatting na prática, não apenas especulação. E está a ser disseminado através do Skills.

Skills são um novo padrão: Anthropic's Agent Skills Specification, Claude Code plugins, MCP servers. Todos eles usam arquivos de skill para dizer aos agentes de IA o que fazer. Esses arquivos parecem documentação: Markdown, YAML, instruções em texto simples.

Mas são instruções executáveis. Quando um agente de IA carrega um arquivo de skill, ele segue os comandos. Não verifica se npx react-codeshift existe. Ele simplesmente o executa.

Quando o npx não consegue encontrar um pacote localmente, ele solicita:

É necessário instalar os seguintes pacotes:  
react-codeshift

Ok para prosseguir? (y)

O agente pressiona y. Assim como a maioria das pessoas. Agentes são como nós nesse aspecto. O cego guiando o cego, em escala.

Comprovação de tentativas de execução ativas

Após reivindicar o pacote, observei a telemetria de download:

📊 TELEMETRIA
Telemetria de Download
Estatísticas de download do npm após reivindicar o pacote Phantom
~74 4 1 3 1 3
Dia 0 Dia 1 Dia 2 Dia 3 Dia 4 Dia 5
Espelhos / scanners Tentativas de execução de agentes
Pacotes Phantom normais: 60-100 downloads no dia 0, depois zero.
react-codeshift: Fluxo persistente = agentes reais tentando usá-lo.

Os pacotes normais têm entre 60 e 100 downloads no primeiro dia (espelhos de registo, scanners de segurança) e, depois disso, zero. Na verdade, ninguém está a tentar usá-los.

Mas react-codeshift? Aquele fluxo persistente de 1-4 downloads por dia? Esses são reais. São agentes de IA seguindo instruções de habilidades e acionando downloads npx.

As habilidades estão sendo usadas. O pacote alucinado está sendo executado. Se eu não o tivesse reivindicado primeiro, um atacante poderia ter feito isso.

O padrão de disseminação

Todos os 237 repositórios remontam à mesma origem. O padrão é quase inteiramente de forks diretos:

  • wshobson/agents (origem)
  • ~100 forks mantendo o caminho exato: plugins/framework-migration/skills/react-modernization/SKILL.md
  • Um usuário o copiou para mais de 30 de seus próprios repositórios
  • Algumas reorganizações em diferentes estruturas de diretórios
  • Até uma tradução para o japonês!
  • Um repositório foi alterado npx para bunx. Mesmo pacote alucinado, runner diferente.

Não é apenas o npx

O mesmo padrão se aplica a todo runner de pacote:

  • npx react-codeshift
  • bunx react-codeshift
  • pnpm dlx react-codeshift
  • yarn dlx react-codeshift

Todos eles se resolvem para o mesmo registro npm. Todos eles solicitam confirmação antes de instalar. Todos são aprovados sem pensar duas vezes. Se um LLM alucina um nome de pacote em uma forma, ele o alucinará em outras também.

É viral, mas superficial. Sem grandes repositórios. Sem projetos com muitas estrelas. Apenas agentes ensinando agentes a usar um pacote que não existia. Agentes em todos os níveis. Um sistema de autoaperfeiçoamento, de certa forma.

Por que isso importa

Esta não foi uma violação massiva. Ninguém foi comprometido. O pacote agora é um placeholder seguro.

Mas é um estudo de caso útil sobre como essas coisas se espalham:

  1. LLMs alucinam nomes de pacotes plausíveis. Especialmente para ferramentas específicas de domínio onde as convenções de nomenclatura são previsíveis.
  2. Habilidades são copiadas e coladas sem revisão. Elas se parecem com documentação, então não recebem o mesmo escrutínio que o código.
  3. Agentes seguem instruções literalmente. Esse é o trabalho deles.
  4. npx solicita, humanos aprovam. O atrito é baixo o suficiente para que a maioria das pessoas apenas pressione 'y'.
  5. Nomes não reivindicados são por ordem de chegada. Qualquer um pode registrá-los.

Eu por acaso encontrei este e o reivindiquei. O padrão vale a pena ser compreendido.

🎯 NOVA SUPERFÍCIE DE ATAQUE
Habilidades: Docs ou Código?
Por que arquivos de habilidade precisam de revisão de código, não apenas uma olhada
👀 Parece
📝 Arquivos Markdown
📋 Configurações YAML
📖 Documentação
💬 Instruções em texto simples
⚡ Funciona como
💻 Comandos executáveis
🤖 Instruções do agente
🔧 Scripts shell
🎯 Superfície de ataque
Trate as habilidades como código, não como documentação.

O que você deve fazer?

Se você mantém habilidades de agente ou ferramentas de IA:

  1. Trate as habilidades como código, não como documentação. Revise-as. Audite-as. Controle a versão delas com o mesmo rigor do código-fonte.
  2. Verifique se os nomes dos pacotes existem. Antes de fazer commit de qualquer npx <package> instrução, verifique se o pacote é real e foi publicado por quem você pensa que o publicou.
  3. Pesquise sua base de código. Execute grep -r "npx react-codeshift" e corrija quaisquer ocorrências. Substitua pelas ferramentas corretas:
    • npx jscodeshift para codemods genéricos
    • npx react-codemod para transformações específicas do React

Indicadores de Comprometimento

pacote npm: react-codeshift

O panorama geral

As habilidades são o novo código. Não parecem. São Markdown e YAML e instruções amigáveis. Mas são executáveis. Agentes de IA os seguem sem perguntar "does this package actually exist?"

Isso foi uma alucinação. Espalhou-se para 237 repositórios. Gerou tentativas reais de download. A única razão pela qual não se tornou um vetor de ataque é porque cheguei lá primeiro.

A cadeia de abastecimento acaba de ganhar um novo elo, feito dos sonhos da LLM. Esta é apenas uma das conclusões da pesquisa sobre a confusão da npx. Mais novidades em breve.

4.7/5

Proteja seu software agora

Comece Gratuitamente
Não é necessário cc
Agendar uma demonstração
Seus dados não serão compartilhados · Acesso somente leitura · Não é necessário cartão de crédito

Fique seguro agora

Proteja seu código, Cloud e runtime em um único sistema centralizado.
Encontre e corrija vulnerabilidades rapidamente de forma automática.

Não é necessário cartão de crédito | Resultados da varredura em 32 segundos.