Falha no Claude Code GitHub Action permitia sequestro de repositórios a partir de uma única issue
- Cyber Security Brazil
- há 12 minutos
- 5 min de leitura

Uma falha no Claude Code GitHub Action, da Anthropic, permitia que um invasor assumisse o controle de repositórios públicos vulneráveis apenas abrindo uma issue maliciosa no GitHub. O problema, descoberto pelo pesquisador RyotaK, da GMO Flatt Security, expôs riscos relevantes para pipelines de CI/CD que integram agentes de IA com permissões amplas sobre código, issues, pull requests e workflows.
O caso é especialmente sensível porque o próprio repositório da action da Anthropic utilizava o mesmo fluxo vulnerável. Em um cenário de exploração bem-sucedida, um invasor poderia inserir código malicioso na própria action e afetar projetos downstream que dependem dela, ampliando o impacto para uma cadeia de suprimentos de software.
RyotaK reportou o bypass principal à Anthropic em janeiro. A empresa corrigiu a falha em quatro dias e continuou reforçando a segurança da ferramenta ao longo dos meses seguintes. As correções estão disponíveis a partir da versão claude-code-action v1.0.94. A Anthropic classificou os problemas com pontuação 7.8 no CVSS v4.0 e pagou uma recompensa por meio de seu programa de bug bounty.
O Claude Code GitHub Actions permite inserir o Claude em pipelines de CI/CD para tarefas como triagem de issues, aplicação de labels, revisão de pull requests e execução de comandos por meio de slash commands. Por padrão, o workflow pode receber permissões de leitura e escrita sobre código, issues, pull requests, discussões e arquivos de workflow do repositório.

