Attaque AGENTS.md dans Downloads : vérifiez Codex et Claude Code
Inspectez les fichiers d’instructions téléchargés avant de lancer un agent de programmation. Vérifiez la configuration utilisateur de Codex, la priorité des paramètres de Claude Code et les traces d’installation de function-color. Distinguez l’incident observé des essais en laboratoire, révoquez les identifiants concernés et vérifiez votre passerelle sans considérer les paramètres utilisateur comme une barrière de sécurité.
Sommaire

Ne lancez pas Codex ou Claude Code dans ~/Downloads ni dans un autre dossier qui reçoit des fichiers non vérifiés. Pour vérifier votre exposition à l’attaque AGENTS.md dans Downloads, inspectez les fichiers d’instructions et la configuration avant de relancer ces outils. Si vous trouvez un endpoint non autorisé ou des traces d’installation d’un paquet malveillant, arrêtez les sessions concernées et révoquez les identifiants correspondants.
Cette procédure concerne Codex et Claude Code exécutés localement, avec des paramètres vérifiés au 2026-10-28. Elle vous permet de dresser la liste des fichiers à examiner, de vérifier la configuration et de décider si une réponse à incident s’impose.
Ce que l’attaque dans Downloads a démontré
L’attaque associe des instructions non fiables à des modifications de la configuration de l’agent lui-même. Markdown ne s’exécute pas tout seul : l’agent fournit les outils.
Le rapport du 22 octobre de Forever Security décrit une tentative d’installation bloquée, déclenchée par le fichier ~/Downloads/AGENTS.md d’un client. La manière dont ce fichier est arrivé sur la machine reste inconnue.
- Reproduction avec Codex : les instructions ont enregistré un serveur d’outils Model Context Protocol (MCP) dans
~/.codex/config.toml. Elles utilisaientlaunchctletnpmpour installerfunction-color. Un processus enfant a exécutécodex execavec--dangerously-bypass-approvals-and-sandbox. - Reproduction avec Claude Code :
CLAUDE.mda provoqué une modification deANTHROPIC_BASE_URLdans.claude/settings.json. Les chercheurs ont capturé un jeton OAuth, qui authentifie le compte connecté, puis renvoyé de faux appels àBash. Un sous-agent ouvrait parfois la connexion redirigée pendant la même session. Selon le rapport, l’écriture de cette configuration nécessitait une approbation humaine.
Le taux de réussite rapporté dépassait 90% pour Codex et atteignait environ 50% pour la modification de configuration de Claude. L’exécution dans la même session de Claude réussissait dans environ un essai sur cinq. La plupart des essais utilisaient une calculatrice comme substitut ; le véritable paquet a été exécuté une fois dans une machine virtuelle isolée. Ces chiffres décrivent les essais des chercheurs, pas votre risque personnel.
Le comportement du navigateur dépend aussi de sa configuration. La documentation de Chrome décrit un dossier de téléchargement configurable, une demande facultative de l’emplacement d’enregistrement et des notifications de téléchargement. Le téléchargement d’un fichier et la compromission d’un agent sont deux événements distincts.
Gardez les protections actuelles activées. Codex 0.165.0 ignore les instructions des projets explicitement déclarés non fiables. OpenAI documente également les chemins .codex protégés par sa politique par défaut workspace-write. Un dossier déjà examiné peut recevoir de nouveaux fichiers qui ne l’ont pas été.
Faites une première vérification d’environ cinq minutes
Inspectez les fichiers depuis un terminal ordinaire et un éditeur de texte, en laissant les agents arrêtés. Prévoyez environ cinq minutes pour un espace de travail familier ; cette durée reste une estimation. Examiner les anomalies et remettre une machine en état demande davantage de temps.
1. Repérez les fichiers d’instructions avant de lancer un agent
Commencez par le répertoire de travail réel et le dossier de téléchargement. Dans Bash, sur macOS ou Linux, cette commande liste uniquement les noms de fichiers si ripgrep, rg, est installé :
pwd -P
rg --files --hidden --no-ignore \
-g 'AGENTS.md' -g 'AGENTS.override.md' \
-g 'CLAUDE.md' -g 'CLAUDE.local.md' \
-g '**/.claude/settings*.json' \
-g '**/.codex/config.toml' -g '.mcp.json' \
-g '!**/.git/**' -g '!**/node_modules/**' \
"$HOME/Downloads"
Remplacez le dernier chemin si votre navigateur télécharge ailleurs. Répétez la recherche dans le répertoire d’un projet téléchargé ou cloné. Sans rg, cherchez ces noms dans un gestionnaire de fichiers en affichant les fichiers cachés.
La commande liste les chemins sans lancer d’agent ni afficher les valeurs de configuration. Résolvez les erreurs de permissions ou de répertoire absent avant d’interpréter un résultat vide. Elle n’inspecte pas les archives et ne suit pas les liens symboliques imbriqués. Elle ne prouve pas non plus que la machine est saine.
Ouvrez les fichiers trouvés comme du texte brut. Cherchez des instructions qui demandent de réécrire les paramètres de l’agent, de changer de fournisseur, d’installer des outils inattendus ou de désactiver les approbations. Examinez séparément les fichiers d’instructions importés ou liés.
Inspectez aussi les instructions globales dans votre répertoire de configuration Codex et dans ~/.claude/CLAUDE.md. Codex recherche les instructions du projet depuis la racine détectée jusqu’au répertoire de travail. Sans racine de projet, il vérifie uniquement le répertoire courant. Incluez AGENTS.override.md et les éventuels noms de fichiers alternatifs configurés.
Claude Code charge aussi les fichiers d’instructions des répertoires parents. Entrer dans un sous-dossier de Downloads ne garantit donc pas que ces instructions cessent d’être chargées. Conservez l’espace de travail vérifié hors de l’arborescence des téléchargements.
2. Vérifiez la configuration Codex qui s’applique à plusieurs projets
Ouvrez ~/.codex/config.toml avant de lancer Codex. Cette configuration appartient à l’utilisateur ; une modification peut donc affecter les autres projets de cet utilisateur. Si vous avez défini CODEX_HOME, inspectez plutôt le fichier config.toml de ce répertoire.
Vérifiez aussi le fichier du profil sélectionné par votre lanceur et les fichiers de projet .codex/config.toml applicables. Le guide de configuration d’OpenAI explique quelles couches sont chargées. Son guide avancé décrit les répertoires de configuration et les profils.
| Paramètre | Points à vérifier |
|---|---|
[mcp_servers.<name>] | Identifiez le serveur et examinez intégralement ses valeurs command, args, cwd, env ou son url distante. |
chatgpt_base_url | Confirmez que toute modification de l’adresse du service ChatGPT était intentionnelle. |
openai_base_url, model_provider et model_providers.<id>.base_url | Vérifiez que la route de l’API correspond au fournisseur que vous avez approuvé. |
projects.<path>.trust_level | Examinez les décisions de confiance enregistrées, notamment pour les dossiers généraux comme Downloads. |
MCP relie les agents à des outils. Une configuration de serveur MCP local peut lancer un processus. Vérifiez ses arguments et sa destination, en plus du nom qui l’identifie.
Un serveur inconnu mérite une vérification. Un nom générique ou la présence de npm, npx ou launchctl ne suffit pas à établir qu’il s’agit d’un logiciel malveillant.
Au 2026-10-28, la référence de configuration de Codex indique que les paramètres locaux du projet ne peuvent pas remplacer chatgpt_base_url ni les clés de routage des fournisseurs. Cette restriction n’annule pas une modification non autorisée de la configuration utilisateur.
3. Vérifiez les paramètres de Claude Code et leur priorité
Examinez toutes les sources de paramètres susceptibles de définir l’endpoint. Pour une session lancée à la racine d’un projet, vérifiez ces fichiers :
| Fichier | Portée |
|---|---|
~/.claude/settings.json | Vos paramètres pour l’ensemble des projets. |
.claude/settings.json | Les paramètres partagés de ce projet. |
.claude/settings.local.json | Vos paramètres locaux pour ce projet. |
Si vous utilisez CLAUDE_CONFIG_DIR, cherchez le fichier utilisateur dans ce répertoire de configuration. Sur un appareil professionnel, demandez à l’administrateur quels paramètres sont gérés par l’organisation.
Inspectez env.ANTHROPIC_BASE_URL, HTTP_PROXY et HTTPS_PROXY. Vérifiez quelles variables d’authentification sont définies, sans copier leurs valeurs secrètes dans une conversation ou des journaux. Examinez aussi les hooks inattendus et les modifications des règles de permissions.
Anthropic documente ANTHROPIC_BASE_URL comme une variable qui remplace l’endpoint de l’API. Sa présence est normale pour une passerelle approuvée. Un nom d’hôte inconnu, une modification inexpliquée ou un endpoint fourni par des instructions téléchargées demande une investigation.
L’ordre de priorité des paramètres de Claude Code place les paramètres locaux du projet au-dessus des paramètres partagés. Tous deux sont prioritaires sur les paramètres utilisateur. Dans la plupart des sessions, une valeur env d’un fichier de paramètres remplace aussi la même variable héritée du shell. Définir l’endpoint au niveau utilisateur ou l’exporter depuis le shell ne le protège donc pas contre les modifications.
En cas d’intégration MCP inattendue, inspectez également .mcp.json. Les consignes de sécurité MCP d’Anthropic expliquent que d’autres portées et des plugins peuvent ajouter des serveurs en dehors de ce fichier.
4. Recherchez des traces d’installation
Examinez les métadonnées des paquets et les journaux si un agent a été exécuté dans un répertoire suspect. Depuis ce répertoire, cette commande Bash affiche uniquement les noms des fichiers correspondants :
rg -l --hidden --no-ignore -F 'function-color' \
-g 'package.json' -g '*lock*' \
-g 'npm-shrinkwrap.json' -g '*.log' \
-g '!**/.git/**' \
.
Examinez les résultats localement. Inspectez aussi /tmp/ptools et les journaux d’installation npm pertinents, s’ils existent. Une recherche limitée au projet peut manquer des installations effectuées ailleurs.
L’analyse du paquet par Checkmarx identifie les versions 1.0.0 et 1.7.3 de function-color comme des enveloppes malveillantes autour de function-flag. Le composant de téléchargement examiné cible Windows. Ne concluez pas qu’une charge malveillante précise a été exécutée simplement parce qu’une configuration macOS mentionne le paquet.
Une mention dans un article diffère d’une dépendance installée ou d’un journal d’installation. Un fichier de verrouillage des dépendances ne prouve pas, à lui seul, qu’un script d’installation a été exécuté. Des traces d’installation justifient de considérer la machine comme potentiellement compromise jusqu’à la fin des investigations. N’installez pas le paquet et ne l’importez pas pour le tester. Une recherche vide n’exclut ni des charges malveillantes renommées ni des preuves supprimées.
Agissez selon les résultats avant de vous reconnecter
Révoquez les identifiants exposés depuis un appareil de confiance avant de réutiliser la configuration concernée. Suivez la démarche qui correspond aux éléments trouvés :
- Instructions inconnues, sans preuve de leur utilisation : conservez le fichier pour l’examiner et placez-le hors des emplacements où l’agent cherche ses instructions. Inspectez la configuration avant de déterminer si des identifiants ont été exposés.
- Endpoint non autorisé qui a pu recevoir des requêtes authentifiées : considérez que l’identifiant concerné a pu être exposé. Révoquez-le et examinez l’activité du compte.
- Preuves d’exécution du code d’un paquet malveillant : isolez la machine et impliquez votre équipe de sécurité. Conservez les fichiers et journaux pertinents avant le nettoyage. Supprimer le fichier Markdown ne retire pas le code installé et n’invalide pas les identifiants volés.
Pour l’authentification liée à un abonnement Claude, utilisez les contrôles des sessions du compte Claude. Dans Settings → Account, révoquez les sessions concernées ou déconnectez toutes les sessions du compte. Si les jetons Claude Code figurent dans Settings → Claude Code, supprimez l’autorisation concernée à cet endroit. Anthropic précise que la déconnexion de toutes les sessions inclut les jetons Claude Code et setup-token.
Les clés API nécessitent une action distincte. Les instructions d’Anthropic pour une clé compromise demandent de supprimer la clé concernée et d’en créer une autre. La déconnexion du compte ne révoque pas les clés API.
Pour l’accès à OpenAI, suivez ses instructions en cas de compromission d’un compte. Fermez les sessions, supprimez les clés API exposées, examinez l’activité et contactez l’assistance. Ne supposez pas que supprimer un fichier local d’identifiants invalide une session distante volée.
Rétablissez une configuration vérifiée et retirez les intégrations de démarrage non autorisées avant de vous authentifier à nouveau sur la machine. Si vous ne pouvez pas déterminer ce qui a été exécuté, cessez de l’utiliser pour le développement courant pendant l’investigation.
Gardez le contrôle des passerelles légitimes
Choisissez vous-même l’adresse de la passerelle et vérifiez l’origine de ce paramètre. Pour un usage personnel, conservez l’endpoint approuvé dans votre configuration utilisateur ou dans un environnement shell que vous contrôlez. Les équipes administrées de manière centralisée doivent suivre leur procédure de déploiement approuvée.
Traitez un endpoint fourni par le projet comme une modification de configuration à examiner. Il peut s’agir d’un paramètre légitime de l’équipe. Se présenter comme une passerelle interne ne suffit toutefois pas à justifier son approbation.
Par exemple, les instructions de BetterToken pour Claude Code utilisent https://bettertoken.ai, sans /v1, et votre propre clé API BetterToken. Cet accès API est distinct d’un abonnement Claude. Utilisez l’identifiant fourni par la passerelle ; ne transmettez pas un jeton OAuth d’abonnement.
Pour une intégration Codex choisie volontairement, comparez le bloc du fournisseur avec le guide de configuration d’un fournisseur personnalisé dans Codex. N’utilisez pas chatgpt_base_url comme paramètre générique de l’API du modèle.
Après avoir vérifié la configuration ou terminé la remise en état, vous pouvez tester la connexion de Claude Code en excluant les paramètres et personnalisations du projet. Lancez cette commande depuis un répertoire de projet déjà examiné :
claude --safe-mode --setting-sources user --permission-mode default
La référence de la CLI documente ces options. Le mode sûr ignore les personnalisations comme les fichiers d’instructions, les plugins et les serveurs MCP. L’authentification et les permissions restent actives. La configuration utilisateur et les politiques gérées doivent toujours être dignes de confiance. Le mode de permissions default porte le libellé Manual.
Si votre client refuse une option, consultez claude --help et les instructions officielles de mise à jour avant de poursuivre.
Utilisez /status pour vérifier les sources de paramètres chargées. Envoyez ensuite un prompt court, comme Reply with OK. Do not use tools. Une réponse doit apparaître dans le terminal. Si le fournisseur propose des journaux, rapprochez l’heure de la requête pour confirmer la route suivie par cet appel. Ce test compte comme une utilisation normale du modèle.
Le nom qu’un modèle s’attribue ne vérifie pas l’endpoint. Si la route reste incertaine, suivez les vérifications du fournisseur actif dans Claude Code. Arrêtez-vous si la configuration change de manière inattendue. Ce test de connexion ne prouve pas que la machine est saine.
Séparez les téléchargements du travail quotidien des agents
Utilisez un répertoire de projet vérifié, hors du dossier de téléchargement du navigateur. Pour un CSV téléchargé, vérifiez-le puis copiez uniquement le fichier nécessaire dans cet espace de travail. Déplacer un dossier entier sans l’examiner déplace aussi ses fichiers d’instructions.
Dans Chrome, ouvrez Settings → Downloads et activez Ask where to save each file before downloading, qui demande où enregistrer chaque fichier. Cette option ajoute une étape de décision ; elle ne remplace pas l’examen des fichiers déjà enregistrés.
Gardez les restrictions du bac à sable et les contrôles d’approbation activés. La documentation de sécurité de Codex distingue le bac à sable des commandes, les connexions MCP et le trafic d’authentification du client. Un bac à sable de commandes en lecture seule ne rend pas sûre l’initialisation d’une configuration non vérifiée.
Répétez cette vérification après un clonage, l’extraction d’une archive ou une modification des paramètres de l’agent. Si une tâche impose d’exécuter du code non fiable, utilisez un environnement isolé sans vos identifiants habituels de développement.