Les assistants de code comme Claude Code ou Cursor ne se contentent pas de suggérer des lignes : ils parcourent le projet, ouvrent des fichiers, lancent des commandes et lisent leurs résultats. C’est ce qui les rend utiles. C’est aussi la raison pour laquelle un fichier .env, une clé API ou un mot de passe de base de données peut se retrouver dans leur contexte, puis être transmis au service du fournisseur du modèle. Ce guide décrit les risques concrets, les réglages que proposent les éditeurs dans leur documentation officielle, et ce qu’une couche de contrôle locale peut ajouter.
Comment un secret se retrouve dans le contexte d’un assistant
Il n’y a pas besoin d’erreur spectaculaire. Le plus souvent, le secret arrive par un geste ordinaire :
- La lecture d’un fichier de configuration. Pour comprendre pourquoi une connexion échoue, l’assistant ouvre le .env, appsettings.json ou un fichier de configuration qui contient la chaîne de connexion complète.
- Une commande du terminal. Un « cat », un « grep » sur tout le projet, l’affichage des variables d’environnement ou des journaux d’une application peuvent faire apparaître des valeurs sensibles dans la sortie que l’assistant lit.
- Le collage dans la conversation. Le développeur colle lui-même un message d’erreur ou un extrait de configuration qui contient la clé.
- Les outils connectés. Un serveur MCP ou une commande d’envoi peut faire sortir des données vers un service tiers.
Une fois dans le contexte, le secret fait partie de ce qui est envoyé au modèle. Il peut aussi être recopié par l’assistant dans un fichier, un commit ou une réponse. Les secrets exposés restent d’ailleurs un problème massif : dans son rapport publié le 17 mars 2026, GitGuardian a recensé 28,65 millions de nouveaux secrets inscrits en dur dans des commits publics sur GitHub en 2025, soit 34 % de plus qu’un an plus tôt. Le même rapport compte 24 008 secrets exposés dans des fichiers de configuration de serveurs MCP.6 L’OWASP recommande de son côté de gérer les secrets de façon centralisée (stockage, accès, rotation) plutôt que de les laisser en clair dans le code ou la configuration.5
DB_PASSWORD=Xk92!pLmQ7[SECRET_1]
PAYMENT_API_KEY=a8F3kq0W…Zt[SECRET_2]
SMTP_PASSWORD=mT4#vR8w[SECRET_3]
Claude Code : permissions et crochets
La documentation de Claude Code décrit un système de permissions configurable dans des fichiers de réglages. Pour empêcher l’outil de lire un fichier ou un dossier, elle indique d’ajouter une règle de refus en lecture sur son chemin, par exemple Read(./.env) ou Read(./secrets/**).1 La page de référence des réglages fournit un exemple prêt à copier pour exclure les fichiers qui contiennent des clés API, des secrets ou des variables d’environnement.3 La documentation précise au passage qu’un fichier .claudeignore n’a aucun effet : ses entrées doivent être reprises sous forme de règles de refus.1
Ces règles s’appliquent aux outils de lecture intégrés, mais aussi aux commandes du terminal que Claude Code reconnaît, comme cat, head ou tail. La documentation en donne elle-même la limite : elles ne s’appliquent pas à une commande qui lit des fichiers sans les nommer, comme une recherche récursive lancée depuis le dossier, ni à un script qui ouvre lui-même des fichiers. Pour une protection au niveau du système, elle renvoie au bac à sable (sandbox) de Claude Code.1
Pour les organisations, Anthropic prévoit des réglages gérés (« managed settings »), déployés par les administrateurs et que les réglages des utilisateurs et des projets ne peuvent pas contourner, à quelques exceptions près.1 Claude Code propose enfin des crochets (hooks) : des commandes exécutées automatiquement à des moments précis. Celui qui s’exécute avant l’appel d’un outil (PreToolUse) peut le bloquer.2 C’est sur ce mécanisme officiel que s’appuient les contrôles complémentaires, dont celui de Tacite-IA.
Cursor : le fichier .cursorignore
Cursor permet de déclarer, dans un fichier .cursorignore placé à la racine du projet, les dossiers et fichiers auxquels l’éditeur ne doit pas accéder pour ses fonctions d’IA. Selon sa documentation, les fichiers .env* figurent déjà dans la liste des fichiers ignorés par défaut.4
La même page indique clairement deux limites : les outils de terminal et de serveurs MCP utilisés par l’agent ne peuvent pas bloquer l’accès aux fichiers couverts par .cursorignore, et, si Cursor bloque les fichiers ignorés, une protection complète n’est pas garantie en raison du caractère imprévisible des modèles de langage.4 Ces précisions ont leur place dans l’analyse de risque de toute équipe qui utilise l’outil.
Ce que les réglages natifs ne couvrent pas
Les réglages natifs sont une première couche indispensable. Ils reposent cependant sur des listes de chemins : un secret stocké dans un fichier au nom anodin (config.local.json, notes.txt), copié dans un journal ou affiché par une commande échappe à une règle écrite pour « .env ». Ils doivent aussi être configurés projet par projet, ou centralisés par l’organisation, sans quoi chaque développeur part de zéro.
| Critère | Règles de refus | Fichier d’exclusion | Contrôle local |
|---|---|---|---|
| Empêche la lecture directe d’un .env | Oui | Oui | Oui |
| Couvre les commandes du terminal | En partie | Non | En partie |
| Repère un secret dans un fichier au nom anodin | Non | Non | Oui |
| Propose une copie anonymisée | Non | Non | Oui |
L’ANSSI recommande une posture de prudence lors du déploiement de l’IA générative.7 Appliquée aux assistants de code, elle se traduit par des secrets absents du poste quand c’est possible, des règles de refus là où ils subsistent, et un contrôle qui regarde le contenu lui-même. Côté dépôt, l’analyse des secrets proposée par les plateformes, comme le secret scanning de GitHub qui parcourt tout l’historique Git, rattrape une partie des erreurs après coup.8
La couche Tacite-IA : bloquer la lecture et proposer une copie
Tacite-IA s’installe sur le poste et s’appuie sur les crochets officiels des assistants de code. Dans Claude Code, chaque action est examinée avant d’avoir lieu :
- Lecture d’un fichier sensible (.env, clés SSH, identifiants cloud, clés privées, fichiers de configuration avec secrets) : la lecture est suspendue et une confirmation est demandée, ou refusée si l’organisation l’a décidé.
- Contenu analysé, pas seulement le nom : un fichier lu par l’outil de lecture ou par une commande comme cat ou grep est analysé sur le poste. S’il contient des secrets ou des données personnelles, Tacite-IA écrit une copie anonymisée et indique son emplacement : l’assistant peut travailler sur la structure sans voir les valeurs.
- Commandes d’envoi : un envoi de fichier vers l’extérieur (curl, scp…) ou une tentative de désactiver la protection déclenche une confirmation.
- Messages tapés : une clé collée dans la conversation est repérée avant l’envoi, avec la version anonymisée proposée.
Les contrôles s’étendent aux autres assistants de code pris en charge (Cursor, Windsurf, OpenAI Codex, Gemini CLI, Copilot CLI), dans la mesure de ce que leurs propres crochets permettent. Comme toute analyse de commande, celle de Tacite-IA ne voit pas ce qu’un script ouvre de lui-même : le bac à sable et la bonne gestion des secrets restent nécessaires. L’analyse est faite sans IA et rien n’est envoyé à nos serveurs : la console ne reçoit que des types de données et des décisions, jamais le contenu.
Les bonnes pratiques côté projet
- Sortir les secrets du dépôtFichier .env ignoré par git, modèle .env.example sans valeur.
- Préférer un gestionnaire de secretsCoffre-fort ou variables injectées au lancement plutôt qu’un fichier en clair.
- Limiter la portée des clésClés de développement, droits minimaux, environnement de test.
- Prévoir la rotationUne clé exposée se révoque et se remplace, sans attendre.
- Régler l’assistantRègles de refus ou fichiers d’exclusion pour les chemins sensibles.
- Ajouter un contrôle sur le postePour les cas que les réglages ne couvrent pas.
Ces règles méritent une place dans la charte de l’organisation, à côté de celles qui concernent les assistants conversationnels : notre modèle de charte IA mentionne les codes d’accès parmi les données à ne jamais saisir. Pour les autres types de données, voir notre guide pour anonymiser ses données avant ChatGPT.
Questions fréquentes
Claude Code peut-il lire mon fichier .env ?
Oui, s’il en a la permission : l’outil lit les fichiers du projet pour accomplir ses tâches. La documentation de Claude Code indique comment l’en empêcher avec des règles de refus en lecture, par exemple Read(./.env) et Read(./secrets/**), et précise qu’un fichier .claudeignore n’a aucun effet.
Le fichier .cursorignore suffit-il à protéger mes secrets ?
C’est une protection utile, et les fichiers .env* sont ignorés par défaut. Mais la documentation de Cursor précise que les outils de terminal et MCP de l’agent ne peuvent pas bloquer l’accès aux fichiers ignorés, et qu’une protection complète n’est pas garantie. Mieux vaut ne pas garder de secrets en clair dans le projet et ajouter un contrôle complémentaire.
Que faire si une clé API a été envoyée à un assistant de code ?
La considérer comme exposée : la révoquer, en créer une nouvelle et vérifier les journaux d’utilisation du service concerné. Si la clé donnait accès à des données personnelles, évaluer s’il s’agit d’une violation de données au sens du RGPD.
Les secrets peuvent-ils fuiter par une commande du terminal ?
Oui. Afficher un fichier, chercher dans tout le projet ou lister les variables d’environnement produit une sortie que l’assistant lit. Les règles qui portent sur des noms de fichiers ne couvrent pas tous ces cas, comme le reconnaissent les documentations de Claude Code et de Cursor ; le bac à sable et un contrôle qui analyse la commande et son contenu réduisent ce risque.
Sources
- Configure permissions. Documentation de Claude Code, Anthropic. Consulté le 8 octobre 2026.
- Hooks reference. Documentation de Claude Code, Anthropic. Consulté le 8 octobre 2026.
- Settings reference: exclude sensitive files. Documentation de Claude Code, Anthropic. Consulté le 8 octobre 2026.
- Ignore file. Documentation de Cursor (Anysphere). Consulté le 8 octobre 2026.
- Secrets Management Cheat Sheet. OWASP Cheat Sheet Series. Consulté le 8 octobre 2026.
- The State of Secrets Sprawl 2026. GitGuardian, 17 mars 2026. Consulté le 8 octobre 2026.
- Recommandations de sécurité pour un système d’IA générative. ANSSI, 29 avril 2024. Consulté le 5 octobre 2026.
- About secret scanning. GitHub Docs. Consulté le 8 octobre 2026.
ChatGPT est une marque d’OpenAI, Copilot de Microsoft, Claude d’Anthropic, Gemini de Google, Cursor d’Anysphere. Les autres noms de produits cités appartiennent à leurs propriétaires respectifs. Tacite-IA n’est affilié à aucun de ces éditeurs. Article informatif, qui ne constitue pas un conseil juridique.