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

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.