Anthropic puso un agente de IA con acceso a secrets en su pipeline de CI/CD. Microsoft mostró cómo robar todo en dos pasos. No es una hipótesis: es una vulnerabilidad estructural documentada, con proof-of-concept funcional y 50 bypasses en el sistema de permisos. En Tech86 vimos los incidentes de prompt injection en agentes de IA crecer exponencialmente este año. El caso de la GitHub Action de Claude Code es el más revelador porque el problema no es un bug, es el diseño.
Dos caminos, uno sin sandbox
Claude Code tiene dos caminos de ejecución. El Bash tool corre en un sandbox Bubblewrap con limpieza de entorno: la variable CLAUDE_CODE_SUBPROCESS_ENV_SCRUB elimina credenciales del entorno antes de la ejecución. El Read tool, que lee archivos, no tenía sandbox. La llamada es in-process, directa, evadiendo por completo el Bubblewrap.
El resultado: el Read tool accedía a /proc/self/environ y leía ANTHROPIC_API_KEY en texto claro. El sandbox que protegía el Bash era irrelevante para el Read. Anthropic protegió la puerta principal y dejó la ventana abierta.
Pero leer la clave es solo la mitad del problema. Microsoft construyó un payload que derrotó dos defensas simultáneamente.
Los dos pasos de Microsoft: derrotando filtro y scanner
El primer obstáculo: el filtro de Claude rechaza imprimir claves que empiezan con sk-ant-. El payload instruye al modelo: "corta los primeros 7 caracteres de la clave". El LLM obedece, emitiendo la clave sin el prefijo. La salida pasa el filtro porque no contiene el patrón bloqueado.
El segundo obstáculo: el GitHub Secret Scanner enmascara patrones conocidos en el stdout. Pero como el LLM modificó la clave antes de emitirla, eliminando el prefijo, el scanner no la detectó. El texto que llega al log no es una clave válida. El atacante reconstruye la clave completa anteponiendo sk-ant- desde afuera.
Exfiltración vía WebFetch, Bash, GitHub MCP o logs de la Action. Cualquier canal de salida del agente funciona. Microsoft probó que dos capas de defensa, el filtro del modelo y el scanner de la plataforma, son derrotadas cuando el atacante controla lo que el modelo emite.
RyotaK: 50 bypasses y el bot que se volvió admin
El 1 de junio, RyotaK de GMO Flatt Security publicó 50 bypasses en el sistema de permisos de Claude Code. El más impactante: un bot falso con nombre terminado en [bot] evadió la verificación de permiso. La Action confía automáticamente en cualquier GitHub App, sin validación de identidad.
Con ese bypass, exfiltró tokens OIDC y obtuvo un installation token con escritura total en el repositorio. Si el ataque se dirigiera al propio repositorio de Anthropic, envenenaría la Action usada por miles de proyectos. Un supply chain attack a escala, sin tocar un solo paquete npm.
El ejemplo oficial de Anthropic venía con allowed_non_write_users: "*". Muchos lo copiaron. Cualquier usuario sin permiso de escritura tenía acceso total. En febrero, un ataque similar en Cline robó el npm publish token y empujó @openclaw/cli sin autorización. 4 mil desarrolladores afectados en 8 horas. Corregido en la v1.0.94. CVSS 7.8. Bounty de 4.800 dólares, según reportes de la comunidad de seguridad.
Comment and Control: el mismo patrón en tres agentes
Investigadores académicos documentaron en abril el patrón "Comment and Control": el mismo vector de ataque funciona en Claude Code, en Gemini CLI Action y en Copilot Agent. Todos vulnerables.
En el Copilot Agent, comentarios HTML ocultos, invisibles para humanos en la interfaz de GitHub, contenían instrucciones codificadas en base64 que evadieron el secret scanner. Exfiltración vía git push hacia un repositorio controlado por el atacante. El agente lee el comentario, decodifica la instrucción, ejecuta y envía los datos hacia afuera.
Claude Code: CVSS 9.4 Critical, según el reporte del investigador. Anthropic habría rebajado a "None" con un bounty de 100 dólares. Para contexto: Google pagó 1.337 dólares por el mismo tipo de vulnerabilidad en Gemini, según reportes públicos. GitHub pagó 500 por Copilot, según reportes públicos. Anthropic pagó 100 y lo clasificó como inexistente. Rebajar un CVSS 9.4 a "None" con un bounty de 100 dólares envía la señal equivocada a los investigadores y a la industria.
La Agents Rule of Two: el principio que faltaba
Microsoft formuló la "Agents Rule of Two": un workflow de IA nunca debe tener los tres simultáneamente, procesamiento de input no confiable, acceso a secrets vía tools y capacidad de comunicarse externamente. Si dos ya existen, el tercero no puede agregarse.
Esto es fundamental porque el prompt injection no es un bug del modelo: es contexto que el agente fue diseñado para procesar. Los PR titles y los issue comments son datos legítimos del SDLC que el agente necesita leer. El atacante secuestra el contexto dentro de los límites del workflow previsto. No hay patch para "el agente lee lo que debería leer".
Estamos entrando en una era donde el lenguaje natural es código ejecutable, y los inputs no confiables como los GitHub issues deben tratarse como hostiles por defecto. La Rule of Two es el Principle of Least Privilege aplicado a agentes autónomos: si el agente necesita leer issues, no le dé acceso a secrets. Si necesita secrets, no permita comunicación externa. Si necesita comunicarse, no procese input no confiable.
En Tech86 aplicamos este principio en toda integración de IA en CI/CD. Auditamos workflows, aislamos las tools con acceso a credenciales y tratamos todo input del SDLC como no confiable. Si su equipo usa agentes de IA en pipelines sin esa separación, el ataque de Microsoft no es un escenario hipotético, es el próximo incidente.
Continúa en el tema
Segurança de Agentes de IA: Prompt Injection, Worms e Supply Chain →