Incident de stéganographie Claude Code : comment Anthropic vous marque avec une apostrophe

Le 30 juin 2026, des développeurs ont reverse-engineeré le binaire Claude Code et découvert : lorsque ANTHROPIC_BASE_URL pointe vers un endpoint non officiel, le client remplace discrètement dans la ligne Today's date du prompt système les apostrophes Unicode et les séparateurs de date — selon les rapports de reverse engineering, pour marquer les utilisateurs proxy/passerelle. Claude web n'est pas concerné ; la logique a été retirée en 2.1.197.

TL;DR : Cet article porte sur l'outil terminal Claude Code (paquet npm @anthropic-ai/claude-code) — pas sur le chat web Claude. Selon les rapports de reverse engineering, lorsque ANTHROPIC_BASE_URL est défini sur autre chose que api.anthropic.com, le client modifie la ligne Today's date is … du prompt système avec des ajustements Unicode et de format de date invisibles à l'œil nu ; vraisemblablement pour l'anti-distillation et la détection de routage non officiel. La logique a été supprimée en 2.1.197 (2026-07-01), sans mention dans le changelog officiel. Pour les développeurs et tech leads utilisant Claude Code, Cursor ou Copilot comme agents desktop/terminal : nous séparons deux controverses indépendantes de 2026 (avril Desktop Native Messaging vs juin stéganographie), fournissons un tableau des principes, un runbook de protection en six étapes, des principes de confiance et une FAQ. Si vous évaluez les assistants de codage IA 2026, lisez ceci comme complément sur les frontières de confiance des agents terminal.

00Crise de confiance Anthropic 2026 : deux événements — ne pas les confondre

Au premier semestre 2026, Anthropic a enchaîné les controverses confidentialité/sécurité sur deux lignes de produits : client desktop et agent de codage terminal. La communauté regroupe souvent les deux sous « spyware Claude », mais mécanismes, surface d'impact et remédiation diffèrent fondamentalement. Le tableau ci-dessous distingue événement A et événement B ; runbooks et communications internes doivent les traiter séparément.

DimensionÉvénement A : Claude Desktop Native Messaging (avril 2026)Événement B : stéganographie prompt système Claude Code (30 juin 2026)
ProduitClient macOS Claude Desktop (Claude.app)CLI Claude Code (@anthropic-ai/claude-code)
Première divulgationConsultant vie privée Alexander Hanff (avril 2026) ; Antiy Labs publie une analyse de risqueDéveloppeur Thereallo (thereallo.dev) ; utilisateur Reddit LegitMichel777 ; Hacker News
ComportementÉcriture silencieuse du manifest Native Messaging Chromium à l'installation ; pré-autorisation extension navigateur ↔ binaire local, même sans navigateur installéSi ANTHROPIC_BASE_URL non par défaut, insertion d'apostrophes Unicode et séparateurs de date liés au fuseau dans Today's date is …
DéclencheurInstallation/démarrage Claude DesktopUniquement routage API via base URL personnalisée (proxy, passerelle, revente API)
Confirmation tierceNoah Kenney (Digital 520) confirme indépendamment la découverte de HanffThe Register, TechTimes, etc. ; employé Anthropic Thariq Shihipar répond sur X
CommunautéDébat vie privée et ePrivacy ; Malwarebytes, gHacksHacker News 350+ points, 100+ commentaires ; clivage « anti-distillation légitime » vs « marquage dissimulé inacceptable »
État correctifVersions ultérieures ajouteraient un opt-in ; surface d'attaque encore discutée2.1.197 (2026-07-01) merge la PR de suppression ; changelog muet

En parallèle de la crise de confiance Gemini CLI et de Anthropic AI for Science, l'événement B illustre le compromis du fabricant entre anti-distillation de modèle et transparence des outils développeur. Selon Anthropic, l'expérience visait à bloquer la revente non autorisée et la distillation — mais la marque stéganographique et la suppression non documentée amplifient la perte de confiance.

