Selon Bar Lanyado, chercheur en sécurité chez Lasso Security, l’une des entreprises trompées par l’IA en incorporant ce package est Alibaba, qui, à l'heure de l'écriture de ces lignes, inclut toujours une commande pip pour télécharger le paquetage Python huggingface-cli dans ses instructions d'installation de GraphTranslator.
Il existe une version légitime de huggingface-cli, installée en utilisant pip install -U "huggingface_hub[cli]". Mais la huggingface-cli distribuée via le Python Package Index (PyPI) et requise par le GraphTranslator d'Alibaba - installée à l'aide de pip install huggingface-cli - est fausse, imaginée par l'IA et rendue réelle par Lanyado dans le cadre d'une expérience.
Il a créé huggingface-cli en décembre après l'avoir vu à plusieurs reprises inventé par l'IA générative ; en février de cette année, Alibaba s'y référait dans les instructions README de GraphTranslator au lieu du véritable outil CLI Hugging Face.
Une expérience du chercheur en sécurité
Lanyado a cherché à savoir si ces types de progiciels hallucinés (noms de paquets inventés par des modèles d'IA générative, vraisemblablement au cours du développement d'un projet) persistent dans le temps. Il voulait également vérifier si les noms de paquets inventés pouvaient être cooptés et utilisés pour distribuer des codes malveillants en écrivant de véritables paquets qui utilisent les noms de codes imaginés par les IA.
L'idée est que quelqu'un de malveillant pourrait demander aux modèles des conseils en matière de code, prendre note des paquets imaginaires que les systèmes d'IA recommandent à plusieurs reprises, puis mettre en œuvre ces dépendances de sorte que d'autres développeurs, lorsqu'ils utilisent les mêmes modèles et reçoivent les mêmes suggestions, finissent par tirer ces bibliothèques, qui peuvent être empoisonnées par des logiciels malveillants.
Il y a six mois (une éternité en termes d'IA générative), alors que je travaillais à Vulcan Cyber, j'ai mené des recherches sur les hallucinations des LLM concernant les recommandations de paquets open source.
Dans mes recherches précédentes, j'ai exposé une nouvelle technique d'attaque : AI Package Hallucination. Cette technique d'attaque utilise des outils LLM tels que ChatGPT, Gemini, et d'autres, afin de diffuser des paquets malveillants qui n'existent pas, en se basant sur des sorties de modèle fournies à l'utilisateur final.
J'ai également testé la technique sur le modèle GPT-3.5 turbo et utilisé 457 questions pour plus de 40 sujets dans 2 langages de programmation. J'ai découvert que pour près de 30 % de mes questions, le modèle recommandait au moins un paquet halluciné que les attaquants pouvaient utiliser à des fins malveillantes.
Cette fois-ci, j'ai voulu passer à la vitesse supérieure et mettre à l'échelle tous les éléments de ma recherche précédente : le nombre de questions posées, le nombre de langages vérifiés et les modèles que nous avons testés.
Dans mes recherches précédentes, j'ai exposé une nouvelle technique d'attaque : AI Package Hallucination. Cette technique d'attaque utilise des outils LLM tels que ChatGPT, Gemini, et d'autres, afin de diffuser des paquets malveillants qui n'existent pas, en se basant sur des sorties de modèle fournies à l'utilisateur final.
J'ai également testé la technique sur le modèle GPT-3.5 turbo et utilisé 457 questions pour plus de 40 sujets dans 2 langages de programmation. J'ai découvert que pour près de 30 % de mes questions, le modèle recommandait au moins un paquet halluciné que les attaquants pouvaient utiliser à des fins malveillantes.
Cette fois-ci, j'ai voulu passer à la vitesse supérieure et mettre à l'échelle tous les éléments de ma recherche précédente : le nombre de questions posées, le nombre de langages vérifiés et les modèles que nous avons testés.
- Je cherche à savoir si les hallucinations sur les paquets persistent dans le paysage actuel, six mois après les premières conclusions. Je voulais réaffirmer l'importance de ce problème et vérifier si les fournisseurs de modèles l'avaient déjà résolu.
- J'avais l'intention d'élargir le champ de mon enquête précédente en utilisant un plus grand nombre de questions, afin de vérifier si les pourcentages de paquets hallucinés restaient cohérents avec mes résultats antérieurs. En outre, je cherchais à évaluer la résilience de cette technique à travers différents LLM, car il est crucial de comprendre sa capacité d'adaptation.
- Je souhaitais explorer la possibilité d'hallucinations croisées, où le même paquet halluciné apparaît dans différents modèles, mettant ainsi en lumière d'éventuelles hallucinations partagées.
- Je cherche à rassembler des statistiques plus complètes sur la répétitivité des hallucinations de paquets, afin de mieux comprendre l'ampleur de ce problème de sécurité.
- Je voulais tester l'efficacité de l'attaque dans la nature et voir si la technique que j'ai découverte pouvait être exploitée, afin de confirmer l'applicabilité pratique de mes découvertes.
L'année dernière, par l'intermédiaire de la société de sécurité Vulcan Cyber, Lanyado a publié une recherche détaillant la manière dont une personne peut poser une question de codage à un modèle d'IA comme ChatGPT et recevoir une réponse qui recommande l'utilisation d'une bibliothèque logicielle, d'un progiciel ou d'un framework qui n'existe pas.
« Lorsqu'un attaquant lance une telle campagne, il demande au modèle des paquets qui résolvent un problème de codage, puis il reçoit des paquets qui n'existent pas », a expliqué Lanyado. « Il télécharge des paquets malveillants portant le même nom dans les registres appropriés et, à partir de là, il n'a plus qu'à attendre que les gens téléchargent les paquets ».
*
Des hypothèses dangereuses
L'empressement des modèles d'IA à citer avec assurance des décisions de justice inexistantes est désormais bien connu et a suscité un certain embarras chez les avocats qui n'étaient pas au courant de cette tendance. Il s'avère que les modèles d'IA générative font de même pour les progiciels.
Comme Lanyado l'a indiqué précédemment, un malfaiteur pourrait utiliser un nom inventé par l'IA pour un paquet malveillant téléchargé sur un référentiel dans l'espoir que d'autres personnes puissent télécharger le logiciel malveillant. Mais pour que ce vecteur d'attaque soit significatif, il faudrait que les modèles d'IA recommandent à plusieurs reprises le nom coopté.
C'est ce que Lanyado a entrepris de tester. Armé de milliers de questions « comment faire », il a interrogé quatre modèles d'IA (GPT-3.5-Turbo, GPT-4, Gemini Pro alias Bard, et Command [Cohere]) sur des défis de programmation dans cinq langages de programmation/temps d'exécution différents (Python, Node.js, Go, .Net et Ruby), chacun d'entre eux ayant son propre système d'empaquetage.
Il s'avère qu'une partie des noms tirés de nulle part par ces chatbots sont persistants, certains dans différents modèles. Et la persistance - la répétition du faux nom - est la clé pour transformer la fantaisie de l'IA en une attaque fonctionnelle. L'attaquant a besoin que le modèle d'IA répète les noms des paquets hallucinés dans ses réponses aux utilisateurs pour que les logiciels malveillants créés sous ces noms soient recherchés et téléchargés.
Lanyado a choisi 20 questions au hasard pour les hallucinations "zero-shot" et les a posées 100 fois à chaque modèle. Son objectif était d'évaluer combien de fois le nom du paquet halluciné restait le même. Les résultats de son test révèlent que les noms persistent suffisamment souvent pour constituer un vecteur d'attaque fonctionnel, même si ce n'est pas toujours le cas, et dans certains écosystèmes d’empaquetages plus que dans d'autres.
Avec GPT-4, 24,2 % des réponses aux questions ont produit des paquets hallucinés, dont 19,6 % étaient répétitifs, selon Lanyado. Avec GPT-3.5, 22,2 % des réponses aux questions ont provoqué des hallucinations, dont 13,6 % étaient répétitives. Pour Gemini, 64,5 % des questions ont donné lieu à des noms inventés, dont 14 % se répétaient. Enfin, pour Cohere, 29,1 % des hallucinations et 24,2 % des répétitions ont été observées.
Malgré cela, les écosystèmes d’empaquetages de Go et de .Net ont été conçus de manière à limiter le potentiel d'exploitation en refusant aux attaquants l'accès à certains chemins et noms.
« En Go et en .Net, nous avons reçu des paquets hallucinés, mais beaucoup d'entre eux ne pouvaient pas être utilisés pour une attaque (en Go, le nombre était beaucoup plus important qu'en .Net), chaque langage pour sa propre raison », a expliqué Lanyado. « Dans Python et npm, ce n'est pas le cas, car le modèle nous recommande des paquets qui n'existent pas et rien ne nous empêche de télécharger des paquets avec ces noms, de sorte qu'il est certainement beaucoup plus facile d'exécuter ce type d'attaque sur des langages tels que Python et Node.js ».
Le test comme preuve de concept
Lanyado a démontré ce point en distribuant des logiciels malveillants de type "proof-of-concept" en publiant un ensemble de fichiers inoffensifs dans l'écosystème Python. Sur la base du conseil de ChatGPT d'exécuter pip install huggingface-cli, il a téléchargé un paquet vide portant le même nom sur PyPI - celui mentionné ci-dessus - et a créé un paquet factice nommé blabladsa123 pour aider à séparer l'analyse du registre des paquets des tentatives de téléchargement réelles.
Selon lui, le résultat est que huggingface-cli a reçu plus de 15 000 téléchargements authentiques au cours des trois mois pendant lesquels il a été disponible.
« En outre, nous avons effectué une recherche sur GitHub pour déterminer si ce paquet était utilisé dans les dépôts d'autres entreprises », a déclaré Lanyado dans la description de son expérience. « Nos résultats ont révélé que plusieurs grandes entreprises utilisent ou recommandent ce paquet dans leurs dépôts. Par exemple, des instructions pour l'installation de ce paquetage peuvent être trouvées dans le README d'un dépôt dédié à la recherche menée par Alibaba ».
Conclusion
Cette situation soulève des questions sur la persistance de ces packages logiciels imaginés par des modèles IA génératifs et sur la possibilité d’utiliser des noms de packages inventés pour distribuer du code malveillant. En effet, quelqu’un de mal intentionné pourrait demander des conseils de code aux modèles IA, noter les noms de packages imaginés que ces systèmes recommandent fréquemment, puis implémenter ces dépendances afin que d’autres développeurs, en utilisant les mêmes modèles et obtenant les mêmes suggestions, finissent par importer ces bibliothèques, qui pourraient être empoisonnées par des logiciels malveillants.
En somme, l’IA peut parfois nous jouer des tours inattendus, et il est essentiel de rester vigilant lorsqu’elle suggère des dépendances logicielles
Sources : Bar Lanyado, Pouvez-vous faire confiance aux recommandations de ChatGPT ? (étude de l'année dernière de Bar Lanyado), code AliBaba
Et vous ?
La confiance dans les dépendances logicielles : Comment pouvons-nous garantir que les packages que nous utilisons sont sûrs et fiables, surtout lorsque certains d’entre eux sont proposés par des IA ?
Responsabilité des développeurs : Les développeurs ont-ils la responsabilité de vérifier chaque dépendance qu’ils ajoutent à leurs projets ? Comment pouvons-nous encourager de bonnes pratiques à cet égard ?
Transparence et traçabilité : Devrions-nous exiger davantage de transparence de la part des créateurs de packages logiciels ? Comment pouvons-nous tracer l’origine des dépendances pour détecter les anomalies ?
Éducation et sensibilisation : Comment pouvons-nous sensibiliser les développeurs et la communauté logicielle aux risques potentiels liés aux dépendances générées par des IA ?