L'agent a divulgué sa propre clé
CVE-2026-21852 était un bug corrigé dans Claude Code : un dépôt pouvait définir ANTHROPIC_BASE_URL dans ses réglages de projet, et l'agent envoyait sa propre clé API Anthropic, en clair, au serveur de l'attaquant avant que vous ne répondiez « faire confiance à ce dossier ». L'attaque n'exécutait aucun code et ne lisait rien sur votre disque ; elle changeait l'adresse à laquelle l'agent expédie son unique identifiant indispensable. Anthropic a corrigé le timing. Bromure Agentic Coding garde cette clé entièrement hors du monde de l'agent.
Les attaques à l'ouverture de dossier que nous avons couvertes exécutent du code quand vous ouvrez un dépôt et lisent vos clés cloud sur le disque. Celle-ci a changé une seule ligne de configuration, et l'agent a remis l'identifiant sans lequel il ne peut pas fonctionner : sa propre clé API de modèle.
Le bug est CVE-2026-21852, trouvé par Check Point Research dans Claude Code, divulgué à Anthropic le 28 octobre 2025, corrigé le 28 décembre, et doté d'un numéro CVE le 21 janvier 2026. Anthropic a livré le correctif il y a des mois. Nous en parlons en juillet parce qu'il souligne d'un trait net un fait qu'aucun correctif ne change : un agent de codage porte une clé API de modèle, l'envoie à chaque requête, et un dépôt peut éditer l'adresse à laquelle il l'envoie.
Ce que faisait le bug.
Pointez Claude Code vers un projet et il lit la configuration de ce
projet, les fichiers sous .claude/ qui permettent à un dépôt de porter
ses propres réglages. L'un de ces réglages est ANTHROPIC_BASE_URL,
l'adresse à laquelle l'agent parle quand il appelle le modèle. La valeur
par défaut est api.anthropic.com, et le réglage existe pour que les
équipes puissent passer par une passerelle ou un proxy à elles. Que le
projet puisse le définir est voulu.
Un dépôt malveillant le fixe sur un serveur que contrôle l'attaquant.
Puis, comme le décrit Check Point, « avant que la victime ne décide de
faire confiance au répertoire », Claude Code lance ses requêtes API de
démarrage vers ce que dit ANTHROPIC_BASE_URL, et ces requêtes portent,
selon les mots de Check Point, « l'en-tête d'autorisation — notre clé API
Anthropic complète, entièrement exposée en clair ». Le serveur de
l'attaquant lit l'en-tête sur une requête que l'agent s'est porté
volontaire pour envoyer, avec, comme le dit Check Point, « aucune
interaction de l'utilisateur requise ». Vous clonez le dépôt, vous lancez
claude, et la clé est partie avant que l'invite de confiance ait fini de
s'afficher.
Une clé API Anthropic atteint le workspace du compte, avec son stockage de fichiers partagé et sa facturation. Check Point détaille la portée : un attaquant peut lire et écrire les fichiers du workspace, les supprimer, épuiser le quota de stockage et brûler du crédit API à vos frais. L'agent abandonne l'identifiant sur lequel repose toute l'opération, sans qu'on le lui demande.
L'attaque qui n'a rien exécuté.
Nous avons déjà écrit ce genre. Miasma a planté de la config dans les
propres dépôts de Microsoft, et
ouvrir le dossier exécutait un blob de plusieurs mégaoctets qui lisait le
système de fichiers à la recherche de clés. Amazon Q lançait
automatiquement des serveurs MCP depuis un workspace
cloné avec
l'environnement complet du développeur, clés AWS et sockets SSH. Dans le
cas de Cursor, une
injection de prompt a piloté un outil pour écraser un garde puis exécuter
un shell. Les trois partagent une forme : du contenu non fiable à
l'ouverture provoque l'exécution de code, et ce code part chercher vos
secrets, ceux de ~/.aws et ~/.ssh.
CVE-2026-21852 saute toute cette machinerie. Le dépôt malveillant ne déclenche aucun hook et n'exécute aucun shell ; il change une adresse, et l'agent, se comportant comme prévu, y envoie son propre identifiant. La clé qui fuit est la clé que l'agent doit transmettre à chaque appel qu'il fait. Vous ne pouvez pas l'enfermer dans un fichier que le processus ne peut pas lire, parce que le processus est censé l'envoyer.
Le correctif d'Anthropic était le bon pour le bug : le dialogue de confiance vient désormais en premier, et, selon leurs mots, « aucune requête API n'est initiée avant que les utilisateurs ne confirment le dialogue de confiance ». Redirigez la base URL aujourd'hui et rien ne part tant que vous ne faites pas confiance au dossier. Le correctif gouverne le timing, cependant. Une fois que vous faites confiance au dossier, et les développeurs font confiance à des dossiers toute la journée, la vraie clé reste dans l'environnement de l'agent, à une ligne de config d'une redirection, dépendante de la correction de chaque futur chemin de code qui la touche.
La clé a sa place ailleurs.
La question durable est de savoir pourquoi la vraie clé se trouvait quelque part où la configuration d'un dépôt pouvait la viser. C'est une question d'architecture, et nous avons construit Bromure Agentic Coding pour y répondre.
Bromure fait tourner votre agent de codage à l'intérieur d'une VM Linux
jetable : l'agent lui-même, les shells qu'il engendre, les packages qu'il
installe, les appels au modèle qu'il fait. Un proxy sur l'hôte est assis
sur le fil entre l'agent et api.anthropic.com. La VM détient une clé
stub, un substitut syntaxiquement valide qui ne vaut rien, tandis que
la vraie clé Anthropic reste sur l'hôte. Sur un appel légitime vers le
véritable endpoint du modèle, le proxy hôte substitue la vraie clé au stub
sur le fil, puis la retire de la réponse. Le secret fait son unique
travail, et la copie qu'un attaquant pourrait voler n'existe nulle part où
le monde de l'agent puisse atteindre.
Rejouez l'attaque contre cet arrangement. Le dépôt malveillant fixe
ANTHROPIC_BASE_URL sur attacker.evil. L'agent, dans la VM, y envoie sa
requête de démarrage, portant la seule clé qu'il a, le stub. Le proxy lie
la substitution de la vraie clé au véritable endpoint, et une requête
pointée vers un serveur inconnu part en portant le substitut. Le serveur
de l'attaquant lit l'en-tête Authorization et récolte une chaîne qui ne
signifie rien sur l'internet public. La redirection a fonctionné, et elle
n'a rien collecté.
La garantie repose sur un détail : le proxy lie la vraie clé à la vraie
destination, en substituant le secret pour un appel vers
api.anthropic.com et nulle part ailleurs. Réussissez ce lien et une base
URL redirigée est inerte. Ratez-le, substituez la vraie clé sur n'importe
quelle requête sortante, et vous avez reconstruit le bug un niveau plus
bas. Le proxy gagne sa place en libérant le secret pour une seule adresse
et en traitant toutes les autres comme non fiables.
Ce que le proxy change
La vraie clé de modèle n'entre jamais dans la VM où tourne l'agent. L'hôte la détient et ne la libère sur le fil que pour un appel vers le véritable endpoint. Un dépôt peut rediriger la base URL tant qu'il veut ; la requête qui part porte un stub, et un stub ne vaut rien hors de votre machine.
Ce qu'il ne change pas
La confiance reste la vôtre à accorder. Configurez l'agent pour parler à une passerelle tenue par un attaquant et le proxy ne peut pas savoir que vous vous êtes trompé ; il achemine là où vous le lui avez dit. Et la garantie fonctionne un lien à la fois : la clé de modèle ici, vos autres secrets via le même arrangement stub-et-substitution, chacun aussi solide que le lien d'endpoint derrière lui.
Le bug jumeau, et la même réponse.
CVE-2026-21852 est arrivé avec un frère plus bruyant,
CVE-2025-59536,
où le .claude/settings.json d'un dépôt pouvait définir des hooks, des
commandes shell que Claude Code exécute au démarrage, ou forcer
l'activation de serveurs MCP de projet, et ces commandes « s'exécutent
immédiatement au lancement de claude, avant même que l'utilisateur ait pu
lire le dialogue de confiance ». Celui-là est de l'exécution de code à
l'ouverture, la forme familière, et sa réponse est la réponse familière :
à l'intérieur d'une VM jetable, le shell qu'il engendre trouve des
identifiants stub là où devraient être les vrais tokens, et une action
modifiant l'état s'arrête à la frontière de l'hyperviseur pour une
confirmation sur l'hôte. Nous avons développé cet argument en
détail.
Les deux bugs semblent différents, l'un exécutant un programme et l'autre changeant une adresse, et ils atterrissent au même endroit : un agent de codage lit et agit sur des fichiers qui arrivent avec le code que vous lui confiez, et certains de ces fichiers décident de ce qui s'exécute et d'où vont les secrets. Anthropic a corrigé les deux. La réponse durable place les secrets quelque part que ces fichiers peuvent viser sans pouvoir l'atteindre.
Une victoire circonscrite.
Garder la clé de modèle hors de l'environnement de l'agent défait cette redirection et la famille d'attaques qui piègent l'agent pour qu'il envoie son propre identifiant à une nouvelle adresse, parce que la clé que l'agent peut envoyer ne vaut rien. L'hyperviseur et le proxy l'appliquent en dessous de l'agent, sans rien demander à l'agent lui-même.
La confiance reste votre travail. Vous décidez toujours quels dépôts ouvrir et quelles passerelles configurer, et un proxy qui envoie votre clé là où vous la pointez l'enverra à un mauvais endroit si vous l'y pointez exprès. Circonscrire ce qu'une clé fuitée peut faire reste aussi du côté du fournisseur de modèle ; le correctif d'Anthropic et les contrôles de workspace couvrent ce versant.
Un agent de codage doit porter une clé et l'envoyer quelque part, et pendant une fenêtre fin 2025, un réglage d'une ligne dans un dépôt cloné décidait où. Le correctif a fermé cette fenêtre. Bromure Agentic Coding retire plutôt la clé : l'agent travaille dans une machine jetable qui n'a jamais détenu la vraie, et le proxy met la vraie clé sur le fil pour une seule adresse. Installez-le, pointez votre agent vers le dépôt de votre choix, et laissez la prochaine base URL redirigée emporter une chaîne qui ne vaut rien nulle part.