El auge de las herramientas de generación de código impulsadas por LLM está transformando la forma en que los desarrolladores escriben software e introduciendo nuevos riesgos en el proceso.
Estos asistentes de codificación de IA, al igual que los grandes modelos de lenguaje en general, tienen la costumbre de alucinar y sugieren código que incorpora paquetes de software inexistentes.
- El 19,7% de todos los paquetes recomendados no existían.
- Los modelos de código abierto presentaban alucinaciones con mucha mayor frecuencia (un promedio del 21,7%), en comparación con los modelos comerciales, que presentaron un 5,2%.
- Los peores infractores (CodeLlama 7B y CodeLlama 34B) presentaron alucinaciones en más de un tercio de los resultados.
- GPT-4 Turbo tuvo el "mejor rendimiento", con una tasa de alucinaciones de tan solo el 3,59%.
- En todos los modelos, los investigadores observaron más de 205.000 nombres de paquetes únicos con alucinaciones.
Como ya se informó en 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 disponibles públicamente.

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 "fantasma", 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 de forma fiable.
Como señaló recientemente la empresa de seguridad Socket, los investigadores académicos que exploraron el tema el año pasado descubrieron que volver a ejecutar el mismo aviso que desencadenó la alucinación diez veces resultó en que el 43% de los paquetes alucinados se repitieran cada vez y el 39% nunca reapareciera.
La explotación de nombres de paquetes alucinados representa una forma de typosquatting, en la que se utilizan variaciones o errores ortográficos de términos comunes para engañar a la gente. 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 los resultados de los modelos de IA).
"Estamos en las primeras etapas de la evaluación de este problema desde el punto de vista del ecosistema. 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 comprobar la información generada por LLM con la realidad antes de ponerla en práctica; de lo contrario, podría haber consecuencias reales", declaró Larson a The Register.
Larson afirmó 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 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. "Con las herramientas de IA convirtiéndose en el asistente predeterminado para muchos, la 'vibe coding' es constante. Los desarrolladores dan instrucciones 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".
Hay un nuevo tipo de programación que llamo "programar por vibraciones", donde te dejas llevar por las vibraciones, adoptas las exponenciales y te olvidas de que el código siquiera existe. Es posible porque los LLM son cada vez mejores y casi no tocas el teclado. Pido cosas absurdas como "reducir el relleno de la barra lateral a la mitad" porque me da pereza encontrarlo. Siempre acepto todo; ya no leo las diferencias. Cuando recibo mensajes de error, los copio y pego sin comentarios; normalmente eso lo soluciona. El código crece más allá de mi comprensión habitual; tendría que leerlo a fondo durante un buen rato. A veces, los LLM no pueden corregir un error, así que simplemente lo rodeo o pido cambios aleatorios hasta que desaparece. No está mal para proyectos improvisados de fin de semana, pero sigue siendo bastante divertido. Estoy desarrollando un proyecto o una aplicación web, pero en realidad no es codificación: solo veo cosas, digo cosas, ejecuto cosas y copio y pego cosas, y en general funciona.
El problema es que estas sugerencias de código a menudo incluyen nombres de paquetes imaginarios que parecen reales, pero no existen. 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.
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.
Recientemente un actor de amenazas con el nombre "_Iain" publicó un manual en un foro de la dark web que detallaba cómo construir una botnet basada en blockchain utilizando paquetes NPM maliciosos. Aboukhadijeh explicó que _Iain automatizó la creación de miles de paquetes modificados (muchos de ellos dirigidos a bibliotecas de cifrado) 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 máquinas infectadas 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.
Los usuarios de PyPI y los administradores de paquetes en general deberían comprobar que el paquete que están instalando 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.
Fuente: The Register