Uma vulnerabilidade crítica no GitHub Copilot Chat, apelidada de “CamoLeak”, permitiu que invasores roubassem silenciosamente código-fonte e segredos de repositórios privados usando uma técnica sofisticada de injeção imediata. A falha, que teve uma pontuação CVSS de 9,6, já foi corrigida pelo GitHub.
Como funcionou o ataque CamoLeak
O método de ataque, descoberto pelo pesquisador de segurança Omer Mayrazcomeçou ocultando instruções maliciosas em uma descrição de pull request usando o recurso de “comentários invisíveis” do GitHub. Embora esse conteúdo não seja visível para os usuários na interface padrão, o Copilot Chat ingere todo o contexto do repositório e da solicitação pull, incluindo esses metadados ocultos, ao gerar respostas. A vulnerabilidade foi acionada quando um desenvolvedor legítimo com acesso a repositórios privados fez uma pergunta ao Copilot Chat sobre a solicitação pull comprometida. O Copilot, que opera com as permissões do usuário que faz a consulta, executaria então o prompt malicioso oculto. Isso permitiu que o invasor comandasse o assistente de IA para procurar informações confidenciais, como chaves de API ou código-fonte, nos repositórios privados acessíveis da vítima. Para exfiltrar os dados roubados, o ataque aproveitou o próprio serviço de proxy de imagem “Camo” do GitHub. Normalmente, a Política de Segurança de Conteúdo (CSP) do GitHub evita que o conteúdo vaze dados diretamente para domínios externos. O proxy Camo foi projetado para rotear com segurança solicitações de imagens externas, reescrevendo URLs para um camo.githubusercontent.com endereço com assinatura criptográfica. O ataque CamoLeak contornou essas proteções fazendo primeiro com que o invasor criasse um dicionário de URLs Camo pré-assinados. Cada URL válido apontava para uma imagem benigna e invisível de 1×1 pixel hospedada no servidor do invasor, com cada URL exclusivo representando um único caractere de dados (por exemplo, ‘A’, ‘B’, ‘1’, ‘;’). O prompt injetado instruiu o Copilot a construir sua resposta referenciando esses URLs de imagem pré-assinados em uma sequência específica que codificava o conteúdo roubado do repositório. Quando o navegador da vítima renderizou a saída do Copilot, ele fez uma série de solicitações por meio do proxy Camo confiável para buscar cada pixel invisível. A sequência dessas solicitações, recebidas pelo servidor do invasor, reconstruiu efetivamente os dados roubados, caractere por caractere, tudo isso sem exibir qualquer conteúdo malicioso ao usuário ou acionar alertas padrão de segurança de rede.




