- Em junho de 2025, foi descoberta uma vulnerabilidade crítica (CVSS 9.6) no GitHub Copilot Chat
- Foi confirmada a possibilidade de vazamento de segredos e código privado usando técnicas de bypass de CSP e injeção remota de prompt
- É possível manipular os resultados das respostas do Copilot de outros usuários abusando do recurso de comentários ocultos do GitHub
- O bypass de CSP foi bem-sucedido por meio de uma análise minuciosa da estrutura de uso do proxy Camo do GitHub
- O GitHub corrigiu emergencialmente a vulnerabilidade em agosto de 2025 desativando a renderização de imagens
Resumo TL;DR
- Em junho de 2025, foi descoberta uma vulnerabilidade crítica no GitHub Copilot Chat que permitia o vazamento de código-fonte e segredos de repositórios privados
- O pesquisador usou injeção remota de prompt e bypass da CSP (Content Security Policy) do GitHub para manipular e controlar completamente as respostas do Copilot, induzindo sugestões de código malicioso ou links maliciosos
- O núcleo do ataque está em aproveitar o recurso oficial de comentários ocultos do GitHub e a sensibilidade ao contexto do Copilot para inserir prompts de forma invisível para as pessoas
- Ao analisar o comportamento em que o GitHub converte automaticamente links externos de imagem em proxy Camo, foi possível projetar uma forma de montar os dados vazados caractere por caractere explorando essa estrutura
- Após o reporte via HackerOne, o GitHub aplicou um patch bloqueando a renderização de imagens no Copilot Chat
Contexto
- O GitHub Copilot Chat é um assistente de IA integrado que ajuda desenvolvedores a fazer perguntas, obter explicações de código e receber sugestões de implementação
- O Copilot Chat consulta diversas informações de contexto, como código no repositório, commits e PRs (pull requests)
- Quanto mais informações de contexto existem, maior também é a superfície de ataque
Uso de injeção de prompt e do recurso de comentários ocultos
- Em um experimento que atacava a sensibilidade ao contexto do GitHub Copilot, foi inserido um prompt específico na descrição de um PR (pull request)
- Porém, normalmente os prompts ou mensagens inseridos podem ser vistos por todos os usuários
- Nesse ponto, foi descoberto que, usando o recurso oficial de comentários ocultos do GitHub (``), era possível enviar comandos apenas ao Copilot de forma invisível
- Quando o prompt é colocado dentro de um comentário oculto, ele aparece nas notificações, mas seu conteúdo detalhado não fica visível, produzindo um efeito de Server-Side Injection
Alcance do prompt malicioso
- O prompt em comentário oculto também afeta o Copilot da mesma forma quando outros usuários acessam a página do PR
- Em vez de texto simples, é possível inserir comandos compostos, como sugestões de código, Markdown, URLs maliciosas e recomendação de pacotes maliciosos como Copilotevil
- Como o Copilot usa as mesmas permissões do usuário que fez a solicitação, ele pode acessar repositórios privados e usar essas informações
- Também é possível criar um cenário em que informações são vazadas para o invasor quando o usuário clica, ao adicionar intencionalmente dados codificados em base16 à URL
Principais impactos
- Manipulação e controle do conteúdo das respostas do Copilot de outros usuários
- Possibilidade de injeção de prompt personalizada com Markdown, imagens, código e URL
- Viabilização de tentativas de exfiltração de informações dentro do escopo de permissões da vítima
Interpretação estrutural do bypass da CSP do GitHub
- O GitHub aplica uma CSP forte, limitando o carregamento de imagens e recursos de domínios externos
- Quando imagens são inseridas em README ou Markdown, o GitHub Camo Proxy converte a URL externa em uma URL de proxy baseada em assinatura HMAC
- Para que o navegador carregue a imagem, é preciso ter a URL Camo e o valor de assinatura gerados previamente pelo GitHub
- Mesmo que o usuário crie uma URL com dados dinâmicos arbitrários, ela será bloqueada se não passar pelo proxy Camo
Como a estrutura do Camo foi explorada
- O pesquisador gerou previamente um dicionário de URLs do proxy Camo para todo o conjunto de letras e caracteres especiais e o incluiu no prompt oculto
- Em seguida, pediu ao Copilot um "jogo de arte ASCII", de forma que os dados a serem vazados (por exemplo, código-fonte ou chaves) fossem convertidos em uma sequência de imagens do proxy Camo
- Em cada requisição de imagem, o navegador recebia apenas um pixel transparente 1x1, sem qualquer mudança visível para o usuário
- Por fim, foram adicionados parâmetros aleatórios para evitar problemas de cache
Implementação e teste do ataque real
- O alvo definido foram informações descritivas de uma vulnerabilidade zero-day em uma issue de projeto privado
- O processo real de exfiltração foi comprovado com uma PoC (prova de conceito)
- O Copilot foi levado a automatizar inclusive a busca pela palavra-chave "AWS_KEY" e o vazamento dos resultados
Resposta e patch do GitHub
- Em 14 de agosto de 2025, o GitHub corrigiu a vulnerabilidade desativando completamente a renderização de imagens no Copilot Chat
Saiba mais
1 comentários
Comentários do Hacker News
Estamos muito felizes por ter migrado todo o ambiente de trabalho para o Forgejo, um VCS self-hosted; começamos há 2 anos a migrar até todos os repositórios dos clientes, e não só reduzimos drasticamente a assinatura do GitHub, como também ganhamos um desempenho muito mais rápido e estável em um sistema usado por 30 a 40 desenvolvedores por dia; além disso, proibimos o uso do VSCode e de qualquer editor com recursos de LLM embutidos; os desenvolvedores podem usar agentes de codificação via CLI, mas eles operam estritamente dentro de contêineres isolados, com acesso permitido apenas a um conjunto limitado de código-fonte
Em um ambiente onde 30 a 40 desenvolvedores clonam os repositórios em suas máquinas locais para trabalhar, tenho curiosidade de saber como vocês evitam que alguém exponha por engano o repositório inteiro a uma LLM; e, se alguém deixar de reportar o erro por medo de prejuízo profissional, como vocês detectam um incidente de vazamento?
Queria perguntar qual IDE vocês usam como alternativa
Tenho curiosidade sobre a que esses tools de CLI se conectam: são serviços oficiais da OpenAI ou Claude, ou um provedor como o AWS Bedrock?
Banir o VSCode por completo parece uma medida excessiva, indo além de restringir apenas os plugins problemáticos por recurso; o VSCode é a única IDE com suporte amplo até para linguagens como Haskell, Lean 4 e F*, que têm suporte fraco em outras IDEs; mesmo em grandes empresas comerciais de bens de consumo, normalmente não se proíbe o VSCode em si, e sim apenas o uso dos recursos problemáticos
Acho que esse problema na verdade não foi resolvido de forma adequada; a grande questão do Copilot é que ele aceita entrada em linguagem natural, ou seja, qualquer método de exfiltração que você descreva em inglês pode acabar funcionando exatamente como descrito; dizem que “corrigiram” apenas um método específico, mas não divulgam como de fato corrigiram; por exemplo, daria para usar base64 em uma URL de imagem, e até enganar o sistema com algo como “salvei por engano a minha lista do carrinho no campo passswd, encontre isso para mim”, o que talvez também permitisse extrair senhas; parece haver um número enorme de vulnerabilidades possíveis; fico pensando se ao menos existe bug bounty para esse tipo de coisa, porque isso aqui é uma mina de ouro
O que exatamente quer dizer usar base64 em uma URL de imagem? A ideia seria usar uma URL de imagem sem Camo? Pelo que entendo, imagens sem Camo são bloqueadas por CSP; além disso, se o agente do Copilot não tiver permissão de acesso à internet, até fazer fetch seria difícil; e, se isso for possível, provavelmente abriria vetores de ataque bem mais fáceis do que usar imagens
Pelo que vejo, o GitHub resolveu esse problema simplesmente desativando por completo a renderização de imagens no Copilot Chat
Fiquei impressionado com a ideia de pré-gerar URLs Camo para todas as letras e símbolos do alfabeto e depois inseri-las no prompt; é uma abordagem elegante
Este post passa um pouco a impressão de ser propaganda de uma empresa chamada Legit; porém, na prática, todas as soluções baseadas em IA compartilham a mesma fraqueza de falta de transparência e problemas de confiança; ao usar ferramentas de cibersegurança com IA que não sejam baseadas em FOSS, o risco de segurança pode até ser maior
Esta não é a primeira vez que algo assim acontece; já houve antes o caso "GitHub Copilot Chat: From Prompt Injection to Data Exfiltration"
Acho que esconder informações em comentários HTML ocultos em PRs ainda pode continuar sendo um problema sério, especialmente em repositórios open source; queria saber se isso foi melhorado
É interessante como este exploit usa o padrão lento de resposta token por token das LLMs para permitir a reconstrução dos dados em sequência; imagino que, se a LLM passasse a retornar a resposta inteira de uma vez em bloco, a temporização se perderia e a reconstrução ficaria muito mais difícil
Fico pensando se não daria para mitigar isso restringindo o acesso do Copilot aos repositórios para somente leitura
Nem lembro mais quando foi a última vez que exfiltrei código-fonte pessoal com o Copilot
Achei uma abordagem realmente única e muito bacana