DouleurPourquoi « une apostrophe » inquiète les développeurs

Claude Code est un agent terminal à privilèges élevés sur votre machine ou en CI : lit les dépôts, appelle des outils, se connecte via MCP à des systèmes externes. Les développeurs s'attendent à ce que le prompt système envoyé au modèle corresponde à l'UI et que les variables d'environnement ne modifient que le routage, pas le contenu du prompt en secret. Selon le reverse engineering, l'événement B brise cette attente :

  • Canal dissimulé : l'empreinte n'est pas dans un champ télémétrie séparé, mais dans la ligne de date présente à chaque requête — quasi invisible à l'œil et aux outils de diff.
  • Déclenchement conditionnel : connexion directe à api.anthropic.com : selon les rapports, pas concernée ; passerelles SiliconFlow, DeepSeek, reverse proxy entreprise et autres ANTHROPIC_BASE_URL personnalisées activent la logique — fort recouvrement avec l'écosystème proxy API.
  • Obfuscation de listes : listes de domaines en base64 + XOR(91) ; environ 147 règles avec mots-clés deepseek, moonshot, zhipu et nombreux domaines passerelle.
  • Dérive de versions : logique présente depuis 2.1.91 (début avril 2026) ; encore reproductible en 2.1.193 / 2.1.195 / 2.1.196 ; retirée seulement en 2.1.197.
  • Lacune de divulgation : commit de suppression mergé, notes de version sans mention — audits conformité et SBOM ne peuvent pas clore sur le changelog seul.

Sur Hacker News, une faction estime la protection anti-distillation légitime ; l'autre juge la stéganographie dans un outil développeur payant sans information utilisateur incompatible avec le récit « Ask for trust ». Ce clivage montre l'absence d'un modèle de confiance standardisé pour les agents terminal.

01Principe de stéganographie : comment la ligne Today's date encode l'empreinte

Selon thereallo.dev et les articles de Vincent Schmalbach, le pipeline se résume en quatre étapes : (1) lire process.env.ANTHROPIC_BASE_URL ; (2) si vide ou API officielle, ligne de date normale ; (3) sinon parser le hostname et comparer à la table domaines/mots-clés décodée XOR ; (4) choisir l'apostrophe Unicode et, selon le fuseau système, remplacer - par / dans la date.

Condition (selon reverse engineering)Apostrophe dans Today'sUnicodeExemple de date
Base URL non par défaut, host hors liste, sans mot-clé labApostrophe ASCII droiteU+0027 '2026-06-30 (hors fuseau Chine)
Host correspond à domaine passerelle/revente connuApostrophe typographique droiteU+2019 'idem
Host hors liste mais mot-clé lab IAApostrophe modificativeU+02BC ʼidem
Liste domaines et mot-clé simultanémentPrime modificativeU+02B9 ʹidem
Fuseau Asia/Shanghai ou Asia/Urumqi(combiné avec tableau ci-dessus)2026/06/30 (- devient /)

Tables domaines et mots-clés stockées en base64 puis XOR(91) dans le binaire — environ 147 règles incluant deepseek, moonshot, zhipu, siliconflow et de nombreux domaines proxy. Si le serveur Anthropic normalise ou conserve l'Unicode original avant stockage, la même ligne anglaise révèle usage proxy, routage écosystème IA chinois, fuseau Chine — selon les fuites pour anti-distillation et revente non autorisée, pas un verdict communautaire d'« espionnage actif ».

