Aikido

Las habilidades de los agentes están propagando comandos npx alucinados

Charlie EriksenCharlie Eriksen
|
#
#
#
#
#

El 14 de enero de 2026, reclamé un paquete en npm llamado react-codeshift.

Yo no era el autor. Nunca había escrito una línea de código para él. El paquete nunca había existido. Nadie lo había publicado nunca. Y, sin embargo, 237 repositorios de GitHub ya lo estaban referenciando, instruyendo a los agentes de IA para que lo instalaran. Algunos de ellos lo estaban intentando de verdad. Estaba recibiendo descargas de un paquete que acababa de publicar, sin contenido alguno. 

¿De dónde salió el nombre? Lo inventó un LLM. ¿Cómo se extendió a 237 repositorios? Archivos de habilidades de agente. Copiados y pegados, bifurcados, traducidos al japonés, nunca verificados. Lo encontré y lo reclamé antes de que nadie más pudiera.

La investigación

En julio de 2025, comencé a investigar Problemas de confusión con npx. Estos son nombres de paquetes npm que aparecen en la documentación/código, pero que nunca se publicaron realmente. La idea era simple: recopilar package.json scripts y archivos README en todo npm en busca de npx <package> patrones y comprobar si esos paquetes realmente existen. Resulta que muchos de ellos no.

Entonces ocurrió todo el ataque de S1ngularity, así que dejé la investigación en suspenso. Llegaron las vacaciones y la retomé. Esta publicación solo cubre una parte de esa investigación. Habrá más.

Presentamos react-codeshift

Retomé la investigación en diciembre y decidí extenderla para indexar también GitHub, rastreando referencias a npx comandos. react-codeshift apareció con mucha frecuencia. En más de 200 repositorios. Para cuando lo reclamé, ese número había crecido a más de 237.

215 archivos que coinciden con "npx react-codeshift" en GitHub

La cuestión es que, react-codeshift no existía. No hasta que lo reclamé. Pero el nombre suena legítimo. Sí existen dos paquetes reales:

🧬 ALUCINACIÓN DE LLM
Anatomía de la alucinación
Cómo un LLM fusionó dos paquetes reales en uno falso
jscodeshift
Ejecutor genérico de codemods
Facebook
+
react-codemod
Transformaciones específicas de React
Equipo de React
=
react-codeshift
Plausible. No existe.
🚫 Alucinado

Un LLM mezcló todo esto y alucinó con react-codeshift. Un nombre plausible para una herramienta que no existe. Un clásico.

La historia de origen

Lo rastreé hasta un único commit: 65e5cb0 en el wshobson/agents repositorio, fechado el 17 de octubre de 2025.

Ese commit volcó 47 «Agent Skills» generadas por LLM en 14 plugins. Sin revisión humana aparente. Al menos dos de esas habilidades (react-modernization y dependency-upgrade) contenían esto:

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. Suena legítimo. Las rutas de transformación reflejan la estructura de los codemods reales.

Excepto que no existía.

Habilidades: La nueva superficie de ataque

Hemos visto casos de typosquatting y paquetes de AI slop. Este es un caso real de slopsquatting en la práctica, no solo una especulación. Y se está difundiendo a través de Skills.

Las habilidades son un nuevo estándar: Anthropic's Agent Skills Specification, Claude Code plugins, servidores MCP. Todos utilizan archivos de habilidades para indicar a los agentes de IA qué hacer. Estos archivos parecen documentación: Markdown, YAML, instrucciones en texto plano.

Pero son instrucciones ejecutables. Cuando un agente de IA carga un archivo de habilidad, sigue los comandos. No verifica que npx react-codeshift exista. Simplemente lo ejecuta.

Cuando npx no puede encontrar un paquete localmente, pregunta:

Need to install the following packages:  
react-codeshift

Ok to proceed? (y)

El agente pulsa 'y'. También lo harían la mayoría de las personas. Los agentes son como nosotros en ese sentido. El ciego guiando al ciego, a escala.

Prueba de intentos de ejecución activos

Después de reclamar el paquete, observé la telemetría de descarga:

📊 TELEMETRÍA
Telemetría de descarga
Estadísticas de descarga de npm después de reclamar el paquete Phantom
~74 4 1 3 1 3
Día 0 Día 1 Día 2 Día 3 Día 4 Día 5
Espejos / escáneres Intentos de ejecución de agentes
Paquetes Phantom normales: 60-100 descargas el día 0, luego cero.
react-codeshift: Goteo persistente = agentes reales intentando usarlo.

Los paquetes normales registran entre 60 y 100 descargas el primer día (espejos de registro, escáneres de seguridad) y luego cero. En realidad, nadie intenta utilizarlos.

