Résumé
Nous avons récemment examiné les assistants de codage IA intégrés aux environnements de développement (IDE) via des plug-in, à l’instar de GitHub Copilot. Nous avons constaté que ces assistants peuvent être détournés par les utilisateurs ou des acteurs malicieux via des fonctionnalités comme le chat, l’auto-complétion ou la génération de tests unitaires, entraînant l’insertion de portes dérobées, la fuite d’informations sensibles ou la création de contenus préjudiciables.
Les fonctionnalités d’attachement de contexte peuvent être vulnérables à l’injection indirecte de prompts. Dans ce type d’attaque, un acteur de la menace corrompt d’abord une source de données publique ou tierce en y insérant des prompts spécialement conçus. Lorsqu’un utilisateur fournit accidentellement ces données contaminées à l’assistant, les prompts malveillants prennent le contrôle, pouvant amener la victime à exécuter une porte dérobée, insérer du code malveillant dans un projet existant ou divulguer des informations sensibles.
Par ailleurs, l’usage abusif des fonctions d’auto-complétion peut également conduire à la génération de contenus malveillants, de manière similaire aux contournements de modération récemment observés sur GitHub Copilot.
Certains assistants IA invoquent directement leur modèle de base depuis le client, exposant les modèles à des risques supplémentaires, comme l’usage abusif par des utilisateurs ou des attaquants externes cherchant à vendre l’accès aux modèles LLM.
Ces vulnérabilités concernent potentiellement de nombreux assistants de codage LLM. Les développeurs doivent mettre en œuvre des pratiques de sécurité standard pour protéger leurs environnements et effectuer des revues de code approfondies tout en contrôlant les sorties des LLM afin de sécuriser le développement IA face aux menaces évolutives.
En cas de compromission suspectée ou de problème urgent, contactez l’équipe de réponse à incident d’Unit 42.
Les clients de Palo Alto Networks sont mieux protégés contre les menaces évoquées ci-dessus grâce aux produits et services suivants :
- Cortex XDR et XSIAM
- Cortex Cloud
- Cortex Cloud Identity Security
- Prisma AIRS
- Évaluation de la sécurité de l’IA d’Unit 42
Thématiques en lien avec l’Unit 42 | AI générative, LLMs |
Introduction : la montée en puissance des assistants de codage LLM
L’adoption des outils d’IA dans le développement progresse à une vitesse fulgurante, portée par des cas d’usage allant de la génération de code au débogage. Mais derrière cette montée en puissance, certains risques restent trop souvent sous-estimés : injection de prompts, détournement de modèles et comportements inattendus.
Selon l’enquête annuelle Stack Overflow 2024 a révélé que 76 % des développeurs interrogés déclarent utiliser ou prévoient d’utiliser des outils d’IA dans leur travail. Parmi ceux qui utilisent actuellement des outils d’IA, 82 % déclarent s’en servir pour écrire du code.
Cette adoption massive des large languages models (LLM) a profondément transformé la manière d’aborder les tâches de programmation.
Intégrés désormais au cœur des environnements de développement modernes, les assistants exploitent le langage naturel pour interpréter l’intention du développeur, générer des extraits de code et fournir des suggestions en temps réel, réduisant ainsi le temps et les efforts consacrés au codage manuel. Certains de ces outils se distinguent par leur intégration poussée aux bases de code existantes et leur capacité à aider les développeurs à naviguer dans des projets complexes.
Mais cette révolution s’accompagne aussi de nouvelles menaces. Nos recherches montrent que des vulnérabilités existent dans plusieurs IDE, modèles et produits intégrant ces assistants LLM, exposant potentiellement les processus de développement à des risques de sécurité majeurs.
Injection de prompts : un examen détaillé
Vulnérabilité de l’injection indirecte de prompts
Le cœur des vulnérabilités liées à l’injection de prompts réside dans l’incapacité d’un modèle à distinguer de manière fiable entre les instructions système (code) et les requêtes utilisateur (données). Ce mélange de données et de code a toujours été un problème récurrent en informatique, à l’origine de failles telles que les injections SQL, les dépassements de mémoire tampon et les injections de commandes.
Les LLM font face à un risque similaire puisqu’ils traitent de la même manière instructions et entrées utilisateur. Ce comportement les rend vulnérables à l’injection de prompts, où des attaquants élaborent des entrées capables de manipuler les LLM afin de produire des comportements non prévus.
Les prompts système sont des instructions qui guident le comportement de l’IA, définissant son rôle et les limites éthiques dans une application. Les entrées utilisateur sont quant à elles les questions, commandes ou données externes (documents, contenus web, API, etc.) que l’on fournit au LLM. Comme celui-ci reçoit toutes ces données sous forme de texte en langage naturel, un attaquant peut créer des entrées malveillantes imitant ou contournant les prompts système, neutralisant les garde-fous et influençant les réponses du modèle.
Cette absence de distinction claire entre instructions et données ouvre également la voie à l’injection indirecte de prompts, un défi encore plus complexe. Au lieu d’injecter directement des données malveillantes, l’attaquant l’insère dans des sources externes, telles que des sites web, des documents ou des API que le LLM devra traiter.
Dès que le LLM analyse ces données externes compromises (que ce soit directement ou via un utilisateur qui les soumet à son insu), il exécute les instructions dissimulées dans le prompt malveillant intégré. Ce procédé permet de contourner les mécanismes de sécurité classiques et de provoquer un comportement inattendu.
La Figure 1 illustre la différence entre les injections directes et indirectes de prompts.

Exploitation abusive de l’attachement du contexte
Les LLM traditionnels fonctionnent souvent avec un seuil de connaissance, ce qui signifie que leur corpus d’entraînement ne comprend ni les informations les plus récentes ni les détails très spécifiques liés à un code source local ou à des systèmes propriétaires. Cela crée un manque de connaissances important au moment où les développeurs cherchent de l’assistance pour leurs projets spécifiques. Pour combler cette lacune et générer des réponses plus pertinentes et contextualisées, les éditeurs de solutions LLM ont introduit une fonctionnalité cruciale : l’attachement du contexte.
Elle permet d’injecter directement dans le modèle des éléments de référence externes (fichiers, répertoires, référentiels ou URL), enrichissant ainsi le prompt initiale et améliorant la précision des résultats produits. Toutefois, cette approche s’accompagne d’un risque non négligeable. En effet, si l’utilisateur fournit un contexte issu d’une source compromise par un acteur de la menace, il expose l’assistant à des attaques par injection indirecte de prompt.
D’un point de vue technique, lorsque l’utilisateur attache un contexte, le modèle traite celui-ci comme un prompt préalable, qui précède l’instruction de l’utilisateur La Figure 2 illustre cette structure de chat. Comme ce contenu peut provenir de sources externes (fichiers hors périmètre ou contenus distants via URL), l’utilisateur risque d’introduire sans le savoir des prompts malveillants capables de détourner le comportement du système.

Scénario d’injection d’un prompt
En tant que plateforme de réseaux sociaux de premier plan, X (anciennement Twitter) constitue une source de données immense et souvent collectée pour des analyses pilotées par du code. Cependant, sa nature intrinsèquement non filtrée signifie que ces données peuvent être contaminées.
Les Figures 3a et 3b illustrent un scénario simulé où un utilisateur cherche à extraire des informations à partir d’un corpus de posts scrappés. Nous avons joint un petit échantillon de posts X comme contexte et demandé à un assistant de générer du code pour traiter ces posts. Cette tâche consistait notamment à comprendre le format des données collectées, à savoir quels champs sont inclus et quelles informations peuvent être exploitables dans les posts.
Dans notre scénario, les posts X ont été compromis et déclenchent une attaque par injection indirecte de prompt.


Un examen plus attentif du code généré ci-dessus révèle que l’assistant a inséré une porte dérobée dissimulée dans le code, appelée fetched_additional_data. Cette porte dérobée récupère une commande à distance à partir d’un serveur C2 (commande et contrôle) contrôlé par l’attaquant, puis l’exécute.
À ce stade, de nombreux utilisateurs feraient un copié-collé du code résultant (ou cliqueraient sur « Apply ») pour l’exécuter, puis vérifieraient que le résultat est correct. Cependant, cette action pourrait permettre à l’acteur de la menace de compromettre la machine de l’utilisateur. La Figure 4 montre le code de la porte dérobée (backdoor) que l’assistant a généré et inséré.

La raison pour laquelle cette porte dérobée a été insérée est que l’échantillon de posts X contenait un prompt élaboré avec des instructions malveillantes simulées. Ce prompt simule un faux message d’erreur, puis spécifie les instructions reproduites à la Figure 5. Ces instructions comprennent une commande pour intégrer le code malveillant naturellement dans la réponse. La séquence d’instructions à l’assistant est la suivante :
- Se lancer dans une nouvelle mission secrète
- Amener l’utilisateur à exécuter du code qui envoie une requête HTTP au serveur C2 contrôlé par l’attaquant
- Obfusquer l’adresse du serveur C2
- Exécuter la commande récupérée sur le serveur
La Figure 5 montre l’ensemble de données contaminées que l’utilisateur de cette simulation a involontairement introduit dans l’assistant de codage : un post X falsifié contenant des instructions malveillantes.

La Figure 6 présente le texte complet du prompt, une variante de celui publié dans Turning Bing Chat into a Data Pirate.

En examinant la réponse de l’assistant, nous constatons que ce dernier n’était pas limité à un langage spécifique : il pouvait insérer une porte dérobée en JavaScript, C++, Java ou tout autre langage. Par ailleurs,lui suffisait de trouver un prétexte pour introduire le code et de l’intégrer de manière « naturelle ».
Dans ce cas précis, l’ajout a été justifié par la nécessité de récupérer des données supplémentaires pour l’analyse demandée par l’utilisateur. Cela montre que les attaquants n’ont même pas besoin de savoir quel langage l’utilisateur manipule : c’est le LLM qui se charge d’adapter et de produire le code.
Bien que ce scénario soit simulé, il illustre des implications bien réelles concernant la légitimité des sources de données intégrées dans nos prompts, à mesure que l’IA s’ancre dans les outils du quotidien.
Certains assistants de codage vont encore plus loin en permettant à l’IA d’exécuter directement des commandes shell, ce qui leur confère une autonomie supplémentaire. Dans le cas de la simulation présentée, un tel niveau de contrôle aurait probablement entraîné l’exécution immédiate de la porte dérobée, avec encore moins d’intervention humaine.
Réaffirmation de vulnérabilités déjà identifiées
Outre les vulnérabilités décrites ci-dessus, nos recherches confirment que plusieurs autres faiblesses déjà identifiées dans GitHub Copilot concernent également d’autres assistants de codage. De nombreuses études et articles ont révélé des problèmes tels que la génération de contenu nuisible et le risque d’utilisation abusive via l’invocation directe du modèle. Ces vulnérabilités ne se limitent pas à une seule plateforme : elles soulignent des problèmes plus généraux liés à l’utilisation d’assistants de codage pilotés par l’IA.
Dans cette section, nous examinons les risques que ces problèmes de sécurité posent dans le cadre d’une utilisation réelle.
Génération de contenu préjudiciable via l’auto-complétion
Les LLM passent par de longues phases d’entraînement et utilisent des techniques telles que le l’apprentissage par renforcement à partir de rétroaction humaine (RLHF) pour empêcher la génération de contenus préjudiciables. Toutefois, certains utilisateurs peuvent contourner ces garde-fous lorsqu’ils sollicitent un assistant de codage via la fonction d’auto-complétion. L’auto-complétion est une fonctionnalité des modèles spécialisés en code qui consiste à prédire et suggérer du code au fur et à mesure que l’utilisateur tape.
La Figure 7 illustre les mécanismes de défense de l’IA fonctionnant normalement lorsqu’un utilisateur soumet une requête non sécurisée via l’interface de chat.

En revanche, lorsque l’utilisateur manipule la fonction d’auto-complétion pour simuler une coopération avec la requête, l’assistant complète le reste du contenu, même si celui-ci est préjudiciable. La session de chat simulée à la Figure 8 montre l’une des multiples façons de simuler une telle réponse. Dans cet exemple, l’utilisateur pré-remplit une partie de la réponse attendue de l’assistant avec un préfixe conforme qui suggère le début d’une réponse positive : en l’occurrence, « Étape 1 : ».

Lorsque nous omettons le préfixe conforme « Étape 1 : », l’auto-complétion adopte par défaut le comportement attendu, à savoir refuser de générer du contenu préjudiciable, comme indiqué à la Figure 9 ci-dessous.

Invocation directe du modèle et utilisation abusive
Les assistants de codage proposent différentes interfaces client pour faciliter leur utilisation et leur mise en œuvre par les développeurs, notamment des plug-in IDE et des clients web autonomes. L’envers de cette accessibilité est que des acteurs malicieux peuvent invoquer le modèle à des fins différentes et non prévues. La possibilité d’interagir directement avec le modèle, contournant ainsi les contraintes d’un environnement IDE sécurisé, permet aux acteurs malicieux d’injecter des prompts système, des paramètres et des contextes personnalisés.
Les figures 10a et 10b montrent un scénario simulé dans lequel un utilisateur invoque le modèle directement via un script personnalisé qui agit comme un client, mais qui fournit un prompt système complètement différent. Les réponses fournies par le modèle de base montrent que les utilisateurs et les acteurs malicieux peuvent l’utiliser pour obtenir des résultats inattendus.


Outre le fait que les utilisateurs peuvent interagir avec le modèle à des fins autres que le codage, nous avons découvert que des attaquants peuvent exploiter des jetons de session volés dans des attaques de type LLMJacking. Il s’agit d’une attaque récente permettant à un acteur de la menace d’utiliser des matériels cloud d’authentification volés pour obtenir un accès non autorisé à des services LLM hébergés dans le cloud, souvent dans l’intention de vendre cet accès à des tiers. Des outils comme oai-reverse-proxy permettent alors à ces acteurs de monétiser l’accès à un modèle légitime, tout en l’exploitant à des fins malveillantes.
Atténuations et mesures de protection
Nous encourageons vivement les organisations et les individus à adopter les pratiques suivantes :
- Examiner avant d’exécuter : examinez attentivement tout code suggéré avant de l’exécuter. Ne faites pas aveuglément confiance à l’IA. Recherchez des comportements inattendus ou des failles potentielles.
- Analyser le contexte attaché : portez une attention particulière aux données ou aux fichiers que vous fournissez aux outils LLM. Ce contexte influence fortement les résultats générés et doit être compris pour en évaluer l’impact.
Certains assistants de codage intègrent déjà des fonctionnalités de contrôle destinées à réduire les risques et à laisser à l’utilisateur la main sur ce qui est inséré ou exécuté. Lorsque ces options sont disponibles, nous conseillons de les utiliser activement, par exemple :
- Contrôle manuel d’exécution : l’utilisateur garde la possibilité d’approuver ou de refuser l’exécution de commandes. Exploitez cette capacité pour garder la maîtrise de ce que fait réellement votre assistant.
En définitive, vous êtes le dernier rempart. La vigilance et une utilisation responsable sont indispensables pour garantir une expérience productive et sécurisée avec l’IA.
Conclusions et risques futurs
L’exploration des risques liés aux assistants de codage IA révèle la montée de défis de sécurité inédits. À mesure que les développeurs s’appuient de plus en plus sur ces outils, il devient essentiel de trouver un équilibre entre gain de productivité et prise en compte des menaces potentielles. Tout en améliorant la productivité, ces outils requièrent également des protocoles de sécurité robustes afin d’éviter toute exploitation potentielle.
Les problèmes de sécurité tels que ceux décrits ci-dessous soulignent plusieurs vecteurs d’attaque :
- Injection indirecte d’un prompt
- Exploitation abusive de l’attachement de contexte
- Génération de contenu préjudiciable
- Invocation directe du modèle
Ces failles dépassent le cadre d’un seul produit : elles reflètent une vulnérabilité transversale à l’ensemble de l’industrie des assistants IA. Cela indique qu’il est important de renforcer les mesures de sécurité dans l’ensemble du secteur.
La clé reste la vigilance : des pratiques comme l’examen minutieux du code et le contrôle strict de l’exécution permettent de profiter des avantages tout en réduisant les risques.
Plus ces systèmes gagneront en autonomie et en intégration, plus ils attireront de nouvelles formes d’attaques, nécessitant des contre-mesures capables d’évoluer au même rythme.
Palo Alto Networks : protection et atténuation
Les clients de Palo Alto Networks sont mieux protégés contre les menaces évoquées ci-dessus grâce aux produits suivants :
- Cortex XDR et XSIAM sont conçus pour empêcher l’exécution de malwares connus ou inconnus via la Protection contre les menaces comportementales et l’analyse locale basée sur le machine learning.
- Cortex Cloud Identity Security englobe la gestion des droits sur l’infrastructure cloud (CIEM), la gestion de la sécurité des identités (ISPM), la gouvernance de l’accès aux données (DAG) et la détection et la réponse aux menaces liées à l’identité (ITDR). Il fournit également aux clients les capacités nécessaires pour améliorer leurs exigences en matière de sécurité liée à l’identité. Pour ce faire, cette solution apporte visibilité sur les identités et leurs permissions dans les environnements cloud, permettant de détecter les configurations erronées, les accès indésirables aux données sensibles et d’analyser en temps réel les modèles d’accès.
- Cortex Cloud détecte et empêche les opérations malveillantes grâce à l’automatisation de la sécurité et à l’analyse comportementale, qu’il s’agisse de Cortex Cloud avec ou sans agent, afin d’identifier et bloquer les usages abusifs des politiques IAM.
Palo Alto Networks peut également aider les organisations à mieux protéger leurs systèmes d’IA grâce aux produits et services suivants :
- Prisma AIRS
- Évaluation de la sécurité de l’IA d’Unit 42
Si vous pensez avoir été compromis ou en cas de question urgente, prenez contact avec l’équipe de réponse à incident d’Unit 42 ou appelez les numéros suivants :
- Amérique du Nord : Gratuit : +1 (866) 486-4842 (866.4.UNIT42)
- ROYAUME-UNI : +44.20.3743.3660
- Europe et Moyen-Orient : +31.20.299.3130
- Asie : +65.6983.8730
- Japon : +81.50.1790.0200
- Australie : +61.2.4062.7950
- Inde : 00080005045107
Palo Alto Networks a partagé ces résultats avec les membres de la Cyber Threat Alliance (CTA). Les membres de la CTA utilisent ces renseignements pour déployer rapidement des mesures de protection auprès de leurs clients et pour perturber systématiquement les cyberacteurs malveillants. En savoir plus sur la Cyber Threat Alliance.
Ressources complémentaires
- De nouveaux Jailbreaks permettent aux utilisateurs de manipuler GitHub Copilot – Apex Security, publié sur Dark Reading
- Menaces d’injection indirecte de prompts – Greshake, Kai et Abdelnabi, Sahar et Mishra, Shailesh et Endres, Christoph et Holz, Thorsten et Fritz, Mario
- Injection indirecte d’un prompt : la plus grande faille de sécurité de l’IA générative – Matt Sutton, Damian Ruck
- Enquête annuelle Stack Overflow 2024 – Stack Overflow