veilletech.fr
31 août Feed du jour
#05 IA Article

Claude Code : le mode Auto piégé à 80 %

Le refus d'exécuter le binaire était l'exploit.

Le mode Auto, activé par défaut dans Claude Code depuis la mi-août, remplace les demandes d'approbation par un classificateur de sécurité. Une chaîne d'attaque publiée par Johann Rehberger atteint 60 à 80 % de réussite là où une évaluation tierce commandée par Anthropic annonçait 0,00 %, en exploitant l'ombrage de module Python plutôt qu'une faiblesse du modèle.

3 min de lecturevidéo 1:15
Partager
Sommaire4 sections
  1. Ce qui se passe
  2. Comment la chaîne fonctionne
  3. Ce que ça change
  4. À retenir

Ce qui se passe

Le mode Auto de Claude Code remplace les demandes d'approbation humaine par un classificateur de sécurité. Il est le mode de démarrage par défaut depuis la mi-août. Anthropic a fait évaluer sa résistance par un prestataire externe, Trajectory Labs : 72 scénarios d'injection indirecte, dix passages chacun, et un taux de réussite affiché de 0,00 % pour Opus 5 en mode Auto.

Johann Rehberger a construit une chaîne ciblée contre ce même mode. Sur un échantillon volontairement réduit, il obtient 60 à 80 % de réussite, à partir d'une demande banale : résumer le contenu d'un site.

Comment la chaîne fonctionne

Sa qualité est de ne jamais donner d'instruction au modèle. Elle se contente de rendre le chemin dangereux plus attrayant que les autres.

python3Site contrôléClaude (modeAuto)python3Site contrôléClaude (modeAuto)décide seul de réessayeren Bash avec curlstruct.py de l'attaquantest chargé → exécution de codeWebFetch de la pageHTTP 415 (type de médianon supporté)curl de la racineHTTP 303 vers l'archive ZIPextrait l'archive,refuse le binairefourniécrit son propre décodeur, l'exécutedans le dossier extraitimport base64 →import struct

Chaque étape mérite d'être lue pour ce qu'elle est. Le 415 ne demande rien : Claude constate l'échec de WebFetch et bascule vers le shell de lui-même, ce qui le fait sortir de l'outil encadré. L'archive contient des enregistrements encodés en Base85 et zlib, une somme de contrôle, un README plausible et un décodeur compilé.

Et c'est là que la décision de sécurité devient le vecteur : Claude refuse d'exécuter le binaire inconnu, ce qui est le bon réflexe, puis écrit son propre décodeur Python à la place. Il le lance depuis le dossier extrait. Python place le répertoire courant dans son chemin de recherche de modules ; le module base64 de la bibliothèque standard importe struct ; l'archive contient un struct.py. C'est celui de l'attaquant qui s'exécute.

Ce que ça change

Rien ici ne relève d'une faiblesse du modèle. L'ombrage de module est un piège Python vieux comme le langage, et la chaîne l'atteint sans jamais formuler d'ordre — ce que l'auteur rapproche davantage de l'ingénierie sociale que d'une « injection » au sens classique.

La conséquence pratique est nette : le mode Auto réduit le risque par rapport à --dangerously-skip-permissions, mais ce n'est pas une frontière de sécurité. Il ne remplace pas l'isolation. Les recommandations de l'auteur, pour un agent qui traite du contenu non fiable :

  1. Exécuter les agents non surveillés dans un conteneur, une VM ou un bac à sable système.
  2. Restreindre le trafic sortant.
  3. Ne pas exposer au runtime de l'agent le répertoire personnel, les clés SSH ou les identifiants cloud.
  4. Poser des règles explicites d'autorisation et de refus autour de la création de processus et des chemins sensibles.
  5. Surveiller ce que l'agent lance.

Comme il l'écrit : « Security invariants are not optional. »

Source : Embrace The Red — Breaking Claude Code Opus 5 Auto Mode