- A equipe de pesquisa de segurança conseguiu execução remota de código (RCE) nos servidores de produção do CodeRabbit e vazamento de tokens de API e segredos
- Com um PR usando Rubocop, foi possível roubar variáveis de ambiente, além de acessar o PostgreSQL e ler/escrever em 1 milhão de repositórios
- Com o vazamento da chave privada do GitHub App, tornou-se possível injetar código malicioso e modificar código-fonte em larga escala, incluindo repositórios públicos e privados
- A equipe do CodeRabbit respondeu imediatamente em poucas horas após o reporte da vulnerabilidade e reforçou as medidas de segurança
- Ao executar ferramentas externas, destaca-se a necessidade de prevenir incidentes de segurança com isolamento em sandbox, princípio do menor privilégio e bloqueio de rede
Introdução
- Em janeiro de 2025, a equipe de pesquisa da Kudelski Security divulgou uma vulnerabilidade grave no CodeRabbit
- No CodeRabbit, amplamente usado como ferramenta de automação de revisão de PRs, foram confirmados problemas críticos como remote code execution (RCE), vazamento de variáveis de ambiente e informações sensíveis, e obtenção de permissão de leitura/escrita em mais de 1 milhão de repositórios
- Este texto traz uma análise detalhada da vulnerabilidade pública apresentada na Black Hat USA e tem alto valor como caso real de falha em ferramentas de revisão baseada em código e sistemas integrados
- A vulnerabilidade reportada foi corrigida rapidamente logo após a notificação
Visão geral do CodeRabbit
- O CodeRabbit é o aplicativo de revisão de código com IA mais instalado no GitHub/GitLab Marketplace
- Nas duas plataformas, ele revisa 1 milhão de repositórios e 5 milhões de pull requests
- Sempre que o usuário cria ou atualiza um PR, o mecanismo de IA analisa o código e gera automaticamente comentários e sugestões
- Ele traz ganhos significativos de produtividade de desenvolvimento, como resumo de código, detecção de vulnerabilidades de segurança, sugestões de melhoria e geração de diagramas
Uso do CodeRabbit e estrutura de permissões
- O plano Pro oferece integração com ferramentas de linter e SAST (análise estática)
- Ao autenticar a conta do GitHub e instalar o app, o usuário concede permissão de leitura e escrita aos repositórios selecionados
- Se esse modelo de permissões for explorado de forma maliciosa, ele pode causar impacto direto no código de todos os repositórios onde o app estiver instalado
Execução de ferramentas externas e descoberta do exploit
- Quando detecta alterações de código em um PR, o CodeRabbit executa automaticamente várias ferramentas externas de análise estática (ex.: Rubocop)
- O Rubocop foi projetado para usar o arquivo de configuração
.rubocop.yml a fim de carregar arquivos externos de extensão Ruby (ext.rb etc.)
- O atacante insere código malicioso em
.rubocop.yml e ext.rb, envia um PR e induz o CodeRabbit a executar esse código em seu servidor remoto
- O código executado por essa técnica envia todas as variáveis de ambiente do servidor para o servidor do atacante
Análise do conteúdo vazado das variáveis de ambiente
- As variáveis de ambiente vazadas continham API keys, tokens e senhas de diversos serviços, incluindo:
- chaves de API da Anthropic/OpenAI, salt/senha de criptografia, chave privada do GitHub App, informações de conexão com PostgreSQL etc.
- Com RCE, os danos secundários podem ser grandes e de alto impacto, incluindo acesso ao banco de dados, alterações de código e vazamento de informações internas do serviço
- Seria possível aprofundar a exploração maliciosa no servidor real, mas, considerando a operação do serviço, a verificação foi interrompida após o mínimo necessário
Obtenção de permissão de leitura/escrita em 1 milhão de repositórios
- Foi possível autenticar na API do GitHub usando o GITHUB_APP_PEM_FILE (chave privada) presente nas variáveis de ambiente
- Em todos os repositórios aos quais o CodeRabbit podia acessar, incluindo públicos e privados, seria possível exercer permissões extremamente poderosas, como:
- leitura/escrita de código-fonte, substituição de arquivos de release (ataque à cadeia de suprimentos) e alteração do histórico git
- O código de reprodução (PoC) foi divulgado, comprovando a viabilidade de exploração real
Resumo da PoC
- Usando bibliotecas como PyGitHub e a chave privada vazada, o App ID etc., foi possível emitir tokens de acesso arbitrários para repositórios
- Com esses tokens, torna-se possível automatizar clonagem de repositórios privados, alteração de arquivos, novos commits e adulteração de arquivos de release
Possibilidade de comprometimento dos repositórios internos/privados do CodeRabbit
- Como a própria organização do CodeRabbit também utilizava a instalação do serviço, também seria possível acessar e clonar os repositórios internos de código-fonte do CodeRabbit
- Bastava conhecer o nome da organização para consultar o installation ID e então acessar imediatamente a lista de repositórios correspondente
Resumo do impacto
- Acesso não autorizado a repositórios privados e vazamento de dados pessoais
- Ameaça de ataques à cadeia de suprimentos, como manipulação de código-fonte e inserção de malware/backdoors
- Possibilidade de encadear com vulnerabilidades adicionais, como GitHub Actions
- A RCE direta pode causar destruição de dados, indisponibilidade do serviço e danos em cascata a outros serviços
Contexto e limites do julgamento da IA
- Mesmo durante o ataque, o próprio PR foi revisado normalmente pelo CodeRabbit, e embora tenha deixado comentários de alerta sobre vulnerabilidade, não conseguiu identificar de fato o trecho malicioso
- Isso mostra que uma ferramenta de revisão de código com IA não necessariamente compreende o contexto completo de uma situação de risco real
Resposta e recomendações
- O CodeRabbit desativou o Rubocop, trocou segredos e realizou auditoria do sistema em poucas horas após o reporte da vulnerabilidade
- O problema ocorreu em uma ferramenta sem sandbox aplicada (Rubocop) e, após as medidas, o sistema foi melhorado para executar todas as ferramentas externas em ambientes isolados
- Para reforçar a segurança, destaca-se a necessidade de design defensivo no ambiente de execução de ferramentas externas, com minimização de variáveis de ambiente, restrição de IPs com acesso à rede e bloqueio de acesso à internet
Divulgação responsável e conclusão
- Em janeiro de 2025, após o reporte, houve resposta e correções rápidas
- Ficou apenas na PoC, mas confirmou-se que um atacante malicioso poderia explorar isso facilmente para selecionar repositórios de alto valor, realizar ransomware em larga escala ou ataques destrutivos à cadeia de suprimentos
- Reforça-se a importância de implementar sandbox e o princípio do menor privilégio ao integrar ferramentas externas de análise e serviços automatizados baseados em IA
Ainda não há comentários.