- Une équipe de recherche en sécurité est parvenue à exécuter du code à distance (RCE) sur les serveurs de production de CodeRabbit et à exfiltrer des jetons d’API et des secrets
- Via une PR exploitant Rubocop, il a été possible de dérober des variables d’environnement, avec à la clé un accès à PostgreSQL et des droits de lecture/écriture sur 1 million de dépôts
- La fuite de la clé privée de la GitHub App permettait d’injecter du code malveillant et de modifier le code source dans un très grand nombre de dépôts, publics comme privés
- CodeRabbit a réagi immédiatement dans les heures suivant le signalement et renforcé ses mesures de sécurité
- L’incident souligne la nécessité de prévenir ce type d’attaque via l’isolation en sandbox, le principe du moindre privilège et le blocage réseau lors de l’exécution d’outils externes
Introduction
- En janvier 2025, l’équipe de recherche de Kudelski Security a rendu publique une faille de sécurité critique affectant CodeRabbit
- CodeRabbit, largement utilisé pour l’automatisation des revues de PR, présentait des problèmes majeurs : remote code execution (RCE), fuite de variables d’environnement et d’informations sensibles, et obtention de droits de lecture/écriture sur plus d’un million de dépôts
- Cet article propose une analyse détaillée de la vulnérabilité présentée à Black Hat USA, et constitue un cas concret de faille dans un outil de revue de code et ses systèmes d’intégration
- La vulnérabilité signalée a été corrigée rapidement après son signalement
Présentation de CodeRabbit
- CodeRabbit est l’application de revue de code basée sur l’IA la plus installée sur les marketplaces GitHub et GitLab
- L’outil passe en revue 1 million de dépôts et 5 millions de pull requests sur ces deux plateformes
- À chaque création ou mise à jour de PR, le moteur IA analyse le code et génère automatiquement des commentaires et des suggestions
- Résumé de code, détection de failles de sécurité, propositions d’amélioration, génération de diagrammes : l’outil apporte un gain important en productivité de développement
Utilisation de CodeRabbit et structure des permissions
- L’offre Pro fournit des fonctions d’intégration avec des outils de linter et de SAST (analyse statique)
- Lors de l’authentification du compte GitHub et de l’installation de l’application, l’utilisateur accorde des droits de lecture/écriture sur les dépôts sélectionnés
- Si cette gestion des permissions est détournée, elle peut avoir un impact direct sur le code de tous les dépôts où l’application est installée
Exécution d’outils externes et découverte de l’exploit
- Lorsque CodeRabbit détecte des modifications de code dans une PR, il lance automatiquement plusieurs outils externes d’analyse statique (par exemple Rubocop)
- Rubocop utilise le fichier de configuration
.rubocop.yml, qui permet de charger des extensions Ruby externes (ext.rb, etc.)
- Un attaquant peut injecter du code malveillant dans
.rubocop.yml et ext.rb, puis soumettre une PR afin d’amener CodeRabbit à exécuter ce code sur son serveur distant
- Le code ainsi exécuté transmettait toutes les variables d’environnement du serveur vers l’infrastructure de l’attaquant
Analyse du contenu des variables d’environnement exfiltrées
- Les variables d’environnement exfiltrées comprenaient notamment des clés d’API, jetons et mots de passe de nombreux services
- Clés API Anthropic/OpenAI, salt/mot de passe de chiffrement, clé privée de la GitHub App, informations de connexion PostgreSQL, etc.
- Le RCE ouvrait la voie à des dommages secondaires importants et à fort effet de propagation, notamment l’accès à la base de données, la modification de code et la fuite d’informations internes
- Il aurait été possible de poursuivre l’exploration malveillante sur le serveur de production, mais les chercheurs se sont volontairement limités au strict minimum afin de ne pas perturber le service
Obtention de droits de lecture/écriture sur 1 million de dépôts
- La variable d’environnement GITHUB_APP_PEM_FILE (clé privée) permettait de s’authentifier auprès de l’API GitHub
- Sur l’ensemble des dépôts accessibles à CodeRabbit, publics comme privés, il devenait possible d’exercer des droits très étendus :
- lecture/écriture du code source, remplacement de fichiers de release (attaque de la supply chain), modification de l’historique Git, etc.
- Un code de reproduction (PoC) a été publié, démontrant la faisabilité réelle de l’exploitation
Résumé du PoC
- À l’aide de bibliothèques comme PyGitHub, les chercheurs ont utilisé la clé privée exfiltrée, l’App ID et d’autres éléments pour émettre un jeton d’accès à n’importe quel dépôt
- Ce jeton permettait ensuite d’automatiser le clonage de dépôts privés, la modification de fichiers, la création de nouveaux commits et l’altération de fichiers de release
Possibilité de compromission des dépôts internes/privés de CodeRabbit
- L’organisation CodeRabbit elle-même utilisait aussi l’application pour son propre service, ce qui permettait également d’accéder aux dépôts internes de CodeRabbit et de les cloner
- Il suffisait de connaître le nom de l’organisation pour récupérer l’ID d’installation et accéder immédiatement à la liste des dépôts concernés
Résumé de l’impact
- Accès non autorisé à des dépôts privés et fuite de données personnelles
- Menace d’attaques de la supply chain via manipulation du code source, insertion de malware ou de backdoors
- Possibilité d’enchaîner avec d’autres failles, par exemple autour de GitHub Actions
- RCE direct pouvant entraîner destruction de données, indisponibilité du service et effets en cascade sur d’autres services
Contexte et limites du jugement de l’IA
- Pendant l’attaque, la PR elle-même a été revue normalement par CodeRabbit, qui a bien laissé un commentaire d’avertissement sur la vulnérabilité, sans pour autant identifier réellement la séquence menaçante
- Cela montre qu’un outil de revue de code par IA ne comprend pas nécessairement le contexte d’une situation de risque réelle
Réponse et recommandations
- CodeRabbit a désactivé Rubocop, remplacé les secrets et procédé à un audit du système dans les heures ayant suivi le signalement
- Le problème provenait d’un outil non isolé par sandbox (Rubocop) ; après correction, tous les outils externes ont été déplacés vers un environnement isolé
- Pour renforcer la sécurité, l’article insiste sur la nécessité d’une conception défensive : réduction des variables d’environnement exposées, restriction des IP autorisées pour l’accès réseau, blocage de l’accès Internet, etc.
Divulgation responsable et conclusion
- En janvier 2025, le signalement a été suivi d’une réponse et de mesures rapides
- L’exploitation est restée au stade du PoC, mais un attaquant malveillant aurait facilement pu s’en servir pour cibler des dépôts à forte valeur, mener des campagnes massives de ransomware ou lancer des attaques destructrices sur la supply chain
- L’affaire rappelle l’importance de mettre en œuvre une sandbox et le principe du moindre privilège lors de l’intégration d’outils d’analyse externes et de services d’automatisation basés sur l’IA
Aucun commentaire pour le moment.