{"id":1927,"date":"2026-04-24T05:53:28","date_gmt":"2026-04-24T11:53:28","guid":{"rendered":"https:\/\/hacking.onesec.mx\/?p=1927"},"modified":"2026-04-24T13:23:39","modified_gmt":"2026-04-24T19:23:39","slug":"slopsquatting-cuando-la-ia-inventa-un-paquete-que-no-existe-y-un-atacante-lo-convierte-en-malware","status":"publish","type":"post","link":"https:\/\/hacking.onesec.mx\/index.php\/2026\/04\/slopsquatting-cuando-la-ia-inventa-un-paquete-que-no-existe-y-un-atacante-lo-convierte-en-malware\/","title":{"rendered":"Slopsquatting: cuando la IA inventa un paquete que no existe y un atacante lo convierte en malware"},"content":{"rendered":"\n<p>Un desarrollador le pide a su asistente de IA que le ayude a conectar su proyecto Node.js con una base de datos. La IA responde con seguridad: <em>&#8220;Instala el paquete con <code>npm install react-codeshift<\/code>&#8220;<\/em>. El desarrollador copia el comando, lo pega en su terminal y presiona Enter. El paquete se instala sin problemas y parece funcionar.<br><\/p>\n\n\n\n<p>Lo que no sabe es que ese paquete no exist\u00eda hasta hace unos d\u00edas. Alguien lo registr\u00f3 con c\u00f3digo malicioso despu\u00e9s de descubrir que los modelos de IA lo recomiendan con frecuencia. El desarrollador acaba de abrir una puerta trasera en su proyecto, y todo comenz\u00f3 con una sugerencia amable de su copiloto de c\u00f3digo.<br><\/p>\n\n\n\n<p>Este escenario no es ficticio. En enero de 2026, el investigador Charlie Eriksen de Aikido Security descubri\u00f3 exactamente este caso: un paquete npm llamado <code>react-codeshift<\/code> que nunca hab\u00eda existido, pero que la IA inventaba combinando los nombres de dos paquetes reales (<code>jscodeshift<\/code> y <code>react-codemod<\/code>). Para cuando Eriksen lo detect\u00f3, el nombre ya se hab\u00eda propagado a 237 repositorios en GitHub y recib\u00eda intentos de descarga diarios de agentes de IA automatizados, sin que ning\u00fan humano lo hubiera plantado deliberadamente.<br><br>Bienvenido al mundo del <strong>slopsquatting<\/strong>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u00bfQu\u00e9 es el slopsquatting?<\/h2>\n\n\n\n<p>El t\u00e9rmino fue acu\u00f1ado por Seth Larson, desarrollador de seguridad de la Python Software Foundation. Combina <em>slop<\/em> (contenido de baja calidad generado por IA) con <em>squatting<\/em> (registrar un nombre con fines maliciosos).<br><br>Para entenderlo, conviene hablar de su primo m\u00e1s viejo: el <strong>typosquatting<\/strong>. En ese ataque, alguien registra un paquete con un nombre casi id\u00e9ntico a uno popular pero con un error tipogr\u00e1fico \u2014 por ejemplo, <code>requessts<\/code> en lugar de <code>requests<\/code> \u2014 y espera a que un desarrollador se equivoque al teclear. La apuesta es sobre un error humano.<\/p>\n\n\n\n<p>El slopsquatting funciona diferente. Aqu\u00ed el atacante no apuesta a que un humano se equivoque al escribir, sino a que <strong>la IA se equivoque al recomendar<\/strong>. Los modelos de lenguaje que usamos para generar c\u00f3digo no consultan repositorios en tiempo real; generan texto bas\u00e1ndose en patrones estad\u00edsticos. A veces producen nombres de paquetes que suenan perfectamente l\u00f3gicos pero que simplemente no existen. A esto se le llama <strong>alucinaci\u00f3n de paquetes<\/strong> (<em>package hallucination<\/em>).<\/p>\n\n\n\n<p>El flujo del ataque es directo: un atacante le hace preguntas de programaci\u00f3n a varios modelos, anota los nombres de paquetes que la IA inventa, verifica que no existan en PyPI o npm, y los registra con c\u00f3digo malicioso. Despu\u00e9s, solo espera. Cuando otro desarrollador le haga una pregunta similar a la IA y ejecute el comando de instalaci\u00f3n, el paquete malicioso se descarga autom\u00e1ticamente.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"412\" src=\"https:\/\/hacking.onesec.mx\/wp-content\/uploads\/2026\/04\/slopsquatting_1-1024x412.png\" alt=\"\" class=\"wp-image-1949\" srcset=\"https:\/\/hacking.onesec.mx\/wp-content\/uploads\/2026\/04\/slopsquatting_1-1024x412.png 1024w, https:\/\/hacking.onesec.mx\/wp-content\/uploads\/2026\/04\/slopsquatting_1-300x121.png 300w, https:\/\/hacking.onesec.mx\/wp-content\/uploads\/2026\/04\/slopsquatting_1-768x309.png 768w, https:\/\/hacking.onesec.mx\/wp-content\/uploads\/2026\/04\/slopsquatting_1.png 1378w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Casos documentados<\/h2>\n\n\n\n<p>Aunque no se ha reportado un ataque masivo exitoso usando slopsquatting, los investigadores han demostrado que el vector es completamente funcional.<\/p>\n\n\n\n<p><strong>El experimento de huggingface-cli (2024).<\/strong> El investigador Bar Lanyado de Lasso Security observ\u00f3 que m\u00faltiples modelos inventaban un paquete de Python llamado <code>huggingface-cli<\/code>. La herramienta real se instala con otro comando (<code>pip install -U \"huggingface_hub[cli]\"<\/code>), pero los modelos confund\u00edan el nombre. Lanyado registr\u00f3 un paquete vac\u00edo con ese nombre en PyPI para ver qu\u00e9 pasaba. En tres meses, sin promoci\u00f3n alguna, acumul\u00f3 <strong>m\u00e1s de 30,000 descargas reales<\/strong>. Incluso Alibaba hab\u00eda copiado el comando alucinado en uno de sus repositorios p\u00fablicos. Si un atacante lo hubiera registrado primero con un payload malicioso, todos esos sistemas habr\u00edan sido comprometidos.<\/p>\n\n\n\n<p><strong>react-codeshift (enero 2026).<\/strong> El caso mencionado al inicio. Eriksen rastre\u00f3 el origen hasta un commit con 47 archivos generados por agentes de IA donde ning\u00fan humano revis\u00f3 el resultado. El paquete se propag\u00f3 a 237 repositorios, fue traducido al japon\u00e9s, y recib\u00eda descargas diarias de agentes automatizados. Nadie lo plant\u00f3. La superficie de ataque se expandi\u00f3 sola.<\/p>\n\n\n\n<p><strong>unused-imports.<\/strong> La IA recomendaba este nombre en lugar del paquete real <code>eslint-plugin-unused-imports<\/code>. La versi\u00f3n con el nombre corto fue registrada como paquete malicioso y acumulaba m\u00e1s de 200 descargas semanales.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Por qu\u00e9 el problema se est\u00e1 acelerando<\/h2>\n\n\n\n<p>El <strong>vibe coding<\/strong> \u2014 t\u00e9rmino acu\u00f1ado por Andrej Karpathy \u2014 describe la pr\u00e1ctica de dejar que la IA escriba todo el c\u00f3digo mientras el desarrollador solo da instrucciones en lenguaje natural, sin revisar cada dependencia. Seg\u00fan GitHub, m\u00e1s del 97% de los desarrolladores han usado herramientas de IA para programar al menos una vez.<br><br>Pero el factor que multiplica el riesgo son los <strong>agentes de IA aut\u00f3nomos<\/strong>. Herramientas como Claude Code, Codex CLI o Cursor pueden ejecutar <code>pip install<\/code> o <code>npm install<\/code> directamente, sin intervenci\u00f3n humana. El caso de <code>react-codeshift<\/code> lo demuestra: no fue un desarrollador quien propag\u00f3 el paquete a 237 repositorios, fueron agentes ejecutando instrucciones de otros agentes. Una cadena automatizada donde ning\u00fan humano revis\u00f3 el eslab\u00f3n m\u00e1s d\u00e9bil.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"571\" src=\"https:\/\/hacking.onesec.mx\/wp-content\/uploads\/2026\/04\/slopsquatting_2-1024x571.png\" alt=\"\" class=\"wp-image-1950\" srcset=\"https:\/\/hacking.onesec.mx\/wp-content\/uploads\/2026\/04\/slopsquatting_2-1024x571.png 1024w, https:\/\/hacking.onesec.mx\/wp-content\/uploads\/2026\/04\/slopsquatting_2-300x167.png 300w, https:\/\/hacking.onesec.mx\/wp-content\/uploads\/2026\/04\/slopsquatting_2-768x428.png 768w, https:\/\/hacking.onesec.mx\/wp-content\/uploads\/2026\/04\/slopsquatting_2.png 1163w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Qu\u00e9 pueden hacer las organizaciones<\/h2>\n\n\n\n<p>La soluci\u00f3n no es dejar de usar IA \u2014 eso ser\u00eda como abandonar el correo electr\u00f3nico porque existe el phishing. Lo que se necesita es incorporar verificaci\u00f3n en el flujo de trabajo.<\/p>\n\n\n\n<p><strong>Verificar antes de instalar.<\/strong> Antes de ejecutar un comando sugerido por la IA, revisar que el paquete exista en el repositorio oficial. Verificar fecha de creaci\u00f3n, descargas, autor y si tiene repositorio de c\u00f3digo fuente. Un paquete leg\u00edtimo rara vez tiene cero historial.<\/p>\n\n\n\n<p><strong>Usar esc\u00e1neres de dependencias.<\/strong> Herramientas como Socket, Snyk o OWASP dep-scan identifican paquetes sospechosos autom\u00e1ticamente. Integrarlas en el pipeline de CI\/CD agrega protecci\u00f3n sin frenar el desarrollo.<\/p>\n\n\n\n<p><strong>Implementar lock files y verificaci\u00f3n de hashes.<\/strong> Los archivos de bloqueo y la verificaci\u00f3n de hashes garantizan que las dependencias sean exactamente las aprobadas previamente.<\/p>\n\n\n\n<p><strong>Aislar agentes de IA.<\/strong> Si se usan agentes aut\u00f3nomos que ejecutan comandos de instalaci\u00f3n, configurarlos dentro de contenedores desechables con restricciones de red.<\/p>\n\n\n\n<p><strong>Capacitar a los equipos.<\/strong> Los desarrolladores necesitan saber que las sugerencias de la IA pueden incluir paquetes inexistentes y que copiar y pegar sin verificar tiene consecuencias reales de seguridad.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Reflexi\u00f3n final<\/h2>\n\n\n\n<p>El slopsquatting es un ejemplo claro de c\u00f3mo una debilidad inherente de la IA \u2014 las alucinaciones \u2014 se convierte en un vector de ataque contra la cadena de suministro de software. No requiere exploits sofisticados ni vulnerabilidades zero-day. Solo paciencia, un modelo que invente un nombre y un registro gratuito en un repositorio p\u00fablico.<\/p>\n\n\n\n<p>Todo lo documentado hasta hoy son pruebas de concepto. Pero la infraestructura para un ataque masivo ya existe: los nombres alucinados son predecibles, los repositorios est\u00e1n abiertos, y millones de desarrolladores copian y pegan sugerencias de IA sin verificarlas.<\/p>\n\n\n\n<p>La pregunta no es si alguien va a explotar este vector a gran escala. La pregunta es si tu organizaci\u00f3n va a estar preparada cuando suceda.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Referencias<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Eriksen, C. (2026). <em>&#8220;Agent Skills Are Spreading Hallucinated npx Commands.&#8221;<\/em> Aikido Security. <a href=\"https:\/\/www.aikido.dev\/blog\/agent-skills-spreading-hallucinated-npx-commands\">https:\/\/www.aikido.dev\/blog\/agent-skills-spreading-hallucinated-npx-commands<\/a><\/li>\n\n\n\n<li>Lanyado, B. (2024). &#8220;<em>Diving Deeper into AI Package Hallucinations.<\/em>&#8221; Lasso Security Research. <a href=\"https:\/\/www.lasso.security\/blog\/ai-package-hallucinations\">https:\/\/www.lasso.security\/blog\/ai-package-hallucinations<\/a><\/li>\n\n\n\n<li>Trend Micro. (2025). &#8220;<em>Slopsquatting: When AI Agents Hallucinate Malicious Packages.<\/em>&#8221; <a href=\"https:\/\/www.trendmicro.com\/vinfo\/us\/security\/news\/cybercrime-and-digital-threats\/slopsquatting-when-ai-agents-hallucinate-malicious-packages\">https:\/\/www.trendmicro.com\/vinfo\/us\/security\/news\/cybercrime-and-digital-threats\/slopsquatting-when-ai-agents-hallucinate-malicious-packages<\/a><\/li>\n\n\n\n<li>MITRE ATT&amp;CK. T\u00e9cnica T1195.001 \u2014 &#8220;<em>Supply Chain Compromise.&#8221;<\/em> <a href=\"https:\/\/attack.mitre.org\/techniques\/T1195\/001\/\">https:\/\/attack.mitre.org\/techniques\/T1195\/001\/<\/a><\/li>\n<\/ul>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Un desarrollador le pide a su asistente de IA que le ayude a conectar su proyecto Node.js con una base de datos. La IA responde con seguridad: &#8220;Instala el paquete con npm install react-codeshift&#8220;. El desarrollador copia el comando, lo pega en su terminal y presiona Enter. El paquete se instala sin problemas y parece [&hellip;]<\/p>\n","protected":false},"author":5,"featured_media":1947,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[17,18,6,5],"tags":[],"class_list":["post-1927","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-inteligencia-artificial","category-llms","category-pentest-2","category-seguridad-de-la-informacion"],"_links":{"self":[{"href":"https:\/\/hacking.onesec.mx\/index.php\/wp-json\/wp\/v2\/posts\/1927","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/hacking.onesec.mx\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/hacking.onesec.mx\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/hacking.onesec.mx\/index.php\/wp-json\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/hacking.onesec.mx\/index.php\/wp-json\/wp\/v2\/comments?post=1927"}],"version-history":[{"count":16,"href":"https:\/\/hacking.onesec.mx\/index.php\/wp-json\/wp\/v2\/posts\/1927\/revisions"}],"predecessor-version":[{"id":1951,"href":"https:\/\/hacking.onesec.mx\/index.php\/wp-json\/wp\/v2\/posts\/1927\/revisions\/1951"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/hacking.onesec.mx\/index.php\/wp-json\/wp\/v2\/media\/1947"}],"wp:attachment":[{"href":"https:\/\/hacking.onesec.mx\/index.php\/wp-json\/wp\/v2\/media?parent=1927"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/hacking.onesec.mx\/index.php\/wp-json\/wp\/v2\/categories?post=1927"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/hacking.onesec.mx\/index.php\/wp-json\/wp\/v2\/tags?post=1927"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}