Pseudocode (selon rapport de reverse engineering, pas le code officiel)
function renderDateLine(date) {
  if (!customBaseUrl()) return `Today's date is ${date}.`;
  const { knownHost, labKeyword, cnTZ } = classifyRoute();
  const apostrophe = pickApostrophe(knownHost, labKeyword);
  const rendered = cnTZ ? date.replaceAll("-", "/") : date;
  return `Today${apostrophe}s date is ${rendered}.`;
}
  • Donnée citable 1 : logique stéganographique présente depuis Claude Code 2.1.91 ; encore détectable en 2.1.196 à la divulgation.
  • Donnée citable 2 : table domaines/mots-clés obfusquée : environ 147 entrées, cachées via XOR(91) et base64.
  • Donnée citable 3 : fil Hacker News 350+ points, 100+ commentaires — communauté divisée entre « anti-distillation OK » et « outils dev ne doivent pas marquer en secret ».

02Chronologie des versions et motivation : rumeurs vs réponse officielle

Version / dateSelon infos publiques et reverse engineering
2.1.91 (vers 2026-04-02)LegitMichel777 sur Reddit signale la logique dans cette version
2.1.193 / 2.1.195 / 2.1.196Communauté reproduit la branche stéganographie dans le paquet npm et chunks embarqués
2026-06-30Thereallo publie l'article de reverse engineering ; HN/Reddit enflamment
2.1.197 (2026-07-01)PR de suppression mergée ; changelog officiel muet

L'employé Anthropic Thariq Shihipar a déclaré sur X qu'il s'agissait, selon sa version, d'une expérience lancée en mars contre revente non autorisée et distillation, avec rollback prévu. The Register et d'autres rapportent qu'Anthropic a reconnu le code et promis un correctif. Ce sont des déclarations publiques ; si le serveur consomme réellement ces marques ou affecte le risque compte, Anthropic n'a pas détaillé — cet article n'affirme pas de conséquences non divulguées comme faits.

Parallèlement, une fuite de source a exposé des mécanismes comme ANTI_DISTILLATION_CC (injection de données tool perturbatrices). La stéganographie appartiendrait à la même boîte à outils « protection modèle » — mais la modification secrète du prompt système nuit davantage à la confiance développeur que des champs API documentés.

03Est-ce du « spyware » ? Comment qualifier les deux événements

Événement A : préconfiguration locale non autorisée

Hanff et Antiy Labs accusent : Claude Desktop écrit sans informer dans les chemins Chrome, Edge, Brave, Arc, Vivaldi, Opera le fichier com.anthropic.claude_browser_extension.json, pré-autorise ID extension et helper local ; après suppression, l'app peut le recréer automatiquement. Noah Kenney confirme indépendamment : pont persistant « extension navigateur → binaire hors sandbox ».

Chaîne de risque : la documentation Anthropic cite pour Claude for Chrome des risques d'injection de prompt — sans atténuation ~23,6 % de succès, avec atténuation encore ~11,2 %. Extension installée et manifest préconfiguré : selon analyses sécurité, une injection sur page malveillante pourrait théoriquement atteindre capacités locales au niveau utilisateur via extension et Native Messaging — altération locale non autorisée plus surface d'injection connue à fort taux, pas un profil trojan classique, mais forte controverse conformité et ePrivacy.

Événement B : télémétrie non divulguée dans la couche prompt

L'événement B ne modifie pas les fichiers locaux, mais intègre des signaux de classification dans le prompt système invisible pour l'utilisateur — sans opt-in séparé. Selon le reverse engineering, c'est un canal télémétrie/classification non documenté, hostile à la transparence et à la minimisation des données. Qualifier juridiquement de « spyware » dépend de la juridiction et du contrat ; formulation technique plus précise : marquage de classification dissimulé dans outils développeur, changelog muet à la suppression.

Discipline de formulation : les motivations Anthropic sont citées « selon les rapports », « selon le reverse engineering », « selon leurs déclarations publiques » ; usage serveur ou sanctions compte non divulgués ne sont pas affirmés comme faits. Les audits entreprise doivent couvrir séparément événement A (chemins manifest) et événement B (base URL / version).