Pero react-codeshift¿Ese goteo persistente de 1 a 4 descargas al día? Esos son reales. Son agentes de IA siguiendo instrucciones de habilidades y activando descargas de npx.

Las habilidades están siendo utilizadas. El paquete 'alucinado' se está ejecutando. Si no lo hubiera reclamado primero, un atacante podría haberlo hecho.

El patrón de propagación

Los 237 repositorios se remontan a la misma fuente. El patrón es casi en su totalidad de bifurcaciones directas:

  • wshobson/agents (origen)
  • ~100 bifurcaciones manteniendo la ruta exacta: plugins/framework-migration/skills/react-modernization/SKILL.md
  • Un usuario lo copió en más de 30 de sus propios repositorios
  • Un puñado de reorganizaciones en diferentes estructuras de directorios
  • ¡Incluso una traducción al japonés!
  • Un repositorio cambió a npx con bunx. El mismo paquete 'alucinado', diferente ejecutor.

No es solo npx

El mismo patrón se aplica a cada ejecutor de paquetes:

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

Todos se resuelven al mismo registro npm. Todos solicitan confirmación antes de instalar. Todos se aprueban sin pensarlo dos veces. Si un LLM alucina un nombre de paquete de una forma, también lo hará en otras.

Es viral, pero superficial. Sin repositorios importantes. Sin proyectos con muchas estrellas. Solo agentes enseñando a otros agentes a usar un paquete que no existía. Agentes en todos los niveles. Un sistema de auto-mejora, en cierto modo.

Por qué esto importa

Esto no fue una brecha masiva. Nadie fue comprometido. El paquete es ahora un marcador de posición seguro.

Pero es un caso de estudio útil sobre cómo se propagan estas cosas:

  1. Los LLM alucinan nombres de paquetes plausibles. Especialmente para herramientas de dominio específico donde las convenciones de nomenclatura son predecibles.
  2. Las habilidades se copian y pegan sin revisión. Parecen documentación, por lo que no reciben el mismo escrutinio que el código.
  3. Los agentes siguen las instrucciones literalmente. Ese es su trabajo.
  4. npx solicita, los humanos aprueban. La fricción es tan baja que la mayoría de la gente simplemente pulsa 'y'.
  5. Los nombres no reclamados se asignan por orden de llegada. Cualquiera puede registrarlos.

Di con este y lo reclamé. Vale la pena entender el patrón.

🎯 NUEVA SUPERFICIE DE ATAQUE
Habilidades: ¿Documentación o Código?
Por qué los archivos de habilidades necesitan revisión de código, no solo un vistazo
👀 Parece
📝 Archivos Markdown
📋 Configuraciones YAML
📖 Documentación
💬 Instrucciones en texto plano
⚡ Actúa como
💻 Comandos ejecutables
🤖 Instrucciones de agente
🔧 Scripts de shell
🎯 Superficie de ataque
Trata las habilidades como código, no como documentación.

¿Qué hacer?

Si mantienes habilidades de agente o herramientas de IA:

  1. Trata las habilidades como código, no como documentación. Revísalas. Audítalas. Controla su versión con el mismo rigor que el código fuente.
  2. Verifica que los nombres de los paquetes existan. Antes de confirmar cualquier npx <package> instrucción, verifica que el paquete sea real y publicado por quien crees que lo publicó.
  3. Busca en tu base de código. Ejecuta grep -r "npx react-codeshift" y corrige cualquier coincidencia. Reemplaza con las herramientas correctas:
    • npx jscodeshift para codemods genéricos
    • npx react-codemod para transformaciones específicas de React

Indicadores de Compromiso

Paquete npm: react-codeshift

El panorama general

Las habilidades son el nuevo código. No lo parecen. Son Markdown y YAML e instrucciones amigables. Pero son ejecutables. Los agentes de IA las siguen sin preguntar "¿existe realmente este paquete?"

Esto fue una alucinación. Se propagó a 237 repositorios. Generó intentos de descarga reales. La única razón por la que no se convirtió en un vector de ataque es porque llegué yo primero.

La cadena de suministro acaba de incorporar un nuevo eslabón, hecho de sueños LLM. Este es solo uno de los hallazgos de la investigación sobre la confusión de npx. Próximamente habrá más.

4.7/5

Protege tu software ahora.

Empieza gratis
Sin tarjeta
Solicitar una demo
Sus datos no se compartirán · Acceso de solo lectura · No se requiere tarjeta de crédito

Asegúrate ahora.

Proteja su código, la nube y el entorno de ejecución en un único sistema central.
Encuentre y corrija vulnerabilidades de forma rápida y automática.

No se requiere tarjeta de crédito | Resultados del escaneo en 32 segundos.