Essa combinação torna o controle de acionamento um ponto crítico. Como a action pode operar com permissões amplas, ela deveria aceitar comandos apenas de usuários confiáveis, normalmente aqueles com permissão de escrita no repositório. O problema identificado estava justamente nessa verificação.
A lógica de autorização aceitava qualquer ator cujo nome terminasse em “[bot]”, partindo da premissa de que GitHub Apps seriam entidades confiáveis instaladas por administradores. No entanto, qualquer pessoa pode registrar um GitHub App, instalá-lo em um repositório próprio e usar seu token para abrir uma issue ou pull request em qualquer repositório público. A action interpretava essa atividade como proveniente de um bot confiável e permitia que o conteúdo malicioso fosse processado.
A falha afetava de forma particular o modo agent. No modo tag, havia uma verificação adicional para confirmar se o ator era um usuário humano real. No modo agent, esse controle não existia, deixando a action exposta à exploração.
A partir desse ponto, o ataque dependia de prompt injection indireto. Essa técnica consiste em inserir instruções maliciosas em um conteúdo que será lido por um sistema de IA, levando o modelo a seguir comandos escondidos em vez de cumprir apenas a tarefa original. No caso demonstrado, RyotaK criou uma issue cujo corpo simulava uma mensagem de erro e ajustou o prompt até fazer o Claude “recuperar” a execução rodando comandos embutidos no texto.
O alvo era o arquivo /proc/self/environ, em sistemas Linux, que armazena variáveis de ambiente do processo, incluindo possíveis segredos. Embora o Claude Code bloqueasse leituras diretas desse arquivo, o pesquisador conseguiu contornar a proteção e induzir o agente a escrever os valores de volta na própria issue. Com isso, o invasor poderia acessar os dados vazados.
Entre essas variáveis, o ativo mais importante era o par de credenciais usado pelo GitHub Actions para solicitar um token OIDC. Esse token assinado comprova que determinado workflow está sendo executado em determinado repositório. O Claude Code troca esse token com o backend da Anthropic para obter um token de instalação do Claude GitHub App com acesso de escrita.
Na prática, se um invasor roubasse essas credenciais e repetisse a troca, poderia obter acesso de escrita ao código, às issues e aos workflows do repositório alvo. Caso o ataque fosse direcionado ao repositório da própria claude-code-action, haveria possibilidade de comprometer a action consumida por outros projetos, criando um risco de supply chain.
RyotaK também identificou uma rota mais simples, que dispensava o truque envolvendo bots. Um exemplo de workflow de triagem de issues da própria Anthropic utilizava a configuração allowed_non_write_users: "*", permitindo que qualquer usuário acionasse a action. A documentação da Anthropic já tratava essa configuração como arriscada, mas muitos repositórios copiaram o exemplo e herdaram a exposição.
Outro agravante era o fato de o Claude publicar resumos de tarefas no painel público de execução do workflow. Esse comportamento criava um canal direto para vazamento de informações, já que dados sensíveis poderiam ser exibidos em uma área visível publicamente.
Também havia um caminho de exploração para um invasor sem permissão para acionar o Claude diretamente, mas com capacidade de editar issues. Nesse caso, bastaria alterar uma issue criada por um usuário confiável depois que o workflow fosse disparado, mas antes de o Claude ler o conteúdo. O payload malicioso passaria a ser tratado como entrada confiável.
A recomendação principal é atualizar o Claude Code GitHub Action para a versão v1.0.94 ou posterior. Além disso, organizações devem revisar workflows que permitem acionamento por usuários sem permissão de escrita ou por bots. Se a action processar entrada não confiável, ela não deve ter acesso a segredos além do Anthropic API Key e do GITHUB_TOKEN estritamente necessários. Também é recomendável remover ferramentas e permissões que possam ser usadas para exfiltração de dados.
O caso reforça um risco recorrente em agentes de IA integrados a ambientes de desenvolvimento: prompt injection não é apenas um problema teórico quando o agente possui ferramentas reais, permissões reais e acesso a tokens. A extensão do impacto depende diretamente do que o agente consegue executar dentro do ambiente.
Esse tipo de cadeia de ataque já teve consequências práticas. Em fevereiro, uma issue com título manipulado por prompt injection contra o workflow de triagem do Cline, baseado no claude-code-action, permitiu que invasores roubassem um token de publicação npm e enviassem uma versão não autorizada, cline@2.3.0. A versão maliciosa forçava a instalação de um agente de IA separado, não malicioso, e foi removida cerca de oito horas depois. Ainda assim, a mesma cadeia poderia ter sido usada para distribuir malware real a todos os usuários que atualizassem o pacote.
No fim de fevereiro, o bot autônomo “HackerBot-Claw” também passou a sondar configurações incorretas em GitHub Actions de organizações como Microsoft, Datadog, projetos da CNCF e outras. Em uma das tentativas, o bot tentou manipular um revisor baseado em Claude por meio de um arquivo de configuração envenenado, mas o Claude identificou a tentativa e recusou a execução.
Não há indicação pública de que o caminho específico capaz de comprometer a action da própria Anthropic tenha sido usado contra um alvo real. RyotaK demonstrou a técnica apenas em repositórios de teste próprios e separou esse cenário das variantes que chegaram a ser exploradas em ambientes reais.
O pesquisador afirmou já ter reportado cerca de 50 formas diferentes de contornar o sistema de permissões do Claude Code e executar comandos. O volume de descobertas aponta para um desafio mais amplo em agentes de codificação baseados em IA: quando esses sistemas são conectados a pipelines de desenvolvimento, repositórios e credenciais, falhas de prompt injection podem se transformar em problemas reais de segurança de aplicação, CI/CD e cadeia de suprimentos.
Para equipes de segurança, a principal lição é que agentes de IA devem ser tratados como componentes privilegiados dentro do ambiente de desenvolvimento. Isso exige princípio do menor privilégio, segregação de tokens, revisão de permissões, controle rigoroso de quem pode acionar workflows, bloqueio de entradas não confiáveis, logs auditáveis e mecanismos de contenção para impedir que uma instrução maliciosa em uma issue se transforme em acesso de escrita ao repositório.