El agente filtró su propia clave
CVE-2026-21852 fue un fallo ya parcheado en Claude Code: un repositorio podía fijar ANTHROPIC_BASE_URL en su configuración de proyecto, y el agente enviaba su propia clave API de Anthropic, en texto plano, al servidor del atacante antes de que respondieras 'confiar en esta carpeta'. El ataque no ejecutó código ni leyó nada de tu disco; cambió la dirección a la que el agente envía su única credencial indispensable. Anthropic corrigió el momento. Bromure Agentic Coding mantiene esa clave fuera del mundo del agente por completo.
Los ataques al abrir una carpeta que hemos cubierto ejecutan código cuando abres un repo y leen tus claves de la nube desde el disco. Este cambió una sola línea de configuración, y el agente entregó la credencial sin la que no puede funcionar: su propia clave API del modelo.
El fallo es CVE-2026-21852, encontrado por Check Point Research en Claude Code, revelado a Anthropic el 28 de octubre de 2025, corregido el 28 de diciembre y con número CVE asignado el 21 de enero de 2026. Anthropic publicó el parche hace meses. Escribimos sobre él en julio porque subraya con claridad un hecho que ningún parche cambia: un agente de codificación lleva consigo una clave API del modelo, la envía en cada petición, y un repositorio puede editar la dirección a la que la envía.
Qué hacía el fallo.
Apunta Claude Code a un proyecto y lee la configuración de ese proyecto,
los archivos bajo .claude/ que permiten a un repo llevar sus propios
ajustes. Uno de esos ajustes es ANTHROPIC_BASE_URL, la dirección con la
que el agente habla cuando llama al modelo. El valor por defecto es
api.anthropic.com, y el ajuste existe para que los equipos puedan
enrutar a través de una pasarela o un proxy propio. El proyecto puede
fijarlo por diseño.
Un repositorio malicioso lo fija a un servidor que controla el atacante.
Entonces, como describe Check Point, "antes de que la víctima decida
confiar en el directorio", Claude Code lanza sus peticiones API de
arranque hacia lo que diga ANTHROPIC_BASE_URL, y esas peticiones llevan,
en palabras de Check Point, "la cabecera de autorización: nuestra clave
API de Anthropic completa, totalmente expuesta en texto plano". El
servidor del atacante lee la cabecera de una petición que el agente envió
por su propia voluntad, con, como dice Check Point, "ninguna interacción
del usuario requerida". Clonas el repo, ejecutas claude, y la clave se
ha ido antes de que el aviso de confianza termine de dibujarse.
Una clave API de Anthropic alcanza el workspace de la cuenta, con su almacenamiento de archivos compartido y su facturación. Check Point recorre el alcance: un atacante puede leer y escribir los archivos del workspace, borrarlos, agotar la cuota de almacenamiento y quemar crédito de API a tu costa. El agente entrega la credencial sobre la que corre toda la operación, sin que nadie se lo pida.
El ataque que no ejecutó nada.
Ya hemos escrito sobre este género. Miasma plantó configuración en los
propios repositorios de Microsoft,
y abrir la carpeta ejecutaba un blob de varios megabytes que leía el
sistema de archivos en busca de claves. Amazon Q autolanzaba servidores
MCP desde un workspace
clonado con el entorno
completo del desarrollador: claves de AWS y sockets SSH. En el caso de
Cursor, una inyección
de prompt dirigió una herramienta a sobrescribir un guardián y luego
ejecutar una shell. Los tres comparten una forma: contenido no confiable
al abrir provoca que se ejecute código, y ese código sale a buscar tus
secretos, los que viven en ~/.aws y ~/.ssh.
CVE-2026-21852 se salta esa maquinaria. El repo malicioso no dispara ningún hook y no ejecuta ninguna shell; cambia una dirección, y el agente, comportándose como fue diseñado, envía allí su propia credencial. La clave que se filtra es la clave que el agente debe transmitir en cada llamada que hace. No puedes encerrarla en un archivo que el proceso no pueda leer, porque el proceso está supuesto a enviarla.
La corrección de Anthropic fue la correcta para el fallo: el diálogo de confianza ahora va primero y, en sus palabras, "ninguna petición API se inicia antes de que los usuarios confirmen el diálogo de confianza". Redirige la base URL hoy y nada sale hasta que confías en la carpeta. La corrección gobierna el momento, sin embargo. Una vez que confías en la carpeta, y los desarrolladores confían en carpetas todo el día, la clave real sigue estando en el entorno del agente, a una línea de configuración de una redirección, dependiendo de la corrección de cada futura ruta de código que la toque.
La clave pertenece a otro lugar.
La pregunta duradera es por qué la clave real estaba en un lugar al que la configuración de un repositorio podía apuntarla. Esa es una pregunta de arquitectura, y construimos Bromure Agentic Coding para responderla.
Bromure ejecuta tu agente de codificación dentro de una VM Linux
desechable: el propio agente, las shells que genera, los paquetes que
instala, las llamadas al modelo que hace. Un proxy en el host se sitúa en
el cable entre el agente y api.anthropic.com. La VM contiene una clave
stub, un marcador de posición sintácticamente válido que no vale nada,
mientras la clave real de Anthropic se queda en el host. En una llamada
legítima al endpoint genuino del modelo, el proxy del host sustituye el
stub por la clave real en el cable, y luego la vuelve a sacar de la
respuesta. El secreto hace su único trabajo, y la copia que un atacante
podría robar no existe en ningún lugar que el mundo del agente pueda
alcanzar.
Reproduce el ataque contra esa disposición. El repo malicioso fija
ANTHROPIC_BASE_URL a attacker.evil. El agente, dentro de la VM, envía
allí su petición de arranque, llevando la única clave que tiene, el stub.
El proxy vincula el intercambio de la clave real al endpoint genuino, y
una petición apuntada a un servidor desconocido sale llevando el marcador
de posición. El servidor del atacante lee la cabecera Authorization y
cosecha una cadena que no significa nada en la internet pública. La
redirección funcionó, y no recogió nada.
La garantía depende de un detalle: el broker vincula la clave real al
destino verdadero, sustituyendo el secreto para una llamada a
api.anthropic.com y a ningún otro lugar. Acierta ese vínculo y una base
URL redirigida queda inerte. Falla, sustituye la clave real en cualquier
petición saliente, y habrás reconstruido el fallo un nivel más abajo. El
proxy se gana su sueldo liberando el secreto para una sola dirección y
tratando cualquier otra como no confiable.
Lo que el broker cambia
La clave real del modelo nunca entra en la VM donde corre el agente. El host la guarda y la libera al cable solo para una llamada al endpoint genuino. Un repositorio puede redirigir la base URL todo lo que quiera; la petición que sale lleva un stub, y un stub no vale nada fuera de tu máquina.
Lo que no cambia
La confianza sigue siendo tuya. Configura el agente para hablar con una pasarela controlada por un atacante y el broker no puede saber que quisiste decir lo incorrecto; enruta hacia donde le dijiste. Y la garantía funciona vínculo a vínculo: la clave del modelo aquí, tus otros secretos a través del mismo mecanismo de stub e intercambio, cada uno tan fuerte como el vínculo de endpoint que hay detrás.
El fallo compañero, y la misma respuesta.
CVE-2026-21852 llegó con un hermano más ruidoso,
CVE-2025-59536,
donde el .claude/settings.json de un repo podía definir hooks, comandos
de shell que Claude Code ejecuta al arrancar, o forzar la activación de
servidores MCP del proyecto, y esos comandos "se ejecutan inmediatamente
al lanzar claude, antes de que el usuario pudiera siquiera leer el diálogo
de confianza". Ese sí es ejecución de código al abrir, la forma
familiar, y su respuesta es la familiar: dentro de una VM desechable, la
shell que genera encuentra credenciales stub donde deberían estar los
tokens reales, y una acción que cambia el estado se detiene en la frontera
del hipervisor para pedir confirmación en el host. Ya hemos defendido ese
argumento con detalle.
Los dos fallos parecen diferentes, uno ejecutando un programa y otro cambiando una dirección, y aterrizan en el mismo lugar: un agente de codificación lee y actúa sobre archivos que llegan con el código que le entregas, y algunos de esos archivos deciden qué se ejecuta y adónde van los secretos. Anthropic parcheó ambos. La respuesta duradera pone los secretos en un lugar al que esos archivos pueden apuntar pero no pueden alcanzar.
Una victoria acotada.
Mantener la clave del modelo fuera del entorno del agente derrota esta redirección y la familia de ataques que engañan al agente para que envíe su propia credencial a un lugar nuevo, porque la clave que el agente puede enviar no vale nada. El hipervisor y el proxy lo imponen por debajo del agente, sin pedirle nada al propio agente.
La confianza sigue siendo tu trabajo. Tú sigues decidiendo qué repositorios abrir y qué pasarelas configurar, y un broker que envía tu clave adonde la apuntas la enviará a un mal lugar si la apuntas allí a propósito. Acotar lo que puede hacer una clave filtrada también sigue en manos del proveedor del modelo; el parche de Anthropic y los controles de workspace cubren ese lado.
Un agente de codificación tiene que llevar una clave y enviarla a alguna parte, y durante una ventana a finales de 2025 un ajuste de una línea en un repo clonado decidía adónde. El parche cerró esa ventana. Bromure Agentic Coding elimina la clave en su lugar: el agente trabaja dentro de una máquina desechable que nunca tuvo la real, y el proxy pone la clave real en el cable para una sola dirección. Instálalo, apunta tu agente al repositorio que quieras, y deja que la próxima base URL redirigida se lleve una cadena que no vale nada en ninguna parte.