Incidentes Asociados

El auge de las herramientas de generación de código basadas en LLM está transformando la forma en que los desarrolladores escriben software y, en el proceso, presenta nuevos riesgos para la cadena de suministro.
Estos asistentes de codificación de IA, al igual que los grandes modelos de lenguaje en general, tienen la costumbre de alucinar. Sugieren código que incorpora paquetes de software inexistentes.
Como señalamos en marzo y septiembre del año pasado, investigadores académicos y de seguridad han descubierto que los asistentes de codificación de IA inventan nombres de paquetes. En un estudio reciente, los investigadores descubrieron que alrededor del 5,2 % de las sugerencias de paquetes de los modelos comerciales no existían, en comparación con el 21,7 % de los modelos de código abierto o de libre acceso.
Ejecutar ese código debería generar un error al importar un paquete inexistente. Pero los delincuentes se han dado cuenta de que pueden aprovechar la alucinación para su propio beneficio.
Solo se necesita crear un paquete de software malicioso con un nombre de paquete alucinado y luego subirlo a un registro o índice de paquetes como PyPI o npm para su distribución. Posteriormente, cuando un asistente de código de IA vuelve a alucinar el nombre cooptado, el proceso de instalación de dependencias y ejecución del código ejecutará el malware.
La recurrencia parece seguir un patrón bimodal: algunos nombres alucinados aparecen repetidamente al volver a ejecutar los avisos, mientras que otros desaparecen por completo, lo que sugiere que ciertos avisos producen los mismos paquetes fantasma.
Como señaló recientemente la firma de seguridad Socket (https://socket.dev/blog/slopsquatting-how-ai-hallucinations-are-fueling-a-new-class-of-supply-chain-attacks), los investigadores académicos que exploraron el tema el año pasado descubrieron que al ejecutar diez veces el mismo mensaje que desencadena las alucinaciones, el 43 % de los paquetes alucinados se repetían constantemente y el 39 % no reaparecían.
La explotación de nombres de paquetes alucinados representa una forma de typosquatting (https://capec.mitre.org/data/definitions/630.html), en la que se utilizan variaciones o errores ortográficos de términos comunes para engañar a las personas. Seth Michael Larson, desarrollador de seguridad residente de la Python Software Foundation, lo ha denominado "slopsquatting" («slop» es un término peyorativo común para referirse a la salida de un modelo de IA).
"Estamos en las primeras etapas de nuestro análisis de este problema desde el punto de vista del ecosistema", declaró Larson a The Register. "Es difícil, y probablemente imposible, cuantificar cuántos intentos de instalación se producen debido a las alucinaciones de LLM sin una mayor transparencia por parte de los proveedores de LLM. Los usuarios del código, los paquetes y la información generados por LLM deberían verificar los resultados de LLM con la realidad antes de ponerlos en práctica; de lo contrario, podría haber consecuencias reales".
Larson explicó que existen muchas razones por las que un desarrollador podría intentar instalar un paquete inexistente, como escribir mal el nombre del paquete, instalar incorrectamente paquetes internos sin comprobar si esos nombres ya existen en un índice público (confusión de dependencias), diferencias en el nombre del paquete y el nombre del módulo, etc.
"Estamos observando un cambio real en la forma en que los desarrolladores escriben código", declaró Feross Aboukhadijeh, director ejecutivo de la empresa de seguridad Socket, a The Register. Dado que las herramientas de IA se han convertido en el asistente predeterminado para muchos, la "codificación de vibraciones" (https://x.com/karpathy/status/1886192184808149383) es constante. Los desarrolladores dan indicaciones a la IA, copian la sugerencia y siguen adelante. O peor aún, el agente de IA simplemente instala los paquetes recomendados por sí mismo.
El problema es que estas sugerencias de código a menudo incluyen nombres de paquetes imaginarios que parecen reales, pero no existen.
"El problema es que estas sugerencias de código a menudo incluyen nombres de paquetes imaginarios que parecen reales, pero no existen. Lo he visto de primera mano. Lo pegas en tu terminal y la instalación falla, o peor aún, no falla, porque alguien ha manipulado el nombre exacto del paquete.
Aboukhadijeh dijo que estos paquetes falsos pueden parecer muy convincentes.
"Cuando investigamos, a veces encontramos archivos README de aspecto realista, repositorios de GitHub falsos e incluso blogs sospechosos que hacen que el paquete parezca auténtico", dijo, y agregó que los análisis de seguridad de Socket detectan estos paquetes porque analizan el funcionamiento del código.
¡Qué mundo en el que vivimos! Los paquetes manipulados por una IA son validados y aprobados por otra IA demasiado ansiosa por ayudar.
"Peor aún, cuando buscas en Google uno de estos nombres de paquetes manipulados, a menudo obtienes un resumen generado por la propia IA de Google que elogia con confianza el paquete, diciendo que es útil, estable y está bien mantenido. Pero simplemente repite el propio README del paquete, sin escepticismo ni contexto. Para un desarrollador con prisa, da una falsa sensación de legitimidad.
"¡Qué mundo en el que vivimos! Los paquetes alucinados por la IA son validados y aprobados por otra IA demasiado ansiosa por ayudar".
Aboukhadijeh mencionó un incidente ocurrido en enero en el que la Vista General de la IA de Google, que responde a las búsquedas con texto generado por la IA, sugirió un paquete npm malicioso @async-mutex/mutex, que estaba typosquating en el paquete legítimo async-mutex.
También señaló que recientemente un actor de amenazas con el nombre "_Iain" publicó un manual en un foro de la dark web que detalla cómo construir una botnet basada en blockchain utilizando paquetes npm maliciosos. Aboukhadijeh explicó que Iain "automatizó la creación de miles de paquetes con errores tipográficos (muchos dirigidos a bibliotecas criptográficas) e incluso utilizó ChatGPT para generar variantes realistas de nombres de paquetes reales a gran escala. Compartió videotutoriales que explicaban el proceso a otros, desde la publicación de los paquetes hasta la ejecución de cargas útiles en equipos infectados mediante una interfaz gráfica de usuario. Es un claro ejemplo de cómo los atacantes están utilizando la IA como arma para acelerar los ataques a la cadena de suministro de software".
Larson afirmó que la Fundación del Software Python trabaja constantemente para dificultar el abuso de paquetes, añadiendo que este trabajo requiere tiempo y recursos.
Alpha-Omega ha patrocinado el trabajo de Mike Fiedler, nuestro ingeniero de seguridad de PyPI, para reducir los riesgos de malware en PyPI, por ejemplo, mediante la implementación de una API programática para reportar malware, la colaboración con los equipos de reporte de malware existentes y la implementación de mejores detecciones para el abuso tipográfico en proyectos importantes", afirmó.
Los usuarios de PyPI y los administradores de paquetes en general deben verificar que el paquete que instalan sea un paquete conocido y existente, que el nombre no tenga errores tipográficos y que su contenido se haya revisado antes de la instalación. Mejor aún, las organizaciones pueden replicar un subconjunto de PyPI dentro de sus propias organizaciones para tener mucho más control sobre los paquetes disponibles para los desarrolladores.