🔍 Contexte

Publié le 31 mars 2026 sur le blog lr0.org, cet article analyse le code source TypeScript de Claude Code (outil CLI d’Anthropic), accidentellement exposé via un fichier source map non obfusqué (cli.js.map). Le dépôt miroir a été publié sur GitHub à l’adresse https://github.com/chatgptprojects/claude-code. Le code comprend 1 897 fichiers pour environ 132 000 lignes de code.

🚨 Nature de la fuite

Anthropic a accidentellement inclus un fichier source map (cli.js.map) dans une version publique de Claude Code, exposant l’intégralité du code TypeScript non obfusqué. Ce type de fuite révèle la logique interne, les commandes cachées, les flags expérimentaux et les mécanismes de sécurité.

🔐 Mécanismes de sécurité identifiés

  • bashSecurity.ts (2 592 lignes) : système de validation de commandes shell contre des patterns d’attaque incluant :
    • Expansion =cmd de Zsh
    • zmodload (accès à zsh/mapfile)
    • Injection heredoc
    • Quoting ANSI-C ($'\x41')
    • Substitution de processus (<() et >())
    • emulate (exécution de code arbitraire en zsh)
    • ztcp (exfiltration TCP via builtins Zsh)
  • yoloClassifier.ts (1 495 lignes) : classificateur ML à deux étapes pour le mode bypassPermissions, décidant si un appel d’outil peut s’exécuter sans confirmation utilisateur
  • Système de permissions à cinq modes : default, acceptEdits, dontAsk, bypassPermissions, auto
  • Type analytique AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS : mécanisme de forcing function pour éviter l’envoi de chemins de fichiers ou de code vers les analytics

🕵️ Commandes internes cachées (build interne uniquement)

  • bughunter, commitPushPr, ctx_viz, goodClaude (désactivé), ultraplan, ultrareview, teleport, ant-trace

🧪 Feature flags expérimentaux

  • PROACTIVE (agent autonome), KAIROS (mode assistant/brief), COORDINATOR_MODE (orchestration multi-agents), AGENT_TRIGGERS (cron pour agents), VOICE_MODE, BUDDY (système de compagnons)

🛡️ Mécanisme anti-fuite de codenames

Dans src/buddy/types.ts, les noms d’espèces animales sont encodés en hexadécimal pour éviter qu’un nom de codename interne de modèle non publié n’apparaisse dans le bundle compilé, contournant un check grep sur excluded-strings.txt.

📊 Type d’article

Il s’agit d’une analyse technique d’un code source exposé accidentellement, visant à documenter les mécanismes internes de sécurité, les fonctionnalités cachées et les choix d’architecture d’un outil IA commercial.

🧠 TTPs et IOCs détectés

TTP

  • T1552.001 — Credentials In Files (Credential Access)
  • T1059.004 — Command and Scripting Interpreter: Unix Shell (Execution)

IOC

  • Fichiers : cli.js.map
  • Chemins : src/buddy/types.ts
  • Chemins : src/query.ts
  • Chemins : src/vim/
  • Chemins : bashSecurity.ts
  • Chemins : yoloClassifier.ts

🔗 Source originale : https://lr0.org/blog/p/claude-code-source/