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