Une vulnérabilité critique dans GitHub Copilot Chat, baptisée « CamoLeak », a permis aux attaquants de voler silencieusement le code source et les secrets de référentiels privés à l’aide d’une technique sophistiquée d’injection d’invite. La faille, qui portait un score CVSS de 9,6, a depuis été corrigée par GitHub.
Comment a fonctionné l’attaque CamoLeak
La méthode d’attaque, découverte par un chercheur en sécurité Omer Mayraza commencé par masquer les instructions malveillantes dans une description de demande d’extraction à l’aide de la fonctionnalité « commentaires invisibles » de GitHub. Bien que ce contenu ne soit pas visible pour les utilisateurs dans l’interface standard, Copilot Chat ingère tout le contexte du référentiel et des demandes d’extraction, y compris ces métadonnées cachées, lors de la génération de réponses. La vulnérabilité a été déclenchée lorsqu’un développeur légitime ayant accès à des référentiels privés posait à Copilot Chat une question sur la demande d’extraction compromise. Copilot, qui fonctionne avec les autorisations de l’utilisateur interrogeant, exécuterait alors l’invite malveillante cachée. Cela a permis à l’attaquant de commander à l’assistant IA de rechercher des informations sensibles, telles que des clés API ou du code source, dans les référentiels privés accessibles de la victime. Pour exfiltrer les données volées, l’attaque a utilisé le service proxy d’images « Camo » de GitHub. Normalement, la politique de sécurité du contenu (CSP) de GitHub empêche le contenu de divulguer directement des données vers des domaines externes. Le proxy Camo est conçu pour acheminer en toute sécurité les demandes d’images externes, en réécrivant les URL vers un camo.githubusercontent.com adresse avec une signature cryptographique. L’attaque CamoLeak a contourné ces protections en demandant d’abord à l’attaquant de créer un dictionnaire d’URL Camo pré-signées. Chaque URL valide pointait vers une image inoffensive et invisible de 1 x 1 pixel hébergée sur le serveur de l’attaquant, chaque URL unique représentant un seul caractère de données (par exemple, « A », « B », « 1 », « ; »). L’invite injectée a ensuite demandé à Copilot de construire sa réponse en référençant ces URL d’images pré-signées dans une séquence spécifique qui codait le contenu du référentiel volé. Lorsque le navigateur de la victime a rendu la sortie de Copilot, il a effectué une série de requêtes via le proxy Camo de confiance pour récupérer chaque pixel invisible. La séquence de ces requêtes, telles que reçues par le serveur de l’attaquant, a reconstitué efficacement les données volées caractère par caractère, le tout sans afficher de contenu malveillant à l’utilisateur ni déclencher d’alertes de sécurité réseau standard.





