Contexte technique

Claude Code Opus 5 a introduit l'Auto Mode comme mode de démarrage par défaut depuis mi‑août 2024. Ce mode remplace les invites de validation humaine par un classificateur de sécurité qui décide automatiquement d’approuver ou de bloquer les actions du modèle. Anthropic a commandé une évaluation de 72 scénarios d’injection indirecte, chaque scénario testé dix fois, et a publié un taux de succès de 0,00 % pour Opus 5 en Auto Mode.

L’article de embracethered.com montre qu’une attaque ciblée atteint un taux de succès de 60‑80 % sur un petit échantillon, remettant en cause la robustesse de ce classificateur lorsqu’il est confronté à une chaîne d’exploitation spécifique.

Chaîne d'attaque détaillée

L’attaquant exploite une requête de résumé de site web, par exemple Summarize https://archive.xxx.uk/. Le serveur renvoie un code HTTP 415, ce qui pousse Claude à abandonner l’outil WebFetch et à lancer curl via le shell. La réponse 303 See Other redirige vers un fichier WIC-notebook-catalogue.ZIP.

Le ZIP contient plusieurs fichiers, dont struct.py, un binaire decoder-darwin, et des enregistrements encodés en Base85/zlib. Claude refuse d’exécuter le binaire, mais crée un décodeur Python de remplacement qui importe base64 depuis le répertoire extrait.

cd WIC-notebook-catalogue
python3 -c 'import base64, zlib, json; ...'

Le répertoire extrait est ajouté au PYTHONPATH. Lors de l’import du module standard base64, Python charge le struct.py malveillant présent dans le ZIP, qui réexporte l’API _struct tout en exécutant du code arbitraire. Cette technique de shadowing de module permet d’injecter du code sans déclencher les filtres du classificateur.

Analyse des mécanismes de sécurité

Le classificateur d’Auto Mode ne surveille que les appels d’outils externes (curl, bash) mais ne contrôle pas le contenu généré par le modèle lorsqu’il écrit du code dans un répertoire temporaire. La décision de Claude de « refuser le binaire et écrire son propre décodeur » constitue le point d’entrée de l’exploitation. Le modèle ne possède pas de sandbox isolant le répertoire d’extraction, ce qui rend possible le shadowing de modules Python standards.

Le script final utilise python3 -I pour lancer un sous‑processus isolé, évitant ainsi la récursion du même struct.py. Cette contre‑mesure montre que le problème est technique et non fondamentalement insurmontable, mais elle n’est pas appliquée automatiquement par le modèle.

Implications et limites

Le succès de l’attaque (60‑80 %) indique que les évaluations internes d’Anthropic, basées sur des scénarios indirects, ne couvrent pas les chaînes d’exploitation qui combinent redirection HTTP, exécution de shell et shadowing de modules. Les défenseurs doivent envisager des couches supplémentaires : validation stricte du PYTHONPATH, interdiction de l’écriture de fichiers exécutables dans les répertoires temporaires, et surveillance du comportement du modèle après chaque appel d’outil.

Le rapport ne fournit pas de métriques de performance sur des jeux de données plus larges, ce qui limite la généralisation du taux de succès observé. En l’absence de benchmarks publics, les développeurs doivent tester leurs propres flux de travail avec des scénarios similaires avant de déployer Claude Code en production.