Ils ont ajouté votre agent à la liste
Gen Digital a publié le 8 septembre une étude montrant que huit familles de voleurs d'informations grand public collectent désormais les données locales des agents de codage IA : jetons d'accès et de rafraîchissement, configurations MCP, bases de conversations, historiques d'invites, traces de projets. Aucune faille de Claude, Cursor ou Codex n'est en cause. Ces voleurs embarquent des règles de collecte pilotées à distance : ajouter le dossier de votre agent n'a été qu'une mise à jour de configuration poussée vers des machines déjà infectées. Bromure Agentic Coding déplace ce dossier dans une VM et le remplit de faux brm-, et garde le jeton de rafraîchissement sur l'hôte, là où l'invité ne peut jamais le détenir.
Votre agent de codage n'a aucun bogue à trouver. Quelqu'un a remarqué où il range ses fichiers, et a poussé une seule nouvelle ligne de configuration vers quelques centaines de milliers de machines déjà compromises.
Le 8 septembre, Jan Rubín, qui dirige l'équipe de recherche sur les menaces de Gen Digital, a publié un court billet au constat sans éclat. Huit familles distinctes de logiciels voleurs d'informations grand public collectent désormais les données locales des agents de codage IA. Ils copient des fichiers. C'est toute la technique.
Les cibles nommées se lisent comme un sondage sur ce que les développeurs ont installé cette année : Claude, Cline, Codex, Continue, Cursor, OpenCode, Kilo. Amatera s'en est pris à Cline et Continue. Remus s'en est pris à Claude, Cursor et OpenCode. CallbackBeaver a ajouté Cursor et Claude, et Gen en a compté plus de 5 000 échantillons sur une fenêtre de trente jours. BeeStealer, STG Stealer, HydraStealer, APEX Stealer et Otter Stealer font tous une version de la même chose. Sur macOS, la variante s'appelle Djinn Stealer, et sa liste est la plus longue : Claude, Codex, Gemini, Cline, OpenCode, Kilo.
Rubín est précis sur ce qu'il décrit. « L'activité ne pointe pas vers une faille nouvellement découverte dans Claude, Cursor ou Codex », écrit-il. « Elle montre plutôt des criminels qui adaptent des voleurs déjà établis pour collecter des fichiers de valeur rangés dans des dossiers locaux prévisibles. »
La liste a gagné une ligne
Le changement n'a presque rien coûté à ses auteurs.
Les voleurs modernes ne codent pas en dur ce qu'ils prennent. Ils sont livrés avec des règles de collecte pilotées à distance : un bloc de configuration listant des dossiers, des noms de fichiers, des bases de données, des extensions et des limites de recherche, récupéré depuis l'infrastructure de l'opérateur. Ajouter une nouvelle cible, comme Cyber Press l'a résumé, signifie que les opérateurs « ajoutent les nouveaux outils d'IA populaires aux listes de collecte du logiciel malveillant en mettant à jour des chemins, des noms de fichiers ou des règles de base de données, sans nécessairement reconstruire le logiciel malveillant ».
C'était une décision produit. Quelqu'un a regardé quels dossiers contiennent désormais quelque chose qui se vend, a écrit quelques chemins dans une configuration, et les machines qui faisaient déjà tourner l'une de ces familles ont commencé à expédier les données des agents dès leur prochain contact. Les opérateurs n'ont réinfecté personne. Le binaire sur le disque n'a pas bougé, la signature de détection non plus.
Gen a enregistré des détections de voleurs d'informations chez 3,3 millions d'utilisateurs protégés uniques au premier semestre 2026, avec des totaux mensuels au-dessus de 500 000. Amatera et Remus à eux seuls sont apparus chez des dizaines de milliers d'utilisateurs en trois mois. C'est à cette population que les opérateurs ont poussé la nouvelle règle.
Ce qu'il y a dans ce dossier
L'inventaire de Gen sur ce que collectent les règles est précis : « jetons d'accès et de rafraîchissement, identifiants stockés dans les configurations MCP, historiques d'invites, bases de conversations, détails de compte, et traces des projets sur lesquels un développeur a travaillé ».
Cette liste range deux pertes de nature différente sous un même nom.
La première, c'est l'accès. Un jeton d'accès achète une session. Un jeton de rafraîchissement achète des sessions, au pluriel, aussi longtemps qu'il reste valide, parce que quelqu'un l'a conçu pour survivre à la session dont il vient. C'est cette propriété qui en fait un objet de vol, et c'est pourquoi révoquer une session laisse le voleur là où il était. Juste à côté, dans le même dossier, se trouvent les identifiants de votre configuration MCP, qui ouvrent encore autre chose : un service interne, un système de tickets, une base de données derrière un serveur MCP en HTTP.
La seconde perte, c'est du renseignement, et elle est plus récente. Votre historique d'invites est une visite guidée de l'infrastructure de votre employeur. Cyber Press l'a dit sans détour : les historiques d'invites volés révèlent « des noms de dépôts, des noms d'hôtes internes, des détails d'infrastructure, des contrôles de sécurité, des secrets d'API et des plans commerciaux ». Un mardi, vous tapez le nom du service, le nom du cluster, la raison pour laquelle la migration est bloquée, puis vous collez l'extrait qui contient la chaîne de connexion pour demander pourquoi ça échoue sans arrêt. Vous n'avez jamais écrit de modèle de menaces pour votre propre journal de conversation.
Il arrive par un résultat de recherche
Poser le voleur ne demande pas non plus de faille zero-day. En mai, EclecticIQ a
documenté une campagne qui
a classé de fausses pages d'installation au-dessus des vraies :
claudecode.co.com et geminicli.co.com, imitant la documentation de l'éditeur
d'assez près pour passer au premier coup d'œil. La page vous tend une ligne
PowerShell à copier. Vous l'exécutez et vous obtenez l'outil que vous vouliez,
installé au grand jour, pendant qu'une seconde commande cachée tire un voleur
sans fichier directement en mémoire. Il éteint ETW et AMSI au passage, puis
moissonne les navigateurs, Slack, Teams, Discord, les clients VPN, les clés SSH
et les chemins de stockage cloud. Le même acteur a joué le même coup contre
Node.js, Chocolatey, KeePassXC et Monero.
La victime, donc, c'est le développeur qui a cherché un agent de codage et cliqué sur le premier résultat. Quatre mois plus tard, ce développeur livre aussi les jetons et l'historique de conversation de l'agent, parce que la règle de collecte a gagné une ligne.
Le même balayage, dans un espace de travail Bromure
Bromure Agentic Coding fait tourner chaque agent de codage dans une VM Linux à virtualisation matérielle sur votre Mac et garde tous les vrais secrets du côté hôte de cette frontière. Reprenez la liste de collecte de Gen point par point et passez-la sur un espace de travail. Supposez que le voleur gagne sur l'hôte, lise la règle, et parte chercher chaque chose.
Jetons d'accès et de rafraîchissement. Si vous utilisez un abonnement Claude
ou ChatGPT plutôt qu'une clé d'API, la connexion n'a jamais lieu dans votre VM de
travail. Bromure démarre une VM d'enregistrement jetable, sans dossier de travail
monté et sans table de substitution d'identifiants, y exécute le vrai
claude login, capture sur l'hôte les jetons OAuth obtenus, les chiffre, et
détruit la VM. Ensuite, l'invité tourne en mode clé d'API avec un identifiant
bidon déterministe : une fausse ANTHROPIC_API_KEY pour Claude, un
~/.codex/auth.json semé d'un faux JWT à expiration très lointaine pour Codex,
afin que le client n'essaie jamais de le rafraîchir lui-même. C'est l'hôte qui
rafraîchit, environ cinq minutes avant l'expiration, une fois pour chaque VM en
cours d'exécution. Le manuel énonce la conséquence sans détour : l'invité ne
détient jamais de jeton de rafraîchissement.
Identifiants stockés dans les configurations MCP. Le bearer MCP reçoit le
même traitement, et le panneau de réglages le dit. Le vrai jeton d'un serveur MCP
en transport HTTP reste sur l'hôte, la configuration que lit l'agent reçoit un
espace réservé brm-mcp_…, et le proxy substitue la vraie valeur sur le fil,
avec une portée exacte-ou-sous-domaine limitée à l'hôte de ce serveur et à rien
d'autre. Le champ du panneau MCP porte la légende Jamais envoyé à la VM —
substitué par le proxy.
Tout le reste qui ressemble à une clé. Chaque identifiant que vous configurez
est remplacé dans la VM par un faux qui préserve la structure, dérivé de la vraie
valeur et d'un sel propre à l'installation, si bien qu'il garde la forme
qu'attendent les validateurs et reste stable d'une session à l'autre :
sk-ant-api03-brm-…, sk-brm-…, xai-brm-…, brm-k8s-…, brm-docker-…,
brm-db-…. Le canal de substitution ne va que dans un sens. L'hôte peut écrire
des faux dans l'invité ; il n'existe aucun appel par lequel l'invité redemande
une vraie valeur, et l'agent dans la VM refuse d'écrire tout identifiant qui ne
porte pas le préfixe brm-.
Bases de conversations, historiques d'invites, références de projets, source en cache. Ceux-là sont réels et durables, parce que le travail de code a besoin d'un état durable. Ils vivent dans le dossier personnel persistant de la VM de l'espace de travail, un par espace de travail, derrière l'hyperviseur, et non dans le dossier personnel macOS que nomme la règle de collecte. Une règle qui dit « copier le répertoire de configuration de l'agent depuis le profil utilisateur » trouve un profil utilisateur sans agent dedans.
Le magasin de l'hôte lui-même. Ce que garde l'hôte est chiffré au repos en
AES-GCM sous une clé maîtresse de 256 bits propre à l'installation, qui vit dans
le trousseau macOS Data Protection, cantonnée à l'identité de signature de
l'application, avec la synchronisation iCloud désactivée. L'application n'envoie
et ne synchronise rien. Copiez le dossier Application Support, ou restaurez-en
une sauvegarde Time Machine : sans l'entrée de trousseau de ce Mac, vous avez du
chiffré.
Quand le balayage a lieu dans la VM
Un voleur peut aussi arriver par l'autre bout : tiré par l'agent lui-même, via une dépendance ou une instruction empoisonnée, et exécuté dans l'espace de travail. Le balayage réussit alors, et il collecte des faux. C'est à l'envoi que ça casse.
Chaque faux a une seule famille de destinations légitimes, la portée d'hôte pour laquelle il a été frappé, alors le proxy inspecte chaque requête sortante, en-têtes et corps, avec un automate d'Aho-Corasick assez peu coûteux pour tourner sur tout, à la recherche d'un faux qui partirait là où il n'a rien à faire. En cas de correspondance, il refuse la requête avec un HTTP 451 sans transmettre un octet, met la VM en pause sur-le-champ, et lève une alerte proposant Arrêter, Conserver pour investigation (exporter d'abord le disque, le dossier personnel et les dossiers partagés pour l'analyse), ou Continuer à vos risques. L'événement atterrit en ligne rouge Credential brokering dans la Security Timeline, l'application marque l'espace de travail comme compromis, et le lancement suivant exige Effacer et lancer.
Le proxy signale aussi les secrets non substitués et d'allure réelle dans le
trafic sortant : les valeurs Bearer et x-api-key à préfixes connus comme
sk-ant-, ghp_ ou AKIA, et les jetons opaques de vingt caractères ou plus.
Ils apparaissent dans le Trace Inspector et dans bromure-cli trace leaks. Ils
signifient d'ordinaire que quelqu'un a collé un vrai secret dans la VM à la main,
ce qui est la seule manière de défaire la frontière depuis l'intérieur.
L'accessibilité est le troisième contrôle. Chaque espace de travail porte un pare-feu de sortie ordonné couvrant l'action, le protocole, l'hôte ou le CIDR, les ports, et pour le trafic web les verbes HTTP un par un, avec un contrôle segmenté pour le trafic non apparié. Les nouveaux espaces de travail autorisent ce qu'aucune règle ne couvre. Réglez-le sur Refuser, listez ce dont le travail a besoin, et l'hôte de C2 d'un voleur n'est pas sur la liste. Deux composants hors de l'invité l'appliquent : le commutateur réseau virtuel apparie chaque flux par IP de destination et par nom d'hôte capté dans le DNS, et le proxy apparie à nouveau par nom de serveur TLS. Vos modifications de règles atteignent les sessions en cours sans redémarrage.
Si vous installez vos agents par copier-coller
Vérifiez d'où ils viennent. La campagne d'EclecticIQ a classé
claudecode.co.com et geminicli.co.com au-dessus des vraies pages et a
tendu aux visiteurs une ligne PowerShell qui installait le véritable outil
tout en tirant un voleur en mémoire. Si cela décrit une installation que
vous avez faite, traitez la machine entière comme exposée : révoquez les
sessions d'abonnement plutôt que de renouveler une seule clé, changez tous
les jetons de votre configuration MCP, et relisez votre propre historique
d'invites comme le ferait un attaquant. Les noms d'hôtes et de dépôts qu'il
contient sont la partie que vous ne pouvez pas renouveler.
Les deux réglages qui réduisent la cible
Enregistrez votre abonnement Claude ou ChatGPT depuis l'éditeur d'espace de
travail, pour que les jetons OAuth soient capturés sur l'hôte et que
l'invité tourne sur une clé bidon. Ouvrez ensuite Guardrails, réglez
Trafic non apparié sur Refuser, et listez ce dont le travail a
besoin : allow web api.github.com, allow web registry.npmjs.org,
default deny. Lancez bromure-cli trace hostnames my-workspace après une
session pour voir chaque hôte atteint par l'agent, avec les comptes.
Le butin suit l'adoption
Les voleurs apprennent les dossiers dans un ordre prévisible. Les profils de navigateur, puis les portefeuilles de cryptomonnaie, puis les jetons Discord et Slack, puis les profils VPN. Chacun est entré dans les règles de collecte un an ou deux après que la chose à laquelle il appartenait est devenue normale. Ce décalage, c'est le temps qu'il faut pour qu'assez de machines aient le dossier pour que la ligne de configuration vaille la peine d'être écrite.
Les agents de codage ont franchi ce seuil cette année, au prix d'entrée d'une mise à jour de configuration, chez huit familles, en un seul trimestre. Aucun correctif ne referme ça, parce que rien n'est cassé. Le dossier est là où il doit être, contenant ce qu'il doit contenir, sur une machine qui fait aussi tourner votre navigateur et votre courrier.
Ce qui change l'issue, c'est de rendre le dossier moins précieux que la peine de le copier. Mettez l'état de l'agent de l'autre côté d'un hyperviseur, remplissez ses fichiers d'identifiants de valeurs de la bonne forme et du mauvais nombre, et gardez les vraies sur l'hôte, là où se fait le rafraîchissement.
Votre agent de codage est une application normale qui range des fichiers normaux à un endroit normal, et c'est pour ça qu'il s'est retrouvé sur la liste. Décidez ce que ces fichiers ont le droit de valoir, avant que la prochaine famille ne mette sa configuration à jour. Installez Bromure Agentic Coding et laissez-les copier les leurres.