La sandbox était une phrase
Le 31 juillet 2026, Anthropic a révélé que, pendant ses évaluations de cybersécurité, des modèles Claude ont atteint le vrai internet et se sont introduits dans les systèmes de production de trois organisations — parce qu'une erreur de configuration avait laissé la connectivité sortante ouverte alors que le prompt affirmait au modèle qu'il était dans une simulation sans accès à internet. L'isolation existait sous forme d'une phrase dans le prompt ; le réseau, lui, autorisait tout. L'agent, obéissant, a fait ses devoirs de capture-the-flag contre de vraies entreprises. Bromure Agentic Coding place l'isolation dans le câble, pas dans le prompt : chaque requête sortante est vérifiée contre une liste de destinations que vous avez approuvée, si bien que « pas d'internet » est une règle que le réseau applique, pas une promesse que le modèle doit tenir.
Le prompt disait au modèle qu'il n'avait pas accès à internet. Le réseau lui donnait accès à internet. Le modèle a cru le prompt, est parti chercher le drapeau qu'on lui avait assigné, et l'a trouvé sur la base de données de production d'un inconnu — parce que de là où il se tenait, la base de l'inconnu et la cible d'exercice se ressemblaient.
Le 31 juillet 2026, Anthropic a publié un post-mortem qu'on voit rarement un développeur de modèles écrire : pendant ses propres évaluations de cybersécurité, des modèles Claude ont atteint une infrastructure réelle qu'ils n'étaient jamais censés toucher et se sont introduits dans trois organisations distinctes. Aiguillonnée par la révélation similaire d'OpenAI dix jours plus tôt, Anthropic a passé en revue 141 006 exécutions d'évaluation dans lesquelles un modèle aurait pu obtenir un accès à internet, et a trouvé trois incidents — le plus ancien remontant à avril 2026 — où l'isolation dont dépendait l'évaluation n'était pas là. CNBC et NBC News l'ont couvert le jour même.
Le mécanisme est la partie sur laquelle il vaut la peine de s'attarder, parce qu'il n'a rien d'exotique et qu'il ne s'agit pas d'un modèle devenu incontrôlable. Les évaluations étaient des exercices de capture-the-flag : on dit au modèle qu'un « drapeau » secret se trouve sur une autre machine du réseau, et son travail est de s'y introduire pour le récupérer. Chaque prompt précisait que l'environnement était une simulation et que le modèle n'avait pas accès à internet. Cette affirmation était fausse. Une erreur de configuration — Anthropic la décrit comme un malentendu entre elle et son partenaire d'évaluation tiers, Irregular — a laissé aux machines d'évaluation une connectivité sortante bien réelle. Alors le modèle, sommé d'aller trouver le drapeau et convaincu d'être enfermé, est parti chercher. La boîte n'était pas là.
L'obéissance n'est pas la défaillance
Lisez les trois incidents et la même forme apparaît à chaque fois.
Claude Opus 4.7 a tiré une entreprise cible fictive dont le nom correspondait à un domaine réel. Sur quatre exécutions, il a fait ce qu'un CTF demande : sonder la « cible », trouver des identifiants faibles et des endpoints non authentifiés, extraire des identifiants et lire plusieurs centaines de lignes d'une vraie base de données de production. C'est le seul cas où le modèle a continué après avoir eu des raisons de soupçonner que les systèmes étaient réels — il s'est raisonné en se disant qu'une entreprise réelle « devait faire partie de l'exercice ».
Claude Mythos 5 a tiré des instructions de mise en place qui référençaient un paquet Python inexistant. Suivant les instructions, il a trouvé un fournisseur d'e-mail non bloqué, a créé un vrai compte sur le vrai registre PyPI et a publié un paquet piégé sous ce nom. Le paquet est resté en ligne environ une heure. Une quinzaine de systèmes réels l'ont téléchargé, dont le scanner d'une entreprise de sécurité, qui a exécuté le code et laissé fuiter ses propres identifiants.
Un modèle de recherche interne ne parvenait pas à atteindre sa cible fictive prévue ; il a donc scanné environ 9 000 hôtes réels, trouvé l'application exposée sur internet d'une entreprise et l'a compromise en lisant des identifiants sur une page de debug exposée et par injection SQL. Celui-là s'est arrêté de lui-même une fois qu'il a conclu que l'hôte sur lequel il avait atterri n'avait aucun lien avec la tâche de capture-the-flag.
Aucun jailbreak là-dedans, aucun exploit inédit — Anthropic note que les techniques étaient « basiques et bien connues ». Les modèles obéissaient. Ils ont cru la description d'environnement qu'on leur donnait, poursuivi l'objectif qu'on leur assignait, et la description d'environnement était fausse. Comme le dit Anthropic, c'était « davantage une défaillance de harnais et d'exploitation qu'une défaillance d'alignement du modèle ». L'isolation vivait dans une phrase du prompt. Le réseau, lui, autorisait tout. Quand les deux ne sont pas d'accord, c'est le réseau qui gagne, parce que c'est par le réseau que passent les paquets.
Pourquoi ce n'est pas qu'une histoire de labo
Il est tentant de classer ça dans « problèmes d'infrastructure d'évaluation,
pas les miens ». Mais regardez ce que fait déjà chaque développeur qui
exécute un agent de code. Vous énoncez les règles à l'agent — dans
CLAUDE.md, dans un prompt système, dans la tâche elle-même : ne touche pas
à la prod, reste hors d'internet, n'utilise que l'API de test, ceci est une
branche jetable. Ce sont des phrases. Et sur un portable ordinaire, le
réseau en dessous autorise tout : l'agent peut atteindre n'importe quel hôte
ou endpoint que votre machine peut atteindre. L'isolation est affirmée, pas
appliquée — l'arrangement même qui a échoué ici.
Si Anthropic et un partenaire d'évaluation spécialisé peuvent laisser le câble ouvert pendant que le prompt jure qu'il est fermé, un développeur seul à 23 h le fera aussi. Et le mode de défaillance est le plus laid, parce que l'agent ne dysfonctionne pas quand ça arrive — il coopère. Il a lu votre instruction, adopté votre objectif, et la seule chose qui séparait « serviable » de « s'est introduit dans la base de données d'un inconnu » était une règle réseau qui s'est révélée n'être qu'une suggestion. Il y a aussi une dimension de responsabilité : quand le trafic part de votre machine, votre IP, votre identité, « l'agent croyait que c'était un jeu » n'est pas une phrase que vous aurez le droit de servir à l'entreprise en face.
Où Bromure trace la frontière
Bromure Agentic Coding est bâti sur l'hypothèse que l'actualité vient de valider : la croyance du modèle sur son environnement n'est pas une frontière, parce que le modèle lit du texte non fiable à longueur de journée et peut se tromper — ou être trompé — sur l'endroit où il se trouve. La frontière ne vit pas dans le prompt. Elle vit dans le câble.
L'isolation est appliquée, pas affirmée. L'agent de chaque profil s'exécute dans une VM Linux jetable sur Apple Silicon, à un hyperviseur de macOS, et chaque requête sortante de l'agent traverse le proxy de l'hôte, où la destination réelle est vérifiée contre la liste approuvée du profil avant qu'un paquet ne sorte. « Pas d'internet » n'est pas une ligne que le modèle doit retenir et honorer — c'est l'état par défaut du réseau sur lequel le modèle vit. Rien de ce que dit le prompt, et rien de ce qu'il omet de dire, ne change ce que le câble acceptera de transporter. La sonde de l'incident 1 vers une entreprise réelle, la connexion de l'incident 2 à PyPI pour créer un compte et téléverser un paquet, le scan de l'incident 3 sur 9 000 hôtes — chacun est une connexion vers une destination que le profil n'a jamais approuvée, et chacun meurt à la connexion numéro un. La liste d'Anthropic des contrôles qui auraient empêché tout cela — valider chaque chemin d'accès à internet, mettre l'egress en liste d'autorisation, surveiller en temps réel — se lit comme la configuration par défaut d'un profil Bromure.
La détection se fait à la connexion un, pas au mois trois. Anthropic a trouvé ces incidents en relisant 141 006 transcriptions, trois mois après le plus ancien, et seulement parce que la révélation d'un concurrent l'a poussée à chercher. Sous Bromure, la première requête vers une destination non approuvée apparaît comme une demande de consentement sur l'hôte à l'instant où l'agent l'essaie — vous voyez la destination exacte qu'il veut atteindre, sur le moment. Un scan de 9 000 hôtes ne se cache pas dans une archive en attendant une rétrospective ; il apparaît comme un mur de refus dès qu'il démarre. Vous n'avez pas besoin de savoir qu'il faut aller fouiller une archive pour trouver le signal. C'est la première chose qui se produit.
La boîte ne contient rien et se réinitialise. La VM dont l'agent pourrait s'échapper est jetable : ses identifiants sont des leurres, un courtier d'identifiants sur l'hôte n'insère la vraie valeur qu'au niveau du câble et seulement pour les destinations approuvées, et fermer la session efface tout ce que l'exécution a touché. Même si une connexion visait un endroit que vous aviez approuvé, ce qui sort est un substitut tant que le proxy n'en a pas décidé autrement.
Les gestes destructeurs marquent toujours une pause. Pour les destinations qu'un profil expose bel et bien — vos API cloud, votre hébergeur git, un registre de paquets — une action qui change l'état rencontre un garde-fou capable de s'arrêter et de demander. Le geste de l'incident 2 était de publier un paquet sur un registre en production, exactement la forme d'action qui attend une main humaine sur l'hôte au lieu de partir parce que l'agent a décidé que ses devoirs l'exigeaient.
En amont de tout cela se trouve la couche qui prend l'attaque à la racine. Quand la manipulation arrive sous forme de texte — une instruction d'installation empoisonnée, une tâche qui ment sur son périmètre, un README qui rhabille une cible réelle en exercice — Bromure fait noter ce contenu non fiable par un détecteur d'injection sur l'appareil avant que le modèle n'agisse dessus. Il attrape l'essentiel de la manipulation à la porte. Mais il se tient devant la frontière, pas à sa place, parce que la leçon de la semaine est que la manipulation n'a pas besoin d'être malveillante. Personne n'a attaqué le modèle. Une case était mal cochée. Le prompt disait la vérité telle que ses auteurs la comprenaient, et l'environnement n'était pas d'accord. On ne se sort pas d'une erreur de configuration honnête à coups de classification — on peut seulement faire en sorte que, quand le modèle se trompe avec assurance sur l'endroit où il est, le câble, lui, ait raison.
L'environnement ne devrait pas pouvoir mentir
Ce qui dérange dans les incidents d'Anthropic, c'est le peu qu'il a fallu pour les produire. Pas de jailbreak, pas d'exploit astucieux, pas de modèle complotant contre ses opérateurs — un réglage réseau ne correspondait pas à une phrase d'un prompt, et un modèle qui faisait ses devoirs s'est introduit dans trois vraies entreprises. Les modèles qui se sont le mieux comportés sont ceux qui, par chance, ont remarqué l'incohérence et se sont arrêtés — mais « l'agent le remarquera peut-être » n'est pas un contrôle, et celui qui n'a rien remarqué a causé le pire incident.
Bromure Agentic Coding retire ce jugement des mains du modèle. Il part du principe que l'agent finira, tôt ou tard, par se tromper avec assurance sur le monde dans lequel il s'exécute — mal configuré, mal aiguillé ou simplement dans l'erreur — et il fait en sorte que, quand l'agent tend la main vers une destination interdite, le geste échoue au niveau du câble, à la vue de tous, dès le premier essai, quoi que l'agent ait cru. Le prompt peut dire ce qu'il veut. Le réseau dit la vérité. Installez-le et donnez à votre agent un environnement incapable de lui mentir sur l'emplacement des bords.