12/11/2024
Blog technique
Les vulnérabilités dans les LLM : (7) Insecure Plugin Design
Jean-Léon Cusinato, équipe SEAL
Bienvenue dans cette suite d’articles consacrée aux Large Language Model (LLM) et à leurs vulnérabilités.
Focus technique : Qu'est-ce que le RAG ?
Le RAG (Retrieval Augmented Generation) est une technique qui combine les capacités de récupération d’informations et celles de génération de texte des LLM (Large Language Model). Cette approche vise à améliorer la qualité et la pertinence des réponses générées par les modèles de langage en intégrant des informations externes au sein du contexte d’une requête (Voir (1) Prompt Injection).
Le processus de RAG se décompose en deux étapes principales : la récupération puis la génération.
- Lors de la phase de récupération, le système utilise des techniques de recherche d’informations pour identifier et extraire des documents ou des passages pertinents à partir d’une base de données ou d’un corpus de texte. Cette étape est cruciale car elle permet de fournir au modèle de génération des informations contextuelles précises et actualisées.
- Une fois les informations pertinentes récupérées, la phase de génération entre en jeu. Le modèle de génération de texte utilise les informations récupérées pour produire une réponse cohérente et informative.
Contrairement aux modèles de génération de texte traditionnels qui peuvent parfois produire des réponses incorrectes ou hors contexte en raison de leurs données d’entraînement limitées, le RAG permet de générer des réponses plus précises et mieux informées en s’appuyant sur des données externes fiables, intégrées dans le moteur après la génération du modèle.
L’un des principaux avantages du RAG est sa capacité à s’adapter à des contextes dynamiques et à des bases de connaissances en constante évolution. Par exemple, dans un système de chatbot ou d’assistant virtuel, le RAG peut être utilisé pour répondre à des questions complexes en temps réel en intégrant les dernières informations disponibles. Cette flexibilité rend le RAG particulièrement utile dans des applications où la précision et la pertinence des réponses sont essentielles, comme dans les systèmes de support client, les moteurs de recherche avancés et les outils de recommandation.
En résumé, le RAG représente une avancée significative dans le domaine de la génération de texte en intégrant des techniques de récupération d’informations pour améliorer la qualité et la pertinence des réponses générées. Cette approche hybride permet de surmonter certaines des limitations des modèles de génération de texte traditionnels et ouvre la voie à des applications plus sophistiquées et plus fiables dans divers domaines.
Description de la vulnérabilité
Les plugins pour LLM sont des extensions qui, lorsqu’ils sont activés, sont automatiquement appelés par le modèle pendant les interactions avec l’utilisateur. Ils sont pilotés par le modèle, et il n’y a pas de contrôle de l’application sur l’exécution. De plus, pour gérer les limitations de taille du contexte, les plugins sont susceptibles d’implémenter des entrées en texte libre provenant du modèle sans validation ni vérification de type. Si un développeur a effectué une conception de plugin non sécurisée (Insecure Plugin Design en anglais), un attaquant potentiel pourrait construire une requête malveillante à destination du plugin et l’utiliser pour induire des comportements non désirés.
Le danger des entrées malveillantes dépend souvent de contrôles d’accès insuffisants et de la difficulté de faire suivre l’autorisation à travers les différents plugins utilisés. Un contrôle d’accès inadéquat permet à un plugin de faire confiance aveuglément à d’autres plugins et de supposer que les entrées proviennent de l’utilisateur final. Un tel contrôle d’accès inadéquat peut permettre à des entrées malveillantes d’avoir des conséquences néfastes, allant de l’exfiltration de données à l’exécution de code à distance et à l’élévation des privilèges.
Cet article traite principalement les vulnérabilités issues des défauts provenant de la création de plugins LLM plutôt que de leur utilisation par un attaquant, qui est couverte par l’article sur les vulnérabilités de la chaîne d’approvisionnement LLM.
Exemples
- Un utilisateur utilise un plugin pour récupérer le contenu d’une base de données. L’IA qui réalise le lien entre la page et l’attaquant n’identifiant pas les attaques, elle renvoie le contenu de la réponse malgré la présence d’une injection SQL. Pour l’exemple, ici l’IA renvoie l’URL permettant d’obtenir les informations météo. On peut imaginer que, dans la réalité, le plugin utiliserait cette URL pour afficher directement la carte météorologique, et donc utiliserait le lien malveillant généré.
- Un utilisateur requête une base de données afin d’obtenir des informations sur les vélos en vente. Un attaquant abuse de cette fonctionnalité pour obtenir les informations de connexion à cette base de données, qui sont manipulées de manière non sécurisée par le plugin. Cette attaque combine un plugin vulnérable avec un vol d’information sensible, présenté dans (6) Sensitive Information Disclosure.
- Un plugin accepte une entrée libre dans un champ sans l’assainir. Un attaquant serait en mesure d’utiliser des prompts pour effectuer une reconnaissance à partir des messages d’erreur renvoyés par l’application, pour ensuite exploiter des vulnérabilités tierces connues, exécuter du code et réaliser une exfiltration de données ou une élévation de privilèges.
Risques d'une telle vulnérabilité
Les plugins LLM, en tant qu’extensions automatiquement appelées par le modèle pendant les interactions avec l’utilisateur, sont particulièrement exposés à des attaques malveillantes.
Les attaquants peuvent exploiter des plugins mal conçus pour extraire des informations sensibles ou exécuter du code arbitraire sur le système hôte. Cela peut aussi entrainer une élévation de privilèges. De plus, un contrôle d’accès insuffisant peut permettre à des plugins de faire confiance aveuglément à d’autres plugins, supposant que les entrées proviennent de l’utilisateur final.
Les plugins étant la principale méthode utilisée pour permettre à un LLM d’interagir avec un système hôte, cette vulnérabilité est extrêmement critique, et l’analyse détaillée du code d’un plugin est nécessaire afin de s’assurer de sa sécurité.
Pour aller plus loin
- Action Chat GPT – https://platform.openai.com/docs/actions/introduction
- Vulnérabilité plugin : visitez un site web et faites-vous voler votre code source – https://embracethered.com/blog/posts/2023/chatgpt-plugin-vulns-chat-with-code/
- Outils Langchain – https://python.langchain.com/docs/integrations/tools/