In this article
Hallucinations de packages : impacts et mesures d’atténuation
À mesure que les outils d’IA s’intègrent à nos workflows de développement, les hallucinations de packages ne sont plus de simples désagréments pour la productivité : elles représentent un risque croissant pour la sécurité qui exige notre attention immédiate. Comprendre ce phénomène nous permet de déboguer plus rapidement tout en adoptant des pratiques de développement sécurisées et résilientes dans un monde augmenté par l’IA.
Comprendre les hallucinations de packages
Que sont les hallucinations de packages ?
Les hallucinations de packages désignent un type précis d’erreur de l’IA dans lequel les modèles de génération de code suggèrent des packages ou des dépendances qui semblent plausibles, mais qui n’existent pas. Contrairement aux hallucinations de l’IA traditionnelles, qui produisent des informations factuellement incorrectes, les hallucinations de packages créent des composants logiciels fictifs que les développeurs peuvent tenter d’installer sans le savoir.
Ce phénomène a pris de l’ampleur vers 2021-2022, avec l’adoption généralisée des assistants de codage basés sur l’IA, comme GitHub Copilot et ChatGPT, pour le développement logiciel. Les modèles d’IA apprennent les schémas statistiques de leurs données d’entraînement, notamment les conventions de nommage des packages populaires, puis extrapolent pour créer des alternatives convaincantes, mais fictives.
Voici un exemple de package inexistant suggéré par une IA :
# AI-suggested code with hallucinated package
import crypto-secure-hash
def hash_password(password):
return crypto-secure-hash.sha256_secure(password)
Le package crypto-secure-hash semble légitime et respecte les conventions de nommage habituelles, mais il n’existe dans aucun registre de packages.
Pourquoi cela se produit : les modèles d’IA savent que les noms de packages associent souvent des termes descriptifs comme « crypto », « secure » ou « hash », et génèrent donc des combinaisons plausibles. Les données d’entraînement contiennent des milliers de noms de packages réels. Les modèles apprennent ces schémas linguistiques sans comprendre si un package existe réellement.
Cela crée des risques spécifiques dans le développement assisté par l’IA : les développeurs peuvent perdre du temps à chercher des packages inexistants ou, pire encore, créer sans le savoir des vulnérabilités de sécurité en tentant d’implémenter des dépendances suggérées, mais fictives.
Comment l’IA crée ces packages fantômes
Les modèles d’IA génèrent des packages fantômes en s’appuyant sur la reconnaissance sophistiquée de schémas et l’extrapolation statistique acquises lors de leur entraînement. Ils analysent de vastes bases de code afin d’identifier les conventions de nommage et les structures récurrentes dans différents écosystèmes de programmation.
Les mécanismes techniques à l’origine de la génération de packages par l’IA
Le processus repose sur plusieurs mécanismes interdépendants :
Influence des données d’entraînement : les modèles assimilent des millions de noms de packages légitimes issus de registres, de documentation et d’exemples de code, et établissent ainsi des représentations statistiques des conventions de nommage.
Reconnaissance de schémas : l’IA identifie les préfixes courants (react-, vue-, @types/), les suffixes (-utils, -core, -plugin) et les structures (kebab-case, camelCase, snake_case).
Génération probabiliste : lorsqu’ils génèrent du code, les modèles s’appuient sur des distributions de probabilité apprises pour créer des noms de packages plausibles en combinant des éléments reconnus.
Confusion entre langages : les modèles mélangent souvent les conventions de nommage de différents écosystèmes, créant des packages Python avec une portée de type npm ou des modules JavaScript suivant les conventions des crates Rust.
La principale limite tient à l’absence de validation en temps réel de l’IA. Lors de la génération de code, les modèles ne peuvent pas vérifier l’existence des packages dans des registres en ligne comme npm, PyPI ou crates.io. Ils s’appuient uniquement sur des probabilités statistiques, et non sur la disponibilité réelle.
On le constate lorsque les modèles suggèrent avec assurance des packages comme @utils/string-helper ou pandas-advanced-analytics : des noms qui correspondent parfaitement aux schémas appris, mais qui n’existent pas. L’entraînement de l’IA lui donne une fausse confiance dans ces dépendances statistiquement plausibles, mais inexistantes, et entraîne les développeurs dans des recherches d’installation frustrantes.
Catégories de dépendances hallucinées
1. Packages entièrement fictifs : les modèles d’IA génèrent des noms de packages convaincants qui n’existent pas, comme crypto-validator ou auth-helper-pro. Ils semblent légitimes, mais ouvrent la voie aux attaques par typosquattage : des acteurs malveillants peuvent enregistrer ces noms et y associer du code nuisible.
2. Versions mal orthographiées ou typosquattées : parmi les fautes de frappe courantes, on trouve reqeusts au lieu de requests ou numppy au lieu de numpy. Ces erreurs rappellent les campagnes de typosquattage existantes et peuvent conduire les développeurs à installer des packages malveillants aux noms presque identiques.
3. Versions hallucinées : l’IA suggère des versions inexistantes, comme pandas==2.5.0 ou tensorflow==3.2.1. Les développeurs qui tentent de les installer peuvent rencontrer des échecs de résolution des dépendances ou, sans le savoir, installer des packages compromis si des attaquants publient de fausses versions.
4. Fonctionnalités hallucinées : les modèles recommandent des packages réels pour des usages qu’ils ne prennent pas en charge, par exemple matplotlib pour traiter de l’audio ou requests pour des opérations de base de données. Cette mauvaise orientation fait perdre du temps de développement et peut introduire des dépendances inutiles.
5. Confusion entre les packages de différents langages : l’IA mélange les écosystèmes en suggérant des packages Python pour des projets JavaScript ou des modules npm pour le développement Python. Par exemple, recommander lodash dans du code Python ou pandas dans des applications Node.js crée de la confusion et peut entraîner des failles de sécurité.
Chaque catégorie nécessite des stratégies d’atténuation différentes et présente des risques propres pour nos pipelines de développement et notre posture de sécurité.
Risques de sécurité liés aux hallucinations de packages et prévention
Slopsquatting
Le slopsquatting est l’un des vecteurs d’attaque de la chaîne d’approvisionnement les plus insidieux auxquels nous sommes confrontés à l’ère de l’IA. Cette attaque exploite la tendance de l’IA à halluciner des packages inexistants, créant des vulnérabilités sans précédent dans nos workflows de développement. Ce vecteur d’attaque s’appuie sur la confusion autour des packages : des noms d’apparence légitime dissimulent du code dangereux.
Comment se déroulent les attaques par slopsquatting :
Hallucination de l’IA : lorsque nous demandons de l’aide aux assistants de codage basés sur l’IA, ils suggèrent avec assurance des packages inexistants.
Intégration par les développeurs : nous incluons sans le savoir ces packages fictifs dans nos dépôts de code.
Enregistrement malveillant : les attaquants surveillent les réponses de l’IA et enregistrent les noms de packages hallucinés en y associant des charges utiles malveillantes.
Compromission : lorsque nous tentons ensuite d’installer les dépendances, nous téléchargeons sans le savoir le code malveillant des attaquants.
Conséquences concrètes
Imaginons qu’une IA suggère « secure-jwt-validator » pour la validation des jetons. Nous l’intégrons à notre système d’authentification, puis un attaquant enregistre ce package avec une porte dérobée. Toute notre infrastructure de sécurité se retrouve compromise à la suite d’une suggestion de l’IA qui semblait utile.
Lors d’une expérience menée en 2023, Bar Lanyado a publié un package vide nommé « huggingface-cli », simulant un nom halluciné. Le package a été téléchargé plus de 30 000 fois en trois mois. C’est à ce moment-là que le terme « hallucination de package par l’IA » a été identifié pour la première fois. Dans cette phase de recherche, Lanyado a non seulement publié un package logiciel vide, mais a également utilisé les API de GPT-3.5-Turbo, GPT-4, Gemini Pro (Bard), Coral et Cohere pour rechercher des packages hallucinés. Les résultats ont montré que GPT-3.5-Turbo, GPT-4 et Cohere généraient des réponses hallucinées environ 20 % du temps, tandis que Gemini le faisait à un taux bien plus élevé, de 64,5 %.
Contrairement au typosquattage traditionnel, le slopsquatting crée de toutes nouvelles surfaces d’attaque. Les attaquants n’ont pas besoin de deviner les noms de packages populaires : il leur suffit de surveiller les réponses de l’IA et d’exploiter les hallucinations. Cela crée un cercle vicieux dangereux, où notre dépendance à l’assistance de l’IA facilite directement les compromissions de la chaîne d’approvisionnement.
Nous devons mettre en place des protocoles de vérification des packages et rester vigilants lors de l’intégration, dans les systèmes de production, de dépendances suggérées par l’IA.
Impact sur les workflows de développement
Les hallucinations de packages perturbent considérablement les workflows de développement et entraînent des problèmes en cascade à chaque étape du pipeline de livraison logicielle. Lorsque le code généré par l’IA fait référence à des packages inexistants, les échecs de compilation immédiats interrompent notre processus de développement.
Ces packages hallucinés passent les premières revues de code et ne sont détectés que lors des tests d’intégration ou du déploiement, créant des goulots d’étranglement frustrants dans nos pipelines CI/CD.
Les conséquences sur nos workflows sont les suivantes :
Frustration des développeurs face à des erreurs de compilation mystérieuses et récurrentes.
Retards de livraison, les équipes consacrant du temps à repérer et supprimer les dépendances fantômes.
Charge de travail accrue pour les revues de sécurité lorsque les outils SCA signalent les packages inexistants comme des « risques inconnus ».
Arbres de dépendances contaminés, qui nécessitent un nettoyage et une validation manuels.
Échecs des pipelines CI/CD, qui interrompent les processus de déploiement automatisés.
Perte de productivité due aux changements de contexte entre le débogage de problèmes réels et celui d’artefacts générés par l’IA.
Solutions techniques contre les hallucinations de packages
Systèmes de vérification fondamentaux
L’intégration d’un SBOM (Software Bill of Materials, ou nomenclature logicielle) constitue le socle de notre stratégie de suivi des dépendances. Nous générons des SBOM exhaustifs qui répertorient tous les composants, versions et dépendances tout au long du cycle de vie logiciel. Nous gardons ainsi une visibilité complète sur notre chaîne d’approvisionnement.
Les outils de détection des vulnérabilités de Snyk offrent des capacités essentielles de validation des dépendances. Ils s’appuient sur la vaste base de données de Snyk pour identifier en temps réel les vulnérabilités connues et les problèmes de licence, et intègrent directement ces vérifications à nos pipelines CI/CD.
Amélioration des modèles d’IA
Ingénierie des prompts : optimisation des prompts pour améliorer la précision des recommandations de packages.
Génération augmentée par récupération (RAG) : combinaison de bases de connaissances externes et des capacités des LLM pour proposer des packages adaptés au contexte.
Approches de réglage fin : entraînement des modèles sur des jeux de données sélectionnés de packages vérifiés.
Méthodes avancées pour améliorer la précision
Les listes sélectionnées de packages constituent notre référence de confiance : elles regroupent des packages préalablement vérifiés et approuvés du point de vue de la sécurité. Nous les associons à des approches ensemblistes, où plusieurs modèles d’IA votent sur les recommandations de packages, ce qui réduit considérablement les faux positifs.
Et maintenant ?
Les organismes de réglementation examinent de plus en plus attentivement les générateurs de code basés sur l’IA, et de possibles obligations de conformité se profilent. Les leaders du secteur révolutionnent les méthodes d’entraînement des modèles d’IA, mettent en œuvre des jeux de données de validation plus rigoureux et développent des algorithmes sophistiqués de détection des hallucinations.
Snyk continue d’innover en développant des outils avancés qui détectent les packages fantômes en temps réel et s’intègrent aux pipelines CI/CD pour repérer ces vulnérabilités avant le déploiement.
Prêt à protéger votre base de code contre les attaques par hallucination de packages ? La plateforme Snyk Software Composition Analysis (SCA) est conçue pour détecter et signaler les packages inconnus ou inexistants. Découvrez les solutions de sécurité complètes de Snyk, qui vous aident à identifier et à prévenir les vulnérabilités générées par l’IA dans votre chaîne d’approvisionnement logicielle. Commencez dès aujourd’hui à créer des workflows de développement plus sécurisés et assistés par l’IA.
Commencez à sécuriser le code généré par l’IA
Créez gratuitement votre compte Snyk pour commencer à sécuriser le code généré par l’IA en quelques minutes. Vous pouvez aussi réserver une démonstration avec un expert pour découvrir comment Snyk répond à vos besoins en sécurité des développeurs.