La falla crítica de Claude Code: cuando abrir un issue te da control total de tus repositorios en GitHub Actions

Autor: Publicada 5 min de lectura 172 lecturas

Las imágenes de este artículo han sido generadas con inteligencia artificial. Cómo publicamos

Un investigador de seguridad, RyotaK de GMO Flatt Security, descubrió una vulnerabilidad crítica en la GitHub Action de Anthropic llamada Claude Code que permitía a un atacante hacerse con el control de repositorios públicos vulnerables con nada más que abrir un issue: la acción podía confiar en "bots" sin validar su origen y, combinada con técnicas de prompt injection, derivar en la exfiltración de credenciales y la toma de control del flujo de CI/CD.

En términos técnicos, la acción está diseñada para integrarse en pipelines de CI/CD y tiene por defecto permisos amplios sobre código, issues, pull requests y archivos de workflow. Para mitigar ese riesgo, la acción debía restringir quién podía dispararla, idealmente solo usuarios con permisos de escritura. El fallo estaba en una comprobación que permitía pasar cualquier actor cuyo nombre terminara en [bot] bajo la asunción errónea de que los GitHub Apps son intrínsecamente confiables. Sin embargo, cualquiera puede crear e instalar un GitHub App en su propio repositorio y usar su token para interactuar con repositorios públicos ajenos; la acción interpretaba esa interacción como "bot de confianza" y aceptaba el contenido malicioso.

La falla crítica de Claude Code: cuando abrir un issue te da control total de tus repositorios en GitHub Actions
Imagen generada con IA.

Una vez que la acción acepta contenido adversario, el atacante puede usar prompt injection, es decir, insertar instrucciones en el texto que el modelo (Claude) interpreta como parte de su tarea. RyotaK demostró cómo lograr que Claude lea y escriba de forma que filtrara variables de entorno desde /proc/self/environ —donde pueden residir secretos— y que esas variables incluyeran la cadena necesaria para obtener un token de instalación de la GitHub App con permisos de escritura. Ese token puede canjearse por acceso a la acción y, por ende, permitir la inyección de código malicioso en la propia acción que luego se propaga a proyectos que la consumen.

Anthropic recibió el informe en enero, calificó la serie de fallos con un CVSS v4.0 de 7.8, corrigió el bypass central en cuatro días y publicó endurecimientos adicionales durante la primavera; las correcciones están incluidas a partir de claude-code-action v1.0.94. Anthropic también abonó una recompensa por el hallazgo. Aun así, RyotaK confirmó aproximadamente 50 vectores distintos para eludir el sistema de permisos, lo que subraya que el problema es tanto técnico como de diseño: agentes con herramientas y credenciales pueden ser empujados tan lejos como les permitan sus permisos.

Las implicaciones son de amplio alcance. Muchas organizaciones replican ejemplos de workflows tal cual y heredan malas configuraciones, como la opción allowed_non_write_users: "*", que permite que cualquier usuario desencadene la acción. Además, la práctica de publicar resúmenes o salidas de IA en paneles públicos de las ejecuciones de workflow crea canales de fuga adicionales. Ya hay precedentes reales: en febrero, una inyección de prompt en un flujo de triage permitió robar un token de publicación de npm y subir un paquete no autorizado, un claro ejemplo de cómo una cadena de confianza rota puede convertir un asistente de desarrollo en vectores de supply-chain.

Si administras repositorios que usan Claude Code u otras actions de IA, la primera y más urgente recomendación es actualizar a claude-code-action v1.0.94 o superior. A continuación, revisa y endurece tus workflows: restringe quién puede dispararlos, no aceptes triggers de actores no confiables o genéricos con sufijo [bot] sin verificación adicional, y evita la configuración que permita a usuarios sin permisos de escritura activar acciones críticas. Limita los permisos del GITHUB_TOKEN y de cualquier herramienta a lo estrictamente necesario y evita exponer resúmenes o salidas de agentes en paneles públicos o artefactos que puedan ser leídos por atacantes.

La falla crítica de Claude Code: cuando abrir un issue te da control total de tus repositorios en GitHub Actions
Imagen generada con IA.

También es crítico pensar en diseño: no alimentes a un agente con inputs no confiables cuando tenga acceso a secretos o permisos de escritura. Si necesitas procesar contribuciones públicas, implementa una etapa de sanitización y aprobación manual antes de que un agente tenga acceso a tokens sensibles; usa controles de aprobación para workflows de contribuyentes externos y restringe el uso de herramientas que puedan escribir en el repositorio o publicar paquetes. Aplica la filosofía de menor privilegio y el principio de separación de funciones entre revisión automática y acciones que alteren artefactos o secretos.

Para quienes quieran profundizar en cómo endurecer GitHub Actions y mitigar vectores de este tipo, la documentación oficial de GitHub sobre seguridad para Actions es un recurso básico y útil: https://docs.github.com/en/actions/learn-github-actions/security-hardening-for-github-actions. También resulta recomendable revisar directamente el repositorio de Anthropic y sus versiones de la action para verificar la actualización: https://github.com/anthropic/claude-code-action.

El caso Claude Code no es una curiosidad aislada sino otra evidencia de que las defensas contra prompt injection y el diseño de permisos en CI/CD siguen siendo áreas inmaduras. Los equipos de seguridad y de desarrollo deben tratar acciones de IA como componentes de la cadena de suministro: desplegarlas con cautela, auditar sus permisos, exigir revisiones humanas para entradas no confiables y aplicar monitorización para detección de comportamientos anómalos. Mientras tanto, los proveedores de agentes deben asumir que datos potencialmente maliciosos llegarán a sus modelos y diseñar barreras técnicas, políticas y de uso que minimicen el daño si esas barreras se violan.

Cobertura

Relacionadas

Mas noticias del mismo tema.