Lire suffit à exposer un secret
Une recherche de texte restitue le contenu d'un fichier de secrets qu'elle traverse, et une règle de refus Read(./.env) ne s'applique pas à une commande shell qui lit des fichiers sans jamais nommer celui-là.
Une recherche de texte lancée sur un dossier entier renvoie chaque ligne qui contient le motif cherché, précédée du nom du fichier d'où elle vient. Un fichier .env caché qui contient ce motif remonte avec les autres résultats, sans qu'aucune lecture de ce fichier n'ait été demandée.
Ce qu'une règle Read(./.env) couvre
Une règle de refus Read(./.env), posée dans les réglages de permission, sert à empêcher Claude de lire ce fichier. La documentation des permissions de Claude Code l'applique aux outils de fichier intégrés de Claude, aux commandes shell de fichier que Claude Code reconnaît, comme cat, head, tail, sed ou tee, et aux redirections : la cible d'une redirection d'entrée < fichier relève des règles Read, celle d'une redirection de sortie > fichier des règles Edit. La même page pose ensuite deux exclusions en toutes lettres : une commande qui lit des fichiers sans les nommer, avec l'exemple de grep -r pattern . lancé depuis le dossier qui contient le fichier, et un sous-processus qui ouvre lui-même ses fichiers, comme un script Python ou Node.
Deux outils de recherche, deux régimes
Le mot recherche recouvre deux choses. La commande shell grep -r, que Claude lance dans un terminal, sort de la portée de la règle, comme le dit l'exclusion ci-dessus. L'outil de recherche intégré de Claude, lui, est un outil de fichier : la documentation annonce qu'elle applique les règles Read aux outils intégrés qui lisent des fichiers, comme Grep et Glob, dans la mesure du possible, sans lister les cas où cette application échouerait.
La démonstration
Un dossier jetable porte un faux fichier .env, et une règle de refus dans le fichier de réglages du projet, .claude/settings.json.
mkdir -p demo-env && cd demo-env
mkdir -p .claude
printf '{"permissions":{"deny":["Read(./.env)"]}}\n' > .claude/settings.json
printf 'CLE_FACTICE=exemple-pas-une-vraie-cle\n' > .env
grep -r CLE .
./.env:CLE_FACTICE=exemple-pas-une-vraie-cle
Lancée dans votre propre terminal, cette recherche ne teste aucune règle : les règles de permission ne s'appliquent qu'aux actions de Claude. Elle montre ce que la commande remonte. Le test de la règle se fait en ouvrant Claude Code dans ce dossier et en lui demandant de lancer la même recherche : d'après l'exclusion documentée, la règle ne l'arrête pas, alors qu'une demande d'afficher le fichier par cat .env est refusée d'après la même page. Un fichier de réglages accepté au démarrage ne dit pas ce que la règle bloque : c'est cet essai qui le dit.
Pour un blocage imposé par le système d'exploitation à tous les processus, la documentation renvoie au bac à sable de Claude Code : une isolation qui restreint l'accès des commandes shell aux fichiers et au réseau, processus enfants compris. Les règles de refus Read sont fusionnées dans sa configuration. Il tourne sur macOS, Linux et WSL2, pas sous Windows natif. La leçon sur ce qu'un agent peut faire fuiter sans qu'on le lui demande montre d'où peut venir une demande de lecture que personne n'a tapée : une instruction cachée dans un contenu que Claude lit.
Une règle de refus Read(./.env) empêche-t-elle une recherche de le révéler
Ce qu'une règle Read(./.env) couvre, d'après la documentation
| Accès tenté par Claude | Couvert par la règle |
|---|---|
| Outil de lecture intégré qui ouvre .env | Oui |
| Commande shell reconnue qui nomme le fichier, comme cat .env | Oui |
| Outil de recherche intégré, comme Grep | Dans la mesure du possible, selon la documentation |
| Commande grep -r qui ne nomme pas le fichier | Non, exclusion explicite |
| Script Python ou Node qui ouvre lui-même ses fichiers | Non, exclusion explicite |
Une administratrice ajoute une règle de refus Read(./.env) dans le fichier .claude/settings.json de son projet, pour protéger le fichier qui contient les identifiants de connexion. Elle ouvre Claude Code dans ce projet et la session démarre. Le lendemain, elle demande à Claude de chercher, dans tout le dossier du projet, chaque ligne qui contient un mot donné, par une commande shell de recherche récursive.
Écrivez en une phrase ce que cette situation établit, et en une phrase ce qu'elle n'établit pas.
Ce que cela établit : La règle Read(./.env) figure dans les réglages du projet et une session de Claude Code a démarré dans ce projet.
Ce que cela n’établit pas : Elle n'établit pas que la règle bloque quoi que ce soit, aucun essai de lecture n'étant rapporté, ni que la recherche du lendemain sera arrêtée, une recherche récursive qui ne nomme pas le fichier sortant de la portée documentée de la règle.
Les trois calibrages faux les plus courants
- Trop large La règle protège le fichier contre la recherche du lendemain comme contre une lecture directe, puisqu'elle vise son chemin.
- Trop étroit Le démarrage montre qu'un fichier de réglages existe, et ce qu'il contient reste inconnu.
- À côté La recherche du lendemain passera par l'outil de recherche intégré de Claude plutôt que par le terminal.
- Une règle Read(./.env) arrête les outils de fichier de Claude, les commandes shell reconnues qui nomment le fichier et une redirection d'entrée qui le vise.
- Une commande shell qui parcourt un dossier sans nommer le fichier, comme grep -r, sort de la portée documentée de la règle.
- L'outil de recherche intégré de Claude reçoit les règles Read dans la mesure du possible, ce qui se vérifie par un essai sur son propre poste.
- Une recherche lancée dans son propre terminal montre ce qu'une commande remonte, pas ce qu'une règle de Claude bloque.
- Le bac à sable reprend les règles de refus Read et les fait respecter par le système d'exploitation, processus enfants compris, hors Windows natif.
Rejouez la démonstration dans un dossier neuf, puis lancez claude dans ce dossier. Demandez-lui d'abord de lancer grep -r CLE . et notez si la ligne du faux .env s'affiche, demandez-lui ensuite d'afficher .env avec cat, puis de chercher CLE avec son outil de recherche intégré, et relevez pour chaque demande si elle passe ou si elle est refusée.
Ces points dépendent d’une interface ou d’une règle qui peut avoir changé depuis la rédaction. Vérifiez-les sur votre propre écran avant de vous y fier.
- La documentation applique les règles Read à l'outil de recherche intégré de Claude dans la mesure du possible, sans lister les cas d'échec : le geste de cette leçon le teste sur votre poste, et c'est ce résultat qui vaut pour votre version.
Chaque affirmation datable de cette leçon renvoie ici au texte public qui la porte. Une source qui ne s’ouvre pas ne prouve rien.