- Le binaire Claude Code 2.1.196 contient une fonction qui modifie la phrase de date actuelle du prompt système afin de cacher un signal de classification dans la requête
- Le déclencheur est
ANTHROPIC_BASE_URL; si ce n’est pas l’URL officielleapi.anthropic.comou si une valeur est définie, il vérifie le nom d’hôte et le fuseau horaire pour modifier l’apostrophe et les séparateurs de date - Le nom d’hôte est comparé à une liste de domaines et de mots-clés décodée depuis une chaîne base64 avec la clé XOR
91, qui inclut des éléments commedeepseek,zhipu,moonshot,baidu.com,bytedance.netetproxyai.com - Si l’endpoint officiel de l’API Anthropic est utilisé ou si
ANTHROPIC_BASE_URLest absent, la fonction retourne plus tôt et le format habituelToday's date is 2026-06-30.est conservé - On ne peut pas conclure qu’il s’agit d’une fonctionnalité malveillante, mais lorsqu’un outil de développement ayant accès au système de fichiers et au shell cache des informations de classification au moyen de marqueurs Unicode invisibles, cela ébranle la confiance
Des marqueurs cachés dans la phrase de date
- Le binaire Claude Code contient une fonction qui modifie la chaîne de date actuelle insérée dans le prompt système
- La phrase par défaut a la forme suivante
Today's date is 2026-06-30.
- Deux éléments peuvent être modifiés
- l’apostrophe dans
Today's - le séparateur de date : remplacement de
-par/
- l’apostrophe dans
- La phrase obtenue ressemble extérieurement à une simple indication de date, mais la requête brute contient des marqueurs cachés
- Comme cette méthode dissimule des données dans un texte qui paraît en clair, elle relève de la stéganographie de prompt
Le chemin conditionnel activé par ANTHROPIC_BASE_URL
- Le déclencheur est
ANTHROPIC_BASE_URL, l’override de l’URL de base de l’API dans Claude Code - Si
ANTHROPIC_BASE_URLest absent, la fonction retourne immédiatement - Même si une valeur existe, si l’hôte est
api.anthropic.com, elle emprunte le même chemin de sortie - Ce n’est que lorsqu’elle ne retourne pas plus tôt que les conditions suivantes sont vérifiées
- si le fuseau horaire du système est
Asia/ShanghaiouAsia/Urumqi - si le nom d’hôte de l’URL de base de l’API correspond à la liste de domaines décodée ou à l’un de leurs sous-domaines
- si le nom d’hôte contient certains mots-clés de laboratoires d’IA
- si le fuseau horaire du système est
Les informations encodées dans la date et l’apostrophe
- Si le fuseau horaire est
Asia/ShanghaiouAsia/Urumqi, le format de date change2026-06-30→2026/06/30
- Selon le résultat de la classification du nom d’hôte, l’apostrophe de
Today'schange- cas général :
' - domaine connu :
\u2019 - mot-clé de laboratoire :
\u02BC - domaine connu contenant aussi un mot-clé de laboratoire :
\u02B9
- cas général :
- Dans la plupart des polices monospace, la différence visuelle entre ces caractères Unicode est très faible, ce qui les rend difficiles à repérer
Liste cachée de domaines et de mots-clés
- La liste des domaines et des mots-clés est stockée sous forme de chaîne base64 et décodée avec la clé XOR
91 - La liste décodée de mots-clés de laboratoires est la suivante
deepseekmoonshotminimaxxaminimzhipubigmodelbaichuanstepfun01aidashscopevolces
- La liste décodée de domaines est plus volumineuse et inclut des domaines d’entreprises chinoises, de sociétés d’IA, ainsi que de proxys, revendeurs et passerelles
- Voici quelques exemples d’éléments
cnbaidu.comalibaba-inc.comalipay.comantgroup-inc.cnbytedance.netkuaishou.comxiaohongshu.comjd.combilibili.coiflytek.comstepfun-inc.commoonshot.aianyrouter.topclaude-code-hub.appclaude-opus.topopenclaude.meproxyai.comyunwu.aizenmux.ai
- La liste complète est disponible dans cc-domains.js
Emplacement dans le contexte système
- Le résultat de la fonction de date est inséré comme valeur
currentDatelors de la construction du contexte de l’agent - Le même contexte peut aussi inclure, selon les conditions, l’e-mail de l’utilisateur et des informations sur le projet associé
- Le marqueur devient donc une partie du contexte système envoyé au modèle
- Il reste aussi possible que le backend d’Anthropic analyse cette valeur
Environnement d’installation vérifié
- Le binaire d’installation de Claude Code vérifié est signé par Anthropic
Identifier=com.anthropic.claude-codeTeamIdentifier=Q6L2SF6YDWTimestamp=Jun 29, 2026SHA256=6fc6e61ab7582c2bf241225ff90d9f79e91d69380cb9589fc9dedd3a30070f5a
- Au moment de la vérification,
ANTHROPIC_BASE_URLn’était pas défini dans le shell, et le fuseau horaire étaitAsia/Hong_Kong - Dans cet environnement, une apostrophe normale et une chaîne de date
YYYY-MM-DDsont générées
Cas d’usage concernés et limites
- Pour la plupart des utilisateurs, ce chemin restera probablement inactif
- Si l’endpoint officiel de l’API Anthropic est utilisé ou si
ANTHROPIC_BASE_URLest absent, le prompt de date conserve sa forme ordinaire - Les cas intéressants sont ceux où Claude Code est routé via une URL de base personnalisée
- passerelle interne
- proxy local
- routeur de modèles
- revendeur
- environnement de recherche
- Dans ce cas, Claude Code classe le nom d’hôte et encode le résultat dans le prompt
- Les méthodes de contournement sont simples
- changer le nom d’hôte
- changer le fuseau horaire
- patcher le binaire
- envelopper le processus
- Un attaquant sérieux peut neutraliser ce signal ; les développeurs ordinaires utilisant des configurations inhabituelles mais légitimes deviennent donc plus facilement sujets au fingerprinting
Une implémentation qui ébranle la confiance
- Il est possible qu’Anthropic cherche à détecter des revendeurs d’API, des passerelles Claude Code non autorisées ou des pipelines de « distillation attack » de modèles
- Si
ANTHROPIC_BASE_URLpersonnalisé pointe vers un domaine de revendeur connu ou si le nom d’hôte contientdeepseekouzhipu, cela peut servir de signal de détection - Le problème réside dans la manière dont c’est implémenté
- modification silencieuse du prompt système
- encodage d’informations de classification de proxy ou de passerelle dans un passage qui ressemble à une phrase anglaise ordinaire
- dissimulation de la liste de domaines derrière XOR et base64
- Un agent de codage peut, sur la machine locale, consulter le code, exécuter des commandes, installer des paquets, modifier des fichiers et pousser des commits
- Pour détecter une passerelle d’API personnalisée, il serait aussi possible d’utiliser des méthodes comme un champ de télémétrie explicite et documenté, une politique publique ou des notes de version
- Quand un outil ayant accès au système de fichiers et au shell cache des bits de classification dans une ponctuation de prompt invisible, ses autres affirmations en matière de protection de la vie privée deviennent difficiles à croire
1 commentaires
Avis sur Hacker News
Certaines réactions minimisent la gravité du manque de transparence sur ce que fait exactement un outil déployé par un prestataire de service sur la machine d’un client
Le fait qu’il y ait eu un besoin commercial ne dispense pas d’une communication honnête
Que leur solution devienne inutile s’ils la divulguent honnêtement n’est pas mon problème ; au contraire, s’ils ont jugé ça acceptable, ça me fait me demander ce qu’ils pourraient encore collecter sur ma machine, comme des informations d’identification personnelle
Vu cyniquement, j’ai l’impression que l’ambiance des commentaires reflète moins un jugement sur cette affaire que des sentiments à l’égard de l’IA, d’Anthropic, des États-Unis, etc.
Cela ressemble à un moyen de réponse naturel pour mettre ces faits en évidence
En mettant de côté les jugements de valeur, je suis un peu surpris que cela ait été implémenté aussi grossièrement
Il me semble qu’on aurait pu obtenir le même effet tout en réduisant les chances que ce soit détecté par rétro-ingénierie
Ce domaine est connu sous le nom d’« underhanded code », popularisé par l’Underhanded C Contest : https://www.underhanded-c.org
C’est un « art » peu connu, pour des raisons évidentes. Il existe des façons beaucoup plus astucieuses d’atteindre ce genre d’objectif
Une méthode évidente consiste à déplacer davantage de logique du client vers le serveur ; une autre consiste à écrire du code client avec déni plausible, d’une manière qui paraît beaucoup plus inoffensive
Une partie de ce qui a été ajouté n’est possible que côté client, mais une autre aurait pu être déplacée, et même les parties nécessitant le client auraient pu être rendues plus subtiles et plausibles
Il est possible qu’ils aient su qu’un bundle JS, très souvent examiné, finirait par être découvert et faire l’objet d’articles, et qu’ils aient donc choisi de ne pas le rendre plus furtif et trompeur ; malgré tout, ça donne une impression de manque de soin
Il serait difficile d’empêcher un grand labo d’IA vraiment déterminé de distiller le modèle, mais A) cela peut bloquer beaucoup de revendeurs de tokens bricolés qui cherchent à gagner rapidement de l’argent, et B) quelqu’un dans un de ces grands labos pourrait oublier d’installer la parade et se révéler tout seul
Je vois ça un peu comme acheter un hibou en plastique parce qu’il y a beaucoup d’oiseaux dans la cour. Même si le hibou fait fuir la plupart des oiseaux mais pas tous, et qu’on achète en plus un dispositif à ultrasons, il n’y a pas de raison d’enlever le hibou
Car il y a désormais non pas une, mais deux couches de défense
Ce n’est pas que les modèles d’Anthropic soient mauvais, mais Claude semble casser chaque jour un nouveau truc agaçant, donc je migre de plus en plus vers Codex et OpenCode
Les grands modèles de langage peuvent utiliser les distributions de tokens pour créer du stéganotexte qui se lit comme une prose plausible, mais se décode en payload¹
¹ https://github.com/hodgesmr/calgacus-mlx
Anthropic a peut-être implémenté cela non pas comme un système de détection continu contre les revendeurs de proxy, mais comme un système d’échantillonnage ponctuel pour découvrir où et dans quel contexte la revente via proxy a actuellement lieu
Ils finiront par être découverts un jour, mais d’ici là Anthropic peut obtenir des données instantanées utiles
La conclusion de ce billet de blog est un peu excessive
L’intention de cette stéganographie est très claire : identifier l’usage par des entreprises chinoises susceptibles de pratiquer la distillation de modèle
On ne voit pas clairement en quoi cela « punit les développeurs ordinaires » sous quelque forme que ce soit
Parmi les raisons légitimes : analyser ce que Claude Code envoie à Anthropic pour vérifier qu’il n’y a pas de fuite de données, choisir dynamiquement le modèle selon la difficulté du prompt ou forcer un modèle spécifique, basculer entre plusieurs comptes Anthropic selon le projet, filtrer les identifiants, les informations d’identification personnelle et les secrets d’entreprise, etc.
La fin ne justifie pas toujours les moyens
Qu’il y ait eu ou non un préjudice cette fois-ci, c’est une atteinte à la confiance et à l’autonomie
Même si quelqu’un disait qu’au moins pour l’instant, le code ne sert qu’à détecter et dénoncer l’ennemi public numéro un, il serait tout à fait normal d’être furieux si un rootkit avait été installé en douce
Contrairement à Claude Code, Codex CLI est un logiciel libre et open source, donc il est moins susceptible de faire ce genre de choses, et cela donne une raison de plus d’éviter Claude Code et Claude en général
J’espère que de nombreuses personnes examineront Codex pour repérer ce genre de comportement malveillant
Je suis très sceptique vis-à-vis des politiques de confidentialité et des pratiques commerciales, mais je me demande quel préjudice cela me cause en tant que client
Si cela aide à retarder le moment où les subventions prennent fin, cela semble même avantageux du point de vue du client
Cela dit, si ces proxys frauduleux aident des labos chinois à rattraper leur retard, à long terme cela pourrait aussi m’avantager en me permettant d’avoir une IA personnelle de qualité, entièrement sous mon contrôle sur mon propre matériel
Je ne dis pas que je soutiens ça, mais je reconnais que cette incitation existe
Le fait que le client soit libre et open source signifie seulement qu’une plus grande part de l’analyse est faite côté serveur, cachée
Ce ne sont pas des builds déterministes, mais il y a quand même une certaine garantie de provenance indiquant que ça vient bien du dépôt authentique
La réaction du type « si le client veut détecter des passerelles API personnalisées, il n’a qu’à le dire clairement : envoyer un champ de télémétrie explicite et documenté, rendre la politique visible et inclure ce comportement dans les notes de version » me paraît très naïve
Si le client envoie à la passerelle un champ de télémétrie explicite, une passerelle malveillante peut très facilement le supprimer ou le modifier pour que cela ressemble à du trafic normal
L’intérêt de ce jeu du chat et de la souris par stéganographie, c’est qu’il est bien plus difficile pour la passerelle de rétro-ingénierie en continu tous les mécanismes de fingerprinting utilisés
Bien sûr, certaines passerelles malveillantes continueront à s’adapter, mais elles ne pourront pas toutes le faire en permanence
Si l’on n’est pas un labo chinois de distillation, c’est un sujet qui ne pose aucun problème
Parce que le marché international des services de contournement de KYC est très développé
Il faut exécuter non seulement les outils d’IA, mais aussi les outils de développement dans des sandboxes
Par exemple, on peut mettre n’importe quoi dans les dépôts de paquets Python ou JavaScript, ils n’ont pas de contrat avec des éditeurs d’antivirus et il n’existe pas de vérification citoyenne digne de confiance ; il ne faut donc pas les exécuter sans sandbox
Pensez au fait que n’importe quel utilisateur anonyme de n’importe quel pays peut publier n’importe quoi, et que des millions de développeurs peuvent l’exécuter sur leur propre ordinateur
Les IDE, les plugins d’IDE, les serveurs LSP et les plugins d’IA devraient tous être placés en sandbox
La plupart ne sont pas analysés par des éditeurs d’antivirus et ne devraient pas être exécutés sans restrictions
De plus, il existe déjà un théorème selon lequel aucun antivirus ne peut garantir à 100 % la sûreté d’un code
Fait intéressant, la documentation de pip ne mentionne absolument pas les sandboxes ni les logiciels malveillants dans sa documentation de « démarrage », comme si elle vivait dans un monde merveilleux sans personnes, entreprises ni États malveillants
J’espère au moins que personne sur HN ne vit dans cette illusion
Pour utiliser des IDE, LSP et outils d’IA, il faut d’abord écrire son propre système de sandbox, et Linux ne fournit que des primitives de base, ce qui prend beaucoup de temps
Par exemple, pour contrôler tout le trafic réseau sans droits root, il faut créer un espace de noms utilisateur pour obtenir les droits root, créer un espace de noms réseau, écrire un « collecteur de trafic » qui s’exécute dans cet espace de noms et transmet les données via un pipe vers un programme « superviseur » extérieur, puis faire en sorte que ce superviseur route le trafic vers sa destination
Même pour simplement filtrer et inspecter le trafic sans droits root, Linux demande beaucoup trop de travail
Il ne faut laisser aucune information non plus dans le nom d’utilisateur ou le nom d’hôte. Comme le prouve cet article, ces informations seront utilisées contre vous
Pour résumer ce qu’Anthropic a déjà fait : l’entreprise a filtré, des années avant que les gouvernements ne l’exigent, les personnes du « mauvais » côté de « toute l’humanité » ; elle a dégradé ses modèles de manière arbitraire avant de répondre ensuite en mode « désolé, mais pas vraiment » ; et elle a activement saboté les réponses en les modifiant en douce pour donner de mauvais résultats aux utilisateurs
À quoi faut-il s’attendre ensuite ? Un malware qui briquerait la machine des utilisateurs qu’ils n’aiment pas ? Une extension à encore plus de personnes qu’ils n’aiment pas ?
On voit déjà comment va se dérouler la vision utopique de Dario Amodei pour l’avenir de « toute l’humanité »
Tout devient compréhensible si l’on part du principe que ces gens croient sincèrement être en train de créer une superintelligence
L’écrasante majorité du camp de la sécurité de l’IA a consacré à ce problème bien plus de vie et de temps que le commentateur HN moyen depuis son fauteuil ; ils pensent qu’il faut empêcher la Chine d’atteindre la superintelligence en premier, que l’accès à la superintelligence ne doit être accordé qu’à des acteurs bienveillants vérifiés, et que si cet objectif échoue, c’est une course qui mènera à l’extinction de l’humanité
Si l’on ne suppose pas que l’affirmation « nous pensons être en train de créer une superintelligence » est un mensonge, presque toutes leurs actions deviennent compréhensibles
J’avais signalé ici un mécanisme similaire d’injection de prompt système
https://news.ycombinator.com/item?id=48259288
https://github.com/anthropics/claude-code/issues/62061
Comme prévu, ils semblent continuer à trouver des usages nouveaux et « créatifs » à ce genre de choses
Je continuerai à les supprimer par patch
Je ne savais pas que le prompt système injectait des consignes du genre « éviter les abstractions ; trois lignes de code similaires valent mieux qu’un helper »
C’est quelque chose avec lequel je ne suis pas d’accord
Existe-t-il un moyen de corriger cela en mettant des instructions dans CLAUDE.md pour remplacer ce genre de prompt ? On ne peut sans doute pas modifier directement le prompt système lui-même, mais CLAUDE.md ne devrait-il pas avoir le dernier mot ?
Je ne vois pas bien la préoccupation de confidentialité que l’auteur veut souligner
Bien sûr, si l’on se fait prendre en train de faire quelque chose de « discret », cela suscite toujours des soupçons ; mais à l’inverse, si l’on rend public le fonctionnement de ce genre de « fonctionnalité de sécurité », il n’y a plus de raison de l’implémenter
Et, à mon avis, la stéganographie n’est pas une sécurité reposant sur l’obscurité
Tout comme le fait de garder une clé privée RSA secrète n’est pas une sécurité par l’obscurité, garder privé ce qui doit l’être fait partie du modèle de sécurité
Mais ils se sont plantés en l’implémentant sous forme de fingerprinting de mes schémas d’accès sans les divulguer au préalable
Ce n’est pas seulement « discret » : c’est clandestin, malhonnête et contraire à l’éthique
Le fait que ce cas précis soit inoffensif n’est pas très rassurant. Qui garantit qu’ils ne collectent pas d’informations personnelles identifiables ?
Le fait que leur comportement ait du sens sur le plan commercial n’est pas une raison pour que les gens acceptent des décisions trompeuses et hostiles aux clients
À moins que cette hypothèse soit elle aussi incompréhensible, mais en réalité j’ai l’impression que la vie privée des autres n’intéresse pas grand monde
« Donc cette fonctionnalité punit surtout les personnes faciles à fingerprinter, c’est-à-dire des développeurs ordinaires qui font des choses étranges mais légales » : ici, que signifie exactement punir ?
Surtout quand on sait que ce genre de technologie existe et qu’ils avaient publiquement déclaré vouloir l’utiliser en production chez Fable