04Runbook de protection en six étapes (Claude Code + Desktop)

  1. 01
    Vérifier ANTHROPIC_BASE_URL : lister toutes les instances Claude Code dans le shell, ~/.claude/settings.json et coffres secrets CI. URL pointant vers API non officielle : selon reverse engineering, la branche stéganographie s'activait ; documenter les passerelles entreprise et obtenir approbation sécurité.
  2. 02
    Mettre à jour Claude Code ≥ 2.1.197 : exécuter claude --version ou npm ls -g @anthropic-ai/claude-code. Versions inférieures à 2.1.197 contenaient encore la logique ; après upgrade, le changelog reste muet — vérifier le binaire ou verrouiller la version.
  3. 03
    Auditer Native Messaging Claude Desktop : sous macOS, chercher com.anthropic.claude_browser_extension.json dans ~/Library/Application Support/Google/Chrome/NativeMessagingHosts/ et chemins équivalents Edge, Brave, Arc. Si automatisation navigateur inutile : supprimer le manifest et noter si Desktop le recrée.
  4. 04
    Contrôler le fuseau système : événement B basculerait le séparateur de date sous Asia/Shanghai et Asia/Urumqi. CI et dev box cloud sur fuseau attendu ; fixer TZ=UTC dans la doc si nécessaire.
  5. 05
    Moindre privilège entreprise : restreindre qui installe Desktop, configure base URL et clés API ; approbation pour MCP et extensions navigateur ; isoler Claude Code des secrets production.
  6. 06
    Isoler et auditer l'environnement dev : exécuter les agents sur Mac séparé ou nœud cloud bare metal dédié, distinct du navigateur quotidien et de l'Apple ID personnel ; auditer périodiquement des échantillons de prompt système sortants (lab MITM) ou s'appuyer sur SBOM fabricant. Pour hôtes Mac CI/agent stables et réinitialisables : tarifs NUKCLOUD et page commander pour nœuds exclusifs.

05Confiance éditeurs IA : quatre principes d'achat actionnables

Les agents terminal lisent le code, appellent des outils et détiennent des clés API. La stéganographie Claude Code et la controverse manifest Desktop en 2026 montrent : documentation fabricant ≠ comportement runtime. Équipes achats et plateforme peuvent adopter ces quatre principes (Anthropic, Google, OpenAI, Cursor, etc.) :

  1. Comportement observable : injections prompt système, logique déclenchée par variables d'environnement et écritures locales doivent être documentées ou traçables via SBOM ; changelogs couvrant suppressions liées à la sécurité.
  2. Minimisation des données : classification et anti-abus via champs API explicites ou télémétrie opt-in — pas de canaux stéganographiques.
  3. Consentement pour changements locaux : Native Messaging, extensions navigateur, LaunchAgents préinstallés = violation, sauf autorisation explicite au premier usage.
  4. Chaîne d'approvisionnement vérifiable : verrouiller versions, vérifier hash npm, diff en environnement isolé ; séparer hôte agent du réseau production pour rebuild rapide.

Les risques de confiance des agents desktop et Claude Code ne sont souvent pas la qualité des réponses, mais les effets locaux non revus et les payloads sortants invisibles. Sur portable partagé ou VPS sursouscrit avec agent 7×24, s'ajoutent interférences voisins et coupures longues connexions. Pour des hôtes auditables, accessibles SSH, avec Xcode et Claude Code, les nœuds Mac bare metal multi-régions / Mac cloud NUKCLOUD séparent l'environnement agent de la machine quotidienne — matériel exclusif, root, facturation jour/mois flexible, surface d'exposition réduite. Consultez d'abord les tarifs, testez un environnement dev isolé sur commander ; détails dans l'aide et la console.

06Questions fréquentes

La stéganographie Claude Code est-elle du spyware ?
La qualification juridique varie selon les pays. Techniquement : événement B = marquage de classification prompt système non divulgué dans l'UI ; événement A = préconfiguration Native Messaging non autorisée. Les deux érodent fortement la confiance ; « spyware » au sens légal dépend du contrat et du droit local — les entreprises doivent appliquer le runbook, pas seulement la marque.
Le Claude web ordinaire est-il concerné ?
Non. La logique est dans le CLI Claude Code, pas le chat navigateur. Utilisateurs claude.ai seuls : pas d'upgrade CLI pour l'événement B ; si Claude Code ou Desktop est installé localement, traiter version et manifest séparément.
Comment supprimer l'injection Native Messaging de Claude Desktop ?
Sous macOS, supprimer com.anthropic.claude_browser_extension.json dans les dossiers NativeMessagingHosts des navigateurs Chromium et vérifier si Claude Desktop recrée le fichier au redémarrage. Selon Hanff, l'app peut le restaurer ; désactiver l'intégration navigateur, choisir une version sans ce comportement, surveiller les changements de répertoire.
Changer le fuseau pour la Chine suffit-il à me marquer ?
Non, pas seul. Selon le reverse engineering, -/ ne s'applique que si ANTHROPIC_BASE_URL non officiel et fuseau Asia/Shanghai ou Asia/Urumqi. Connexion directe API officielle : le chemin ne serait pas activé selon les rapports.
Qu'est-ce que l'« apostrophe trick » ?
Dans Today's, remplacer l'apostrophe ASCII U+0027 par des caractères visuellement quasi identiques U+2019, U+02BC, U+02B9 pour encoder des combinaisons « liste domaines / mot-clé lab IA ». Lecture humaine identique ; logs ou serveur sensibles Unicode peuvent décoder.
Desktop avril et stéganographie juin : même chose ?
Non. Événement A : Claude Desktop et pont navigateur ; événement B : Claude Code avec routage API personnalisé. Produit, déclencheur et version correctrice diffèrent — communications et scans internes séparés.
Pourquoi Anthropic a-t-il ajouté cela (selon déclarations publiques) ?
Thariq Shihipar l'a présenté comme expérience contre revente non autorisée et distillation ; The Register cite des investissements classificateurs et empreintes comportementales. Controverse : l'objectif est compréhensible, la modification secrète du prompt dans outils dev et le changelog muet à la suppression, moins.
Dois-je quand même passer en 2.1.197 ?
Oui, recommandé. 2.1.197 a mergé la PR de suppression. Utilisateurs de ANTHROPIC_BASE_URL personnalisé : revérifier variables et images CI après upgrade ; équipes conformité garder traces d'upgrade et verrous de version, le changelog étant muet.
Un proxy API (passerelle) me marque-t-il forcément ?
Selon reverse engineering, avec ANTHROPIC_BASE_URL non officiel et correspondance table ou mots-clés, la ligne date pouvait être modifiée — avant 2.1.197. Après upgrade, logique retirée ; suivre autres mécanismes anti-distillation (ex. ANTI_DISTILLATION_CC) via mises à jour fabricant et reverse engineering communautaire.

07Sources

  • The Register — Anthropic retire le code dissimulé de Claude Code
  • thereallo.dev — article de reverse engineering sur la stéganographie du prompt système
  • Antiy Labs — analyse de risque Native Messaging Claude Desktop
  • Alexander Hanff — divulgation originale de l'installation silencieuse du manifest (That Privacy Guy, etc.)
  • Hacker News — discussion fin juin 2026 (ordre de grandeur 350+ points, 100+ commentaires)
  • Reddit — LegitMichel777 et autres sur comportement dès 2.1.91
  • Vincent Schmalbach, TechTimes, etc. — suivi technique ANTHROPIC_BASE_URL et marquage Unicode

Les agents terminal deviennent des « stagiaires avec root ». L'incident stéganographie Claude Code rappelle : en comparant Cursor vs Claude Code vs Copilot, au-delà du SWE-bench et des tarifs, demandez — modifie-t-il en secret le prompt que vous envoyez au modèle ? Exécuter l'agent sur un Mac isolé et rebuildable est un choix pragmatique en 2026.