- Un equipo de investigación de seguridad logró ejecución remota de código (RCE) en los servidores de producción de CodeRabbit y filtración de tokens de API y secretos
- Mediante un PR que aprovechaba Rubocop, fue posible extraer variables de entorno, además de acceder a PostgreSQL y obtener lectura/escritura sobre 1 millón de repositorios
- La filtración de la clave privada de la GitHub App permitió inyectar código malicioso y modificar código fuente en un gran volumen de repositorios, públicos y privados, haciendo posible un impacto real
- CodeRabbit respondió de inmediato en cuestión de horas tras el reporte de la vulnerabilidad y reforzó sus medidas de seguridad
- Se subraya la necesidad de prevenir incidentes de seguridad al ejecutar herramientas externas mediante aislamiento en sandbox, privilegio mínimo y bloqueo de red
Introducción
- En enero de 2025, el equipo de investigación de Kudelski Security reveló una vulnerabilidad crítica en CodeRabbit
- En CodeRabbit, una herramienta ampliamente usada para automatizar revisiones de PR, se confirmó un problema grave: remote code execution (RCE), filtración de variables de entorno e información sensible, y obtención de permisos de lectura/escritura sobre más de 1 millón de repositorios
- Este artículo contiene un análisis detallado de la vulnerabilidad divulgada en Black Hat USA, y tiene alto valor como caso real de fallas en herramientas de revisión basadas en código y sistemas integrados
- La vulnerabilidad reportada fue parcheada rápidamente justo después de ser informada
Resumen de CodeRabbit
- CodeRabbit es la app de revisión de código con IA más instalada en GitHub Marketplace y GitLab Marketplace
- Revisa 1 millón de repositorios y 5 millones de pull requests en ambas plataformas
- Cada vez que un usuario crea o actualiza un PR, el motor de IA analiza el código y genera automáticamente comentarios y sugerencias
- Ofrece grandes beneficios para la productividad de desarrollo, como resúmenes de código, detección de vulnerabilidades de seguridad, sugerencias de mejora y generación de diagramas
Uso de CodeRabbit y estructura de permisos
- El plan Pro ofrece funciones de integración con herramientas de linter y SAST (análisis estático)
- Al autenticar una cuenta de GitHub e instalar la app, se le otorgan permisos de lectura y escritura sobre los repositorios seleccionados
- Si esta gestión de permisos fuera abusada, podría tener un impacto directo sobre el código de todos los repositorios donde está instalada
Ejecución de herramientas externas y hallazgo del exploit
- Cuando CodeRabbit detecta cambios de código dentro de un PR, ejecuta automáticamente múltiples herramientas externas de análisis estático (por ejemplo, Rubocop)
- Rubocop está diseñado para usar el archivo de configuración
.rubocop.yml, que puede cargar archivos externos de extensión Ruby (como ext.rb)
- Un atacante puede insertar código malicioso en
.rubocop.yml y ext.rb, enviar un PR y hacer que CodeRabbit ejecute ese código en su servidor remoto
- El código ejecutado con esta técnica envió todas las variables de entorno del servidor al servidor del atacante
Análisis del contenido filtrado en variables de entorno
- Las variables de entorno filtradas incluían API keys, tokens y contraseñas de diversos servicios, entre ellos:
- claves de API de Anthropic/OpenAI, salt/password de cifrado, clave privada de GitHub App, credenciales de PostgreSQL, etc.
- Mediante RCE, el potencial de daño secundario era alto y de gran alcance: acceso a bases de datos, modificación de código y filtración de información interna del servicio
- Era posible continuar con más exploración maliciosa sobre el servidor real, pero por consideraciones operativas del servicio se verificó solo lo mínimo y luego se detuvo
Obtención de permisos de lectura/escritura sobre 1 millón de repositorios
- Usando GITHUB_APP_PEM_FILE (clave privada) incluida en las variables de entorno, era posible autenticarse ante la GitHub API
- Sobre todos los repositorios a los que CodeRabbit tenía acceso (incluyendo públicos y privados), se podían ejercer permisos muy potentes, como:
- leer/escribir código fuente, reemplazar archivos de release (ataque a la cadena de suministro), alterar historial de git, etc.
- Se publicó un código de reproducción (PoC) que demostró la viabilidad real de explotación
Resumen del PoC
- Usando librerías como PyGitHub y la clave privada filtrada, el App ID y otros datos, se pueden emitir tokens de acceso para repositorios arbitrarios
- Con esos tokens, es posible automatizar la clonación de repositorios privados, modificación de archivos, nuevos commits y manipulación de archivos de release
Posible compromiso de repositorios internos/privados de CodeRabbit
- Como la propia organización de CodeRabbit también tenía instalada la app en su servicio, también era posible acceder y clonar los repositorios internos del código fuente de CodeRabbit
- Con solo conocer el nombre de la organización, se podía consultar el installation ID y acceder de inmediato a la lista de repositorios correspondientes
Resumen del impacto
- Acceso no autorizado a repositorios privados y filtración de datos personales
- Amenaza de ataques a la cadena de suministro, como manipulación de código fuente e inserción de malware/backdoors
- Posibilidad de encadenarlo con vulnerabilidades adicionales, como las de GitHub Actions
- RCE directo con potencial de causar destrucción de datos, caída del servicio y daños en cascada sobre otros servicios
Contexto y límites del juicio de la IA
- Incluso durante el ataque, el propio PR fue revisado normalmente por CodeRabbit, y aunque dejó un comentario de advertencia sobre la vulnerabilidad, en la práctica no logró identificar la sintaxis maliciosa como amenaza
- Esto muestra que una herramienta de revisión de código con IA no necesariamente comprende el contexto real de una situación de riesgo
Respuesta y recomendaciones
- CodeRabbit deshabilitó Rubocop, rotó secretos y realizó una auditoría del sistema en cuestión de horas tras el reporte
- El problema ocurrió en una herramienta (Rubocop) a la que no se le aplicaba sandbox; después de las medidas, se mejoró para que todas las herramientas externas se ejecuten en entornos aislados
- Para reforzar la seguridad, se subraya la necesidad de un diseño defensivo en el entorno de ejecución de herramientas externas: minimizar variables de entorno, restringir IPs de acceso de red, bloquear acceso a internet, etc.
Divulgación responsable y conclusión
- En enero de 2025, tras el reporte, se llevaron a cabo una respuesta y medidas rápidas
- Se quedó solo en un PoC, pero quedó demostrado que un atacante malicioso podría abusarlo fácilmente para seleccionar repositorios de alto valor, desplegar ransomware a gran escala o realizar ataques destructivos a la cadena de suministro
- Se reafirma la importancia de implementar sandbox y el principio de mínimo privilegio al integrar herramientas externas de análisis y servicios de automatización basados en IA
Aún no hay comentarios.