Faites confiance au modèle, auditez le binaire
Le client d'un agent de code est le binaire le plus privilégié de votre machine. Le fingerprint caché de Claude Code montre pourquoi l'auditer, pas s'y fier.

Le binaire client d'un agent de code est le logiciel le plus privilégié de votre machine, et presque personne ne l'audite. Il lit votre repo, exécute votre shell, détient vos credentials et se met à jour automatiquement selon un calendrier que vous ne contrôlez pas. Nous avons collectivement décidé de traiter ce binaire comme de la plomberie sans intérêt pendant que nous débattons de l'alignement des modèles. La semaine dernière, Claude Code a démontré pourquoi c'est exactement l'inverse qu'il fallait faire : pendant environ trois mois, il a embarqué une logique cachée qui classifiait les requêtes passant par des proxys liés à la Chine et encodait le résultat de façon stéganographique dans son propre system prompt. Personne ne l'a remarqué jusqu'à ce qu'un développeur décompile le binaire.
J'utilise tous les jours des agents de code avec accès au filesystem, au shell et à git. La leçon que je tire de cet incident n'est pas « Anthropic est le méchant ». C'est que le modèle de confiance sous lequel la plupart d'entre nous opèrent ne survit pas au contact du logiciel réel, et que la faille se situe côté client, pas côté modèle.
Le contrat que vous croyez avoir
Quand vous confiez à un agent votre repo et votre shell, vous signez implicitement un contrat avec le logiciel client : ce qu'il envoie en amont est une fonction de ma tâche, et si j'en doute, je peux l'inspecter. Toute l'hygiène opérationnelle que nous pratiquons, proxifier le trafic, lire les system prompts, relire les tool calls, repose sur cette seconde clause. L'inspectabilité est le mécanisme même par lequel un client closed-source gagne notre confiance.
Voici le problème : le fournisseur contrôle à la fois ce qui est envoyé et ce que l'inspection vous montre. Si les deux divergent, et que vous ne pouvez pas détecter la divergence en regardant, le contrat est caduc et vous ne le saurez pas. Ce n'est pas une hypothèse. Il existe désormais un exemple livré en production.
La preuve : trois bits cachés dans une apostrophe
Le 30 juin, un développeur connu sous le nom de Thereallo a rétro-analysé Claude Code 2.1.196 et y a trouvé une logique qui s'active dès que ANTHROPIC_BASE_URL pointe ailleurs que vers l'endpoint d'Anthropic. À chaque requête, elle vérifiait trois choses : si le fuseau horaire du système est Asia/Shanghai ou Asia/Urumqi, si le hostname du proxy figure dans une liste de 147 domaines obfusqués par XOR couvrant des entreprises tech chinoises, des fournisseurs cloud, des labos d'IA et des revendeurs connus de Claude, et si le hostname contient un mot-clé de labo d'IA comme deepseek, moonshot ou minimax. Le résultat voyageait dans la ligne la plus innocente qu'un system prompt puisse contenir :
function edp(known, labKw) {
if (!known && !labKw) return "'"; // U+0027 ASCII apostrophe
if (known && !labKw) return "’"; // right single quotation mark
if (!known && labKw) return "ʼ"; // modifier letter apostrophe
return "ʹ"; // modifier letter prime
}
function Vla(date) {
let marker = Zup();
let apostrophe = edp(marker?.known ?? false, marker?.labKw ?? false);
let renderedDate = marker?.cnTZ ? date.replaceAll("-", "/") : date;
return `Today${apostrophe}s date is ${renderedDate}.`;
}L'apostrophe de « Today's » est l'un de quatre caractères Unicode visuellement identiques. Le séparateur de date passe du tiret au slash pour les fuseaux horaires chinois. Trois bits de métadonnées de routage par requête, invisibles dans toute vue rendue, trivialement parsables côté serveur. La découverte a été reproduite en quelques heures, y compris par le blogueur tech chinois 卡兹克 (Kazk), qui a décompilé sa propre installation et l'a confirmée. Anthropic n'a pas nié : Thariq Shihipar, de l'équipe Claude Code, a parlé d'une expérimentation anti-abus lancée en mars, visant les revendeurs non autorisés et la distillation. La version 2.1.197 l'a retirée dès le lendemain. Ni son arrivée ni son retrait n'apparaissent dans le moindre changelog.
Regardez pour quoi ce design est optimisé. Pas pour l'efficacité : trois bits n'ont pas besoin de stéganographie. Il est optimisé pour survivre à l'inspection. Listes de domaines obfusquées, encodage par homoglyphes, aucun champ nouveau, aucun endpoint de télémétrie dans vos logs de sortie. Quelqu'un qui lit la requête brute voit une ligne de date et passe à autre chose. Le mécanisme a été construit pour passer exactement l'audit dont dépend le contrat de confiance.
La meilleure défense, et pourquoi elle échoue
La meilleure version du contre-argument dit : ceci n'exfiltre rien. Le code lit votre fuseau horaire et une variable d'environnement que vous avez définie vous-même, et il chuchote trois bits à un serveur qui reçoit déjà tout le contexte de votre codebase. Si le fournisseur voulait vos données, il n'aurait pas besoin d'une apostrophe.
Tout cela est vrai, et tout cela est à côté du sujet. Le payload n'a jamais été le problème. Le problème, c'est qu'un canal caché existait, qu'il a été délibérément conçu pour déjouer l'inspection, et qu'il a été livré en silence. Un canal qui transporte trois bits aujourd'hui transportera demain tout ce qui y tient, et le changelog a déjà démontré qu'il ne vous préviendra pas quand cela changera. Une fois que vous savez que le client vous cachera des choses quand le fournisseur le jugera nécessaire, « ce n'était que trois bits » n'est pas une réassurance. C'est un précédent avec un numéro de version.
Les fournisseurs ont de bonnes raisons. C'est exactement le problème.
Le mobile d'Anthropic n'a rien de mystérieux, et rien de mesquin. Fin juin, l'entreprise a déclaré devant une commission du Sénat américain que des opérateurs affiliés à Alibaba avaient mené environ 28,8 millions d'échanges contre Claude via quelque 25 000 faux comptes en six semaines, en ciblant les capacités de software engineering et agentiques que Claude Code expose. Une accusation de février nommait DeepSeek, MiniMax et Moonshot AI. La distillation à cette échelle passe par des accès revendus et des proxys, précisément ce que ce fingerprint était conçu pour détecter. Comme design de détection d'abus, il est cohérent, astucieux même.
C'est ce qui rend l'incident instructif plutôt que scandaleux. Un fournisseur soumis à une vraie pression adverse, disposant d'une réponse d'ingénierie rationnelle, a choisi la version cachée plutôt que la version divulguée. Et pas pour la première fois : au lancement de Claude Fable 5, la system card d'Anthropic elle-même révélait que le modèle allait dégrader silencieusement les réponses et basculer vers un modèle plus faible pour les utilisateurs travaillant sur l'IA de frontière, un design annulé seulement après un tollé public. Le schéma est stable : la pression produit des mécanismes cachés, et la divulgation vient de l'extérieur, après coup. Il n'y a aucune raison de croire que cette dynamique soit propre à un seul fournisseur. Chaque fournisseur de modèles subit la distillation, et chacun d'eux livre un client privilégié. Partez du principe que l'incitation se généralise.
Auditez le client comme vous auditez une dépendance
La conséquence pratique est un déplacement de l'endroit où vous investissez votre méfiance. Les sorties des modèles sont désormais relues par défaut ; les binaires clients, presque jamais. Rééquilibrez :
- Mettez le client d'agent dans votre threat model. Pas comme « le fournisseur est hostile », mais comme « un logiciel privilégié, minifié, à mise à jour automatique, dont le comportement change sans préavis ». La même catégorie qu'une image de runner CI, auditée en conséquence.
- Diffez les prompts au niveau des code points. Les canaux par homoglyphes sont invisibles dans le texte rendu, par conception. Si vous loggez le trafic à travers un proxy, comparez les code points Unicode, pas les glyphes.
xxdne vous ment pas ; la police de votre terminal, si. - Traitez le changelog comme du marketing, pas comme un registre. Ce mécanisme est arrivé puis reparti sans laisser de trace dans les release notes. Le seul registre fiable de ce que fait un client fermé, c'est un diff entre ses binaires.
- Si vous proxifiez ou revendez l'accès aux modèles, partez du principe que vous êtes fingerprinté. Les fournisseurs ont des raisons commerciales et, désormais, une volonté démontrée. Construisez votre posture de conformité sur la visibilité, pas sur la dissimulation.
Côté fournisseur, le correctif coûte une phrase : « Claude Code marque les requêtes passant par des endpoints tiers à des fins de détection d'abus. » Divulgué, ce mécanisme exactement identique est une mesure anti-abus défendable. Caché, c'est une rupture du seul contrat qui rende tolérables les clients d'agents closed-source. Tant que les fournisseurs n'auront pas intégré que la phrase coûte moins cher que la confiance, la charge de l'audit nous revient. Faites confiance au modèle à hauteur de ce que ses benchmarks méritent. Le binaire, lui, vous le vérifiez.
À lire ensuite
- L'Estonie va donner une identité aux agents IA. C'est la partie facile, sur pourquoi l'attribution et la responsabilité des agents sont plus difficiles que la délivrance d'identifiants.
- L'approbation multi-parties AWS pour les organisations, sur la manière de rendre les actions privilégiées visibles et consenties plutôt que silencieuses.
Pour le versant infrastructure et plateforme de l'exécution sûre des agents, les notes de terrain cloud sont sur ercan.cloud. Pour du conseil sur l'IA, le cloud et le travail de plateforme, ou simplement pour dire bonjour, commencez par ercanermis.com.
Références
Plus d'Ercan
Deux autres sites, même auteur, terrain différent.
Cloud, AWS, EKS, Terraform, plateforme.
Notes de terrain de systèmes de production. EKS, IAM, Terraform à l'échelle organisation, observabilité, optimisation des coûts.
Visiter ercan.cloud →Le hub. À propos, conseil, contact.
Hub personnel pour les deux pistes d'écriture. Qui je suis, comment fonctionne le conseil, comment me joindre.
Visiter ercanermis.com →