﻿﻿{"id":1345,"date":"2025-10-10T14:44:04","date_gmt":"2025-10-10T12:44:04","guid":{"rendered":"https:\/\/elearningsamba.com\/index.php\/camoleak-quand-un-simple-commentaire-github-transforme-copilot-en-espion\/"},"modified":"2025-10-10T14:44:04","modified_gmt":"2025-10-10T12:44:04","slug":"camoleak-quand-un-simple-commentaire-github-transforme-copilot-en-espion","status":"publish","type":"page","link":"https:\/\/elearningsamba.com\/index.php\/camoleak-quand-un-simple-commentaire-github-transforme-copilot-en-espion\/","title":{"rendered":"CamoLeak &#8211; Quand un simple commentaire GitHub transforme Copilot en espion"},"content":{"rendered":"<p>Y\u2019a plein de probl\u00e8me avec les IA, mais y\u2019en a un encore un peu trop sous-estim\u00e9 par les vibe codeurs que vous \u00eates\u2026 Ce probl\u00e8me, c\u2019est qu\u2019on leur fait confiance comme \u00e0 un coll\u00e8gue, on leur montre notre code, nos repos priv\u00e9s, nos petits secrets bien planqu\u00e9s dans les variables d\u2019environnement\u2026<\/p>\n<p>Par exemple, quand vous passez en revue une pull request sur GitHub, vous faites quoi ? Vous lisez le code ligne par ligne, vous cherchez les bugs, les failles de s\u00e9cu, les optimisations possibles. Mais les commentaires vous les lisez ? Au mieux on les survole, c\u2019est vrai, car c\u2019est de la comm\u2019 entre devs, et pas du code ex\u00e9cutable.<\/p>\n<p>Sauf pour bien s\u00fbr pour Copilot Chat pour qui un commentaire c\u2019est un texte comme un autre. Et<br \/>\n<a href=\"https:\/\/www.legitsecurity.com\/blog\/camoleak-critical-github-copilot-vulnerability-leaks-private-source-code\">selon Omer Mayraz<\/a><br \/>\n, chercheur en s\u00e9curit\u00e9 chez Legit Security, c\u2019est exactement ce qui en fait une zone de confiance aveugle parfaite pour une attaque.<\/p>\n<p>\n<img decoding=\"async\" src=\"https:\/\/korben.info\/cdn-cgi\/image\/width=1200,fit=scale-down,quality=90,f=avif\/camoleak-github-copilot-vulnerability-prompt-injection\/camoleak-github-copilot-vulnerability-prompt-injection-2.webp\" alt=\"\" loading=\"lazy\">\n<\/p>\n<p>Ce qu\u2019a d\u00e9couvert Omer Mayraz c\u2019est donc une vuln\u00e9rabilit\u00e9 critique dans GitHub Copilot Chat avec un score CVSS de 9.6 sur 10. Cela consiste \u00e0 planquer des instructions malveillantes dans des commentaires markdown invisibles comme \u00e7a, ces commentaires ne s\u2019affichent pas dans l\u2019interface web de GitHub, mais Copilot Chat les voit parfaitement et les traite comme des prompts l\u00e9gitimes.<\/p>\n<p>Du coup, l\u2019attaquant peut forcer Copilot \u00e0 chercher des secrets dans vos repos priv\u00e9s, \u00e0 extraire du code source confidentiel, voire \u00e0 d\u00e9nicher des descriptions de vuln\u00e9rabilit\u00e9s zero-day non publi\u00e9es. Tout \u00e7a sans que vous ne voyiez rien venir \u00e9videmment !<\/p>\n<p>Voici une d\u00e9mo compl\u00e8te de l\u2019attaque en vid\u00e9o :<\/p>\n<div class=\"video-container\">\n<video controls preload=\"none\"><\/p>\n<pre><code>Votre navigateur ne supporte pas la lecture de vid\u00e9os HTML5. Voici un\n&lt;a href=\"\/camoleak-github-copilot-vulnerability-prompt-injection\/camoleak-github-copilot-vulnerability-prompt-injection-1.mp4\"&gt;lien vers la vid\u00e9o&lt;\/a&gt;.\n<\/code><\/pre>\n<p><\/video><\/p>\n<div>\n<p>La premi\u00e8re \u00e9tape c\u2019est donc l\u2019injection de prompt via un commentaire cach\u00e9. Rien de r\u00e9volutionnaire, mais efficace. Ensuite, deuxi\u00e8me \u00e9tape : le bypass de la Content Security Policy de GitHub. Normalement, Copilot Chat ne peut charger que des ressources depuis des domaines appartenant \u00e0 GitHub. Il est donc impossible d\u2019envoyer des donn\u00e9es vers un serveur externe.<\/p>\n<p>Mais c\u2019\u00e9tait sans compter sur le fait que GitHub dispose d\u2019un proxy appel\u00e9 Camo, con\u00e7u \u00e0 l\u2019origine pour s\u00e9curiser l\u2019affichage d\u2019images externes en les servant via HTTPS et en \u00e9vitant le tracking. C\u2019est donc ce proxy de s\u00e9curit\u00e9 qui devient l\u2019outil d\u2019exfiltration. Avec ce proxy, toutes les URLs d\u2019images externes sont automatiquement transform\u00e9es en URLs Camo du type <code>https:\/\/camo.githubusercontent.com\/[hash unique]<\/code> et Mayraz a simplement utilis\u00e9 l\u2019API GitHub pour pr\u00e9-g\u00e9n\u00e9rer un dictionnaire complet de ces URLs Camo, chacune pointant vers un emplacement unique sur son serveur.<\/p>\n<p>Troisi\u00e8me \u00e9tape, l\u2019exfiltration des donn\u00e9es. Au lieu de faire passer les secrets directement dans les URLs (trop visible), Mayraz a eu l\u2019id\u00e9e d\u2019utiliser l\u2019ordre des requ\u00eates. Chaque lettre de l\u2019alphabet correspond \u00e0 une URL Camo unique. En faisant charger ces URLs dans un ordre pr\u00e9cis, on peut ainsi transmettre des donn\u00e9es texte comme avec un alphabet ASCII artisanal. C\u2019est plut\u00f4t cr\u00e9atif comme approche, je trouve.<\/p>\n<p>C\u2019est exactement le m\u00eame principe que les attaques ultrasoniques contre Alexa ou Siri. Si vous ne vous en souvenez pas, des chercheurs avaient d\u00e9montr\u00e9 qu\u2019on pouvait envoyer des commandes vocales \u00e0 des fr\u00e9quences inaudibles pour l\u2019oreille humaine, mais parfaitement comprises par les assistants vocaux.<\/p>\n<p>Bah ici, c\u2019est pareil\u2026 On a des prompts invisibles pour les humains mais que l\u2019IA voit et ex\u00e9cute sans broncher. Comme pour les enceintes, on parle \u00e0 la machine sans que l\u2019humain ne s\u2019en aper\u00e7oive et la diff\u00e9rence, c\u2019est qu\u2019au lieu de jouer sur les fr\u00e9quences sonores, on joue sur le markdown et les commentaires cach\u00e9s.<\/p>\n<p>Du coup, chaque pull request externe est un potentiel cheval de Troie. Un contributeur externe soumet par exemple une PR apparemment l\u00e9gitime, avec un commentaire invisible qui ordonne \u00e0 Copilot de chercher \u201cAWS_KEY\u201d dans vos repos priv\u00e9s. Vous de votre c\u00f4t\u00e9, vous ouvrez la PR dans votre \u00e9diteur, Copilot Chat s\u2019active bien s\u00fbr automatiquement, et hop, vos cl\u00e9s API partent chez l\u2019attaquant.<\/p>\n<p>Quand on sait que GitHub a cr\u00e9\u00e9 Camo justement pour am\u00e9liorer la s\u00e9curit\u00e9, \u00e7a fout un peu les boules. Bref, gr\u00e2ce \u00e0 son proof-of-concept, Mayraz a r\u00e9ussi \u00e0 exfiltrer des cl\u00e9s AWS, des tokens de s\u00e9curit\u00e9, et m\u00eame la description compl\u00e8te d\u2019une vuln\u00e9rabilit\u00e9 zero-day stock\u00e9e dans une issue priv\u00e9e d\u2019une organisation et tout \u00e7a sans aucune interaction suspecte visible par la victime.<\/p>\n<p>Heureusement, notre joyeux chercheur a pr\u00e9venu GitHub qui a r\u00e9agi assez vite. Le 14 ao\u00fbt l\u2019entreprise a compl\u00e8tement d\u00e9sactiv\u00e9 le rendu d\u2019images dans Copilot Chat, comme \u00e7a plus d\u2019images, plus de probl\u00e8me. C\u2019est radical, c\u2019est s\u00fbr mais c\u2019est efficace !<\/p>\n<p>Quoiqu\u2019il en soit, ces histoires de prompt injection c\u2019est un probl\u00e8me fondamental propre aux LLM qui sont encore actuellement incapable de distinguer de mani\u00e8re fiable les instructions l\u00e9gitimes des instructions malveillantes. \u00c7a reste donc un probl\u00e8me de confiance\u2026<\/p>\n<p>Dans ce cas pr\u00e9vis, on fait confiance \u00e0 GitHub pour h\u00e9berger notre code du coup, on fait confiance \u00e0 Copilot pour nous aider \u00e0 d\u00e9velopper, tout comme on fait confiance aux contributeurs externes pour soumettre des PR de bonne foi. Et nous voil\u00e0 avec une jolie cha\u00eene de confiance pr\u00eate \u00e0 \u00eatre exploit\u00e9e\u2026<\/p>\n<p>Bref, CamoLeak c\u2019est que le d\u00e9but de cette nouvelle vague de vuln li\u00e9es aux assistants IA qui se retrouvent int\u00e9gr\u00e9s dans nos outils de d\u00e9veloppement\u2026 Donc ouvrez l\u2019oeil car on ne sait jamais ce qui sa cache vraiment dans une pull request.<\/p>\n<p>\n<a href=\"https:\/\/www.theregister.com\/2025\/10\/09\/github_copilot_chat_vulnerability\/\">Source<\/a>\n<\/p>\n<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Y\u2019a plein de probl\u00e8me avec les IA, mais y\u2019en a un encore un peu trop sous-estim\u00e9 par les vibe codeurs que vous \u00eates\u2026 Ce probl\u00e8me, c\u2019est qu\u2019on leur fait confiance comme \u00e0 un coll\u00e8gue, on leur montre notre code, nos repos priv\u00e9s, nos petits secrets bien planqu\u00e9s dans les variables d\u2019environnement\u2026 Par exemple, quand vous passez en revue une pull request sur GitHub, vous faites quoi ? Vous lisez le code ligne par ligne, vous cherchez les bugs, les failles de s\u00e9cu, les optimisations possibles. Mais les commentaires vous les lisez ? Au mieux on les survole, c\u2019est vrai, car c\u2019est de la comm\u2019 entre devs, et pas du code ex\u00e9cutable. Sauf pour bien s\u00fbr pour Copilot Chat pour qui un commentaire c\u2019est un texte comme un autre. Et selon Omer Mayraz , chercheur en s\u00e9curit\u00e9 chez Legit Security, c\u2019est exactement ce qui en fait une zone de confiance aveugle parfaite pour une attaque. Ce qu\u2019a d\u00e9couvert Omer Mayraz c\u2019est donc une vuln\u00e9rabilit\u00e9 critique dans GitHub Copilot Chat avec un score CVSS de 9.6 sur 10. Cela consiste \u00e0 planquer des instructions malveillantes dans des commentaires markdown invisibles comme \u00e7a, ces commentaires ne s\u2019affichent pas dans l\u2019interface web de GitHub, mais Copilot Chat les voit parfaitement et les traite comme des prompts l\u00e9gitimes. Du coup, l\u2019attaquant peut forcer Copilot \u00e0 chercher des secrets dans vos repos priv\u00e9s, \u00e0 extraire du code source confidentiel, voire \u00e0 d\u00e9nicher des descriptions de vuln\u00e9rabilit\u00e9s zero-day non publi\u00e9es. Tout \u00e7a sans que vous ne voyiez rien venir \u00e9videmment ! Voici une d\u00e9mo compl\u00e8te de l\u2019attaque en vid\u00e9o : Votre navigateur ne supporte pas la lecture de vid\u00e9os HTML5. Voici un &lt;a href=&#8221;\/camoleak-github-copilot-vulnerability-prompt-injection\/camoleak-github-copilot-vulnerability-prompt-injection-1.mp4&#8243;&gt;lien vers la vid\u00e9o&lt;\/a&gt;. La premi\u00e8re \u00e9tape c\u2019est donc l\u2019injection de prompt via un commentaire cach\u00e9. Rien de r\u00e9volutionnaire, mais efficace. Ensuite, deuxi\u00e8me \u00e9tape : le bypass de la Content Security Policy de GitHub. Normalement, Copilot Chat ne peut charger que des ressources depuis des domaines appartenant \u00e0 GitHub. Il est donc impossible d\u2019envoyer des donn\u00e9es vers un serveur externe. Mais c\u2019\u00e9tait sans compter sur le fait que GitHub dispose d\u2019un proxy appel\u00e9 Camo, con\u00e7u \u00e0 l\u2019origine pour s\u00e9curiser l\u2019affichage d\u2019images externes en les servant via HTTPS et en \u00e9vitant le tracking. C\u2019est donc ce proxy de s\u00e9curit\u00e9 qui devient l\u2019outil d\u2019exfiltration. Avec ce proxy, toutes les URLs d\u2019images externes sont automatiquement transform\u00e9es en URLs Camo du type https:\/\/camo.githubusercontent.com\/[hash unique] et Mayraz a simplement utilis\u00e9 l\u2019API GitHub pour pr\u00e9-g\u00e9n\u00e9rer un dictionnaire complet de ces URLs Camo, chacune pointant vers un emplacement unique sur son serveur. Troisi\u00e8me \u00e9tape, l\u2019exfiltration des donn\u00e9es. Au lieu de faire passer les secrets directement dans les URLs (trop visible), Mayraz a eu l\u2019id\u00e9e d\u2019utiliser l\u2019ordre des requ\u00eates. Chaque lettre de l\u2019alphabet correspond \u00e0 une URL Camo unique. En faisant charger ces URLs dans un ordre pr\u00e9cis, on peut ainsi transmettre des donn\u00e9es texte comme avec un alphabet ASCII artisanal. C\u2019est plut\u00f4t cr\u00e9atif comme approche, je trouve. C\u2019est exactement le m\u00eame principe que les attaques ultrasoniques contre Alexa ou Siri. Si vous ne vous en souvenez pas, des chercheurs avaient d\u00e9montr\u00e9 qu\u2019on pouvait envoyer des commandes vocales \u00e0 des fr\u00e9quences inaudibles pour l\u2019oreille humaine, mais parfaitement comprises par les assistants vocaux. Bah ici, c\u2019est pareil\u2026 On a des prompts invisibles pour les humains mais que l\u2019IA voit et ex\u00e9cute sans broncher. Comme pour les enceintes, on parle \u00e0 la machine sans que l\u2019humain ne s\u2019en aper\u00e7oive et la diff\u00e9rence, c\u2019est qu\u2019au lieu de jouer sur les fr\u00e9quences sonores, on joue sur le markdown et les commentaires cach\u00e9s. Du coup, chaque pull request externe est un potentiel cheval de Troie. Un contributeur externe soumet par exemple une PR apparemment l\u00e9gitime, avec un commentaire invisible qui ordonne \u00e0 Copilot de chercher \u201cAWS_KEY\u201d dans vos repos priv\u00e9s. Vous de votre c\u00f4t\u00e9, vous ouvrez la PR dans votre \u00e9diteur, Copilot Chat s\u2019active bien s\u00fbr automatiquement, et hop, vos cl\u00e9s API partent chez l\u2019attaquant. Quand on sait que GitHub a cr\u00e9\u00e9 Camo justement pour am\u00e9liorer la s\u00e9curit\u00e9, \u00e7a fout un peu les boules. Bref, gr\u00e2ce \u00e0 son proof-of-concept, Mayraz a r\u00e9ussi \u00e0 exfiltrer des cl\u00e9s AWS, des tokens de s\u00e9curit\u00e9, et m\u00eame la description compl\u00e8te d\u2019une vuln\u00e9rabilit\u00e9 zero-day stock\u00e9e dans une issue priv\u00e9e d\u2019une organisation et tout \u00e7a sans aucune interaction suspecte visible par la victime. Heureusement, notre joyeux chercheur a pr\u00e9venu GitHub qui a r\u00e9agi assez vite. Le 14 ao\u00fbt l\u2019entreprise a compl\u00e8tement d\u00e9sactiv\u00e9 le rendu d\u2019images dans Copilot Chat, comme \u00e7a plus d\u2019images, plus de probl\u00e8me. C\u2019est radical, c\u2019est s\u00fbr mais c\u2019est efficace ! Quoiqu\u2019il en soit, ces histoires de prompt injection c\u2019est un probl\u00e8me fondamental propre aux LLM qui sont encore actuellement incapable de distinguer de mani\u00e8re fiable les instructions l\u00e9gitimes des instructions malveillantes. \u00c7a reste donc un probl\u00e8me de confiance\u2026 Dans ce cas pr\u00e9vis, on fait confiance \u00e0 GitHub pour h\u00e9berger notre code du coup, on fait confiance \u00e0 Copilot pour nous aider \u00e0 d\u00e9velopper, tout comme on fait confiance aux contributeurs externes pour soumettre des PR de bonne foi. Et nous voil\u00e0 avec une jolie cha\u00eene de confiance pr\u00eate \u00e0 \u00eatre exploit\u00e9e\u2026 Bref, CamoLeak c\u2019est que le d\u00e9but de cette nouvelle vague de vuln li\u00e9es aux assistants IA qui se retrouvent int\u00e9gr\u00e9s dans nos outils de d\u00e9veloppement\u2026 Donc ouvrez l\u2019oeil car on ne sait jamais ce qui sa cache vraiment dans une pull request. Source<\/p>\n","protected":false},"author":1,"featured_media":1346,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"give_campaign_id":0,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_kadence_starter_templates_imported_post":false,"footnotes":""},"class_list":["post-1345","page","type-page","status-publish","has-post-thumbnail","hentry"],"campaignId":"","_links":{"self":[{"href":"https:\/\/elearningsamba.com\/index.php\/wp-json\/wp\/v2\/pages\/1345","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/elearningsamba.com\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/elearningsamba.com\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/elearningsamba.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/elearningsamba.com\/index.php\/wp-json\/wp\/v2\/comments?post=1345"}],"version-history":[{"count":0,"href":"https:\/\/elearningsamba.com\/index.php\/wp-json\/wp\/v2\/pages\/1345\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/elearningsamba.com\/index.php\/wp-json\/wp\/v2\/media\/1346"}],"wp:attachment":[{"href":"https:\/\/elearningsamba.com\/index.php\/wp-json\/wp\/v2\/media?parent=1345"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}