Connexion
Abonnez-vous

Des malwares squattent les noms de paquets hallucinés par les modèles de langage

La vérification humaine est indispensable

Des malwares squattent les noms de paquets hallucinés par les modèles de langage

Les IA génératives spécialisées dans le code peuvent parfois halluciner, allant jusqu'à créer des noms de paquets. Des chercheurs montrent que les hallucinations des grands modèles de langage ont tendance à générer les mêmes faux noms de paquets. Une occasion en or pour des acteurs malintentionnés qui pourraient squatter ces noms et créer des paquets infestés.

Le 14 avril à 16h32

Après, le typosquatting et à l'heure où l'IA générative est utilisée par de nombreux développeurs pour les assister dans leur création, parlons du « slopsquatting ».

Comme nous l'expliquions, le terme « slop » est depuis quelque temps utilisé pour désigner les contenus bas de gamme générés par des IA et qui inondent de plus en plus le web. Ici, le slop concerne la génération de code.

En effet, depuis l'arrivée des IA génératives utilisées comme assistante d'outils d'édition de code, on s'est rapidement aperçu qu'elles pouvaient inciter les développeurs à introduire des failles de sécurité dans leurs codes. Des chercheurs ont déjà montré que les développeurs utilisant des IA assistantes proposent des réponses moins bonnes et moins sécurisées que ceux sans assistant.

L'autre vecteur d'attaque intrinsèquement lié à la génération de code

Mais, comme l'affirmait déjà à l'époque le lecteur de Next, SebGF, « l'autre vecteur d'attaque intrinsèquement lié à la génération de code par IA [est] l'hallucination ».

Parfois, un grand modèle de langage (LLM) utilisé dans des IA génératives comme Codex ou Copilot peut générer le nom d'un paquet qui n'existe pas et suggérer son utilisation dans un code, alors qu'évidemment ce n'est pas une bonne solution. C'est le développeur Seth Larson, qui travaille pour la Fondation Python Software, qui a inventé le terme de « slopsquatting » à utiliser « quand un LLM hallucine un nom de paquet inexistant, et qu'un mauvais acteur l'enregistre malicieusement. Le frère IA du typosquatting ».

Des paquets vraiment hallucinés

Des chercheurs (notamment de l'Université du Texas), ont analysé le phénomène dans un article mis en ligne sur la plateforme de prépublication arXiv.

Ils confirment dans leur article que l'hallucination de nom de paquet n'est pas un problème marginal. Ils ont testé 16 modèles de langage en générant 576 000 exemples de code produit dans deux langages informatiques (python et JavaScript). Tous ont généré des noms de paquets qui n'existaient pas. Mais avec une différence importante : les modèles d'OpenAI semblent générer beaucoup moins d'hallucinations de noms de paquets, GPT-4 Turbo étant le modèle qui en génère le moins avec 3,6 % de noms de paquets « hallucinés ». Un CodeLlama 34B Python, pourtant spécialisé, génère des faux noms de paquets dans 22 % des cas environ :

Les chercheurs expliquent dans un schéma comment des utilisateurs malveillants peuvent mettre en place l'attaque en exploitant les hallucinations des modèles de langage :

L'idée est d'abord de trouver un nom de paquet halluciné par un modèle de langage via une demande de génération de code. L'utilisateur malveillant vérifie que le paquet n'existe pas dans les dépôts connus, puis en publie un, évidemment en incluant une partie susceptible de nuire à l'utilisateur ou d'exploiter son ordinateur à des fins douteuses. Ce nouveau paquet peut ainsi être inclus dans le code d'un développeur lambda qui aura demandé à son assistant préféré de lui générer du code.

Une hallucination répétée tout le temps ou pas du tout

Pour cela, me direz-vous, il faut que le nom de paquet halluciné soit le même. Or les chercheurs constatent que certains noms de paquets hallucinés reviennent.

En testant 500 prompts de génération de code 10 fois chacun, ils ont pu voir que la plupart des noms hallucinés, soit n'étaient plus jamais hallucinés, soit l'étaient tout le temps :

On peut voir ici que si DeepSeek hallucine plus de noms de paquets que les modèles d'OpenAI, le modèle chinois a tendance à moins répéter ces noms.

Un paramètre des modèles semble en lien avec ce phénomène : la température du modèle. Plus la température est faible, plus le résultat généré est prédictible, attendu. Mais les chercheurs constatent que plus on l'augmente et plus la génération de noms de paquets inexistants arrive :

Une vérification de la supply-chain reste indispensable

Dans l'article, les chercheurs montrent aussi que les noms de paquets « hallucinés » peuvent se confondre dans un code relu rapidement car leurs noms sont assez proches de noms de paquets existants :

« Nous n'en sommes qu'au tout début de l'étude de ce problème au niveau de l'écosystème », affirme Seth Larson auprès de The Register. Notamment, il explique qu' « il est difficile, voire impossible, de quantifier le nombre de tentatives d'installation dues aux hallucinations de LLM sans une plus grande transparence de la part des fournisseurs de LLM. Les utilisateurs de code, de paquets et d'informations générés par LLM devraient vérifier les résultats de LLM par rapport à la réalité avant de mettre ces informations en service, sinon il peut y avoir des conséquences dans le monde réel ».

C'est d'ailleurs ce que disait aussi SebGF, « rappelant que la vérification de la supply-chain reste indispensable ».

Commentaires (14)

votre avatar
Que vient faire la température ? quelle est sa signification ? un lien avec de l'entropie ?
votre avatar
Je ne connaissais pas mais ça semble un concept de l'IA. Il y a quelques explications sur ce lien.
votre avatar
J'avoue, j'ai été un peu rapide en donnant comme définition " Plus la température est faible, plus le résultat généré est prédictible, attendu". La définition de learnprompting me semble assez bien :)
votre avatar
Certes, mais ce qui est "conservateur" a alors nécessairement une origine disqualifiée comme "hallucinée" dans les données d'entraînement. Augmenter le paramètre ne produit pas quelque chose de moins conservateur plutôt que complètement sensible. Inversement, baisser le paramètre ne fait que ramener au paramétrage opéré d'avance sur la base de la copie-transformation des originaux. On ne peut pas dire que rester sur un paramètre pré-configuré est a priori conservateur sans remarquer la situation d'usage préalable légèrement étrange.

Artificial Temperature est moins tautologique qu'Artificial Intelligence !
Puisque remplacer les concepteurs d'AT par des AI est la parade pour créer encore plus d'emplois fictifs et favorables à l'usage immodéré d'une énergie "évidemment" décarbonnée.
votre avatar
La température est un paramètre qui introduit de l’aléatoire dans la génération de texte par un modèle de langage. Plus elle est élevée, plus la génération s’éloigne des réponses les plus probables apprises pendant l'entraînement, ce qui favorise la créativité et la diversité des réponses. En d'autres termes, c’est un indicateur du degré d’exploration du modèle par rapport à ce qu’il a appris : une température basse donne des réponses plus prévisibles, proches des données d’apprentissage, tandis qu’une température haute permet des sorties plus originales, voire inattendues.
votre avatar
J'ai été chercher sur le net pour comprendre aussi et je suis tombé là dessus :
"La température est un hyperparamètre de configuration qui contrôle le caractère aléatoire de la sortie du modèle de langage. Une température élevée produit des résultats plus imprévisibles et créatifs, tandis qu'une température basse produit une sortie plus commune et conservatrice."
votre avatar
J'avoue que j'ai un peu de mal avec cette assertion "imprévisible = créatif".

A priori, j'aurais tendance à penser que la créativité implique de l'imprévisibilité, oui, mais avec un second facteur en plus: de la pertinence (=l'adéquation au besoin).

Il me semble que c'est ce second facteur qui fait l'intérêt de la créativité, sa valeur ajoutée: le "simple" random me semble être, des deux, l'élément le plus facile à générer pour une IA... et aussi le moins intéressant au bout du compte.

(Avis perso, hein. Et je ne connais pour ainsi dire rien à l'IA ^^)
votre avatar
Dans un contexte de texte écrit (pas du code), on peut comprendre que l'on emploie le terme créatif par analogie. L'IA produit des mots qui sont moins probables, donc des phrases moins convenues.
Mais pour autant, serait-elle capable d'écrire quelque chose comme : la terre est bleue comme une orange, sans avoir été entraînée avec le poème d'Eluard ? Je ne le pense pas.

Par contre, dans le domaine du code, l'aléatoire ça va introduire des bugs, c'est tout.
votre avatar
Un paramètre des modèles semble en lien avec ce phénomène : la température du modèle. Plus la température est faible, plus le résultat généré est prédictible, attendu. Mais les chercheurs constatent que plus on l'augmente et plus la génération de noms de paquets inexistants arrive
C'est quoi l'intérêt d'augmenter la température quand on veut que l'IA génère du code ?
Ça ajoute de l'aléatoire ce qui me semble une mauvaise chose pour produire du code.

@SebGF :bravo:, cité 2 fois dans l'article (bon, il s'agit du même commentaire, mais quand même !)
votre avatar
Waouh, comme quoi il m'arrive par moments d'avoir un éclair de lucidité entre deux conneries. :D

Merci @MartinClavey pour la citation.
votre avatar
Je te lis avec intérêt en général et sur l'IA en particulier.
votre avatar
Il y a un an j'avais identifié le paquet keycloak (le sso de RedHat) sous pypi.org le paquet officiel est python-keycloak et non keycloak, et bien sûr chatgpt et copilot proposaient d'installer le paquet suspect via un simple pip install keycloak et cela était systématiquement proposé par copilot.
Le premier réflexe à avoir et d'aller vérifier les paquets.
votre avatar
En l'occurrence, ça montre aussi qu'on a un souci au niveau des outils de fourniture de packets, qui ne vérifient pas ce type de "squatting".
J'ai bien conscience que ce n'est normalement pas leur travail, mais dans un cas comme celui que tu donnes, il est étrange que l'officiel ai un nom plus compliqué que le "pirate", et qu'un packet aussi important (tant par son adoption que par son positionnement critique dans la stack) n'ai pas des "protections" appliquées.

S'il me suffit de proposer le packet "chromium-beta" (par exemple) pour infecter des utilisateurs qui cherchent à installer Chromium du canal Beta, c'est qu'il y a un problème au niveau de la sécurisation du mot-clé "chromium".
votre avatar
Merci les IA générative de participer (volontairement?) à la destruction d'internet :craint:

Des malwares squattent les noms de paquets hallucinés par les modèles de langage

  • L'autre vecteur d'attaque intrinsèquement lié à la génération de code

  • Des paquets vraiment hallucinés

  • Une hallucination répétée tout le temps ou pas du tout

  • Une vérification de la supply-chain reste indispensable

Fermer