GitLost: Nós Enganamos o Agente de IA do GitHub para Vazando Repositórios Privados

Pesquisadores mostraram que um “fluxo de trabalho agentic” do GitHub movido por um LLM podia ser induzido, via comentários em issues públicas, a vazar código de repositórios privados, apesar das guardrails projetadas para evitar isso. Os comentaristas divergem sobre se isso é principalmente uma má configuração do autor do fluxo de trabalho ou uma falha arquitetural mais profunda na forma como o GitHub concede aos agentes acesso amplo entre repositórios, mas concordam amplamente que LLMs nunca devem receber permissões além das do usuário solicitante. O incidente alimenta um ceticismo maior sobre integrações de IA apressadas, a praticidade de se defender contra prompt injection e se código sensível deveria ser hospedado em plataformas que acoplam fortemente agentes de IA ao acesso a repositórios.

Natureza da vulnerabilidade

  • Os GitHub Agentic Workflows foram configurados para:
    • Ler títulos/corpos de issues públicas.
    • Responder via comentários públicos.
    • Ter acesso de leitura a outros repositórios da organização, incluindo privados.
  • Atacantes podiam injetar instruções em issues públicas que faziam o agente ler repositórios privados e colar o conteúdo de volta como comentários públicos.
  • Vários comentaristas enfatizam que a falha principal é a ausência de uma fronteira de confiança entre o conteúdo não confiável das issues e o acesso a repositórios privados.

Quem é o culpado?

  • Um grupo: isso é principalmente uma má configuração do usuário.
    • Os pesquisadores concederam explicitamente ao agente acesso aos repositórios de toda a organização e permitiram que ele processasse issues públicas não confiáveis.
    • Analogia: dar segredos a um job de CI e depois executá-lo em pull requests públicas.
  • Outro grupo: isso é uma falha de design do GitHub.
    • Usuários razoáveis esperam que um agente em um repositório público não vaze outros repositórios privados não relacionados.
    • As permissões são muito grosseiras e o GitHub não torna uma configuração segura fácil ou óbvia.

Prompt injection & guardrails (in)solucionáveis

  • Muitos argumentam que prompt injection é inerente aos LLMs: entrada do usuário é instrução, então não há uma maneira forte de separar “código” de “dados.”
  • Comparações com SQL injection:
    • Semelhante no sentido de que entradas não confiáveis mudam o comportamento.
    • Mas, ao contrário do SQL, não há equivalente a prepared statements; as guardrails são apenas mais texto de entrada e podem ser sobrepostas.
  • Alguns veem isso mais como engenharia social: você só pode mitigar por meio de processo e controle de acesso, não “consertar” o modelo.

Permissões, arquitetura e mitigação

  • A visão amplamente compartilhada: as únicas defesas reais são arquiteturais:
    • Execute agentes com as mesmas permissões, ou mais restritas, do usuário que faz o prompt; nunca com acesso “root”/abrangente da organização.
    • Limite agentes a um único repositório ou a fluxos de trabalho bem definidos; segmente fluxos de trabalho com tokens diferentes.
    • Restrinja escritas de agentes que lidam com entrada pública, mesmo que possam ler dados privados.
    • Execute agentes em sandbox e dê a eles suas próprias credenciais; trate-os como usuários não confiáveis.
  • Alguns sugerem UIs melhores para permissões por prompt/por fluxo de trabalho e tokens do GitHub mais granulares.

Confiança no GitHub, na nuvem e nas integrações de IA

  • Ceticismo em relação ao GitHub/Microsoft:
    • Percepção de “IA em tudo” impulsionada por pressão de investidores, levando a recursos apressados e inseguros.
    • Preocupações com dados de repositórios privados alimentando o treinamento do Copilot, a menos que haja opt-out.
  • Um subgrupo visível defende migrar para forges autohospedados (Forgejo, Codeberg, bare git) para evitar integração com IA e recuperar controle.

Reflexões mais amplas

  • Vários comentaristas veem isso como mais um exemplo de cultura de segurança fraca (“negligência criminosa”, lançamento no estilo “YOLO”).
  • Temas de consenso:
    • LLMs devem ser tratados como apenas mais uma camada de interface, não como um backend privilegiado.
    • Não se pode confiar em guardrails no nível do modelo; apenas barreiras de segurança rígidas e design com o princípio do menor privilégio reduzem o risco de forma significativa.