Retour
2026/10/29
Fichiers AGENTS.md et CLAUDE.md malveillants : comment un dossier Téléchargements peut détourner les agents de code IA
Un fichier d’instructions déposé dans Téléchargements a tenté de faire installer un malware npm à un agent IA. Les faits, la recherche et les défenses.
Points clés
- Un fichier
AGENTS.mddéposé dans le dossier~/Downloadsd’un utilisateur a demandé à un agent de code IA d’installer un paquet npm connu pour être malveillant. La tentative a été stoppée avant l’exécution du moindre code. - Lors de tests en laboratoire, OpenAI Codex a suivi un fichier d’instructions malveillant dans plus de 90 % des tentatives. Claude Code l’a suivi environ une fois sur deux.
- Ce n’est pas un bogue qu’un correctif peut régler. Les agents font confiance aux fichiers d’instructions du dossier dans lequel ils démarrent, et les navigateurs peuvent écrire des fichiers dans Téléchargements.
- Les principales défenses sont simples : ne jamais démarrer un agent dans Téléchargements, lire les fichiers d’instructions que vous n’avez pas écrits, vérifier que la configuration de l’agent ne contient pas de points de terminaison que vous n’avez pas définis, et garder les approbations et les sandboxes activées.
Ce qui s’est passé
Le 22 octobre 2026, la société de sécurité Forever Security a publié « Markdown Is the New Executable », signé Gal Weizman et Omer Samet. L’article décrit un incident réel survenu sur la machine d’un client de l’entreprise. Un agent de code IA travaillait dans le dossier ~/Downloads de l’utilisateur, et un fichier AGENTS.md présent dans ce dossier lui a demandé d’installer function-color, un paquet npm malveillant. Forever a arrêté l’agent avant l’installation du paquet et avant l’exécution de tout code malveillant.
Personne ne sait comment le fichier est arrivé dans le dossier Téléchargements. Forever indique ne pas avoir pu le déterminer, et les articles de BleepingComputer et de The Hacker News reprennent ce point. Forever a ensuite conçu des démonstrations en laboratoire pour montrer comment une page web pourrait déposer un tel fichier et ce qu’un agent en ferait.
Le paquet lui-même n’est pas nouveau. Checkmarx et CloudSEK rattachent function-color à la campagne MALFEX sur npm. Le paquet est une simple enveloppe qui tire function-flag. Le script d’installation de ce dernier télécharge et exécute une charge supplémentaire depuis un serveur distant. La campagne cible Windows, et Checkmarx indique que son opérateur est actif depuis août 2023. Lorsque nous avons consulté le registre npm le 29 octobre 2026, function-color, function-flag et cdn-img-fetch avaient tous été remplacés par le paquet de substitution 0.0.1-security de npm.
Pourquoi un fichier Markdown peut piloter un agent
L’argument de Forever repose sur deux comportements ordinaires qui deviennent dangereux lorsqu’ils se combinent.
- Les agents chargent automatiquement les fichiers d’instructions. Les agents de code lisent les fichiers d’instructions du projet au démarrage et les traitent comme des consignes de l’utilisateur. Codex lit
AGENTS.mddepuis la racine du projet jusqu’au dossier courant. S’il n’y a pas de racine de projet, il ne lit que le dossier courant. Claude Code chargeCLAUDE.mddepuis le dossier où il démarre et depuis tous les dossiers parents. Il litAGENTS.mdà la place lorsqu’aucunCLAUDE.mdn’est présent. - Le web peut écrire dans Téléchargements. Selon BleepingComputer, Chrome, Edge et Firefox enregistrent par défaut les fichiers dans Téléchargements sans demander où les placer. Une page peut choisir le nom et le contenu du fichier. Un fichier Markdown n’est pas un programme : les contrôles du système d’exploitation sur les exécutables téléchargés ne le considèrent donc pas comme dangereux.
Ensemble, ces deux comportements permettent à une page web de déposer un fichier qu’un agent lira plus tard comme des instructions. Il n’est pas nécessaire de « tromper » l’agent au sens habituel : il fait exactement ce pour quoi il a été conçu. Forever souligne aussi que certains agents naviguent sur le web de manière autonome. Dans ce cas, il se peut qu’aucune personne ne voie le téléchargement se produire.
La même logique s’applique au-delà de Téléchargements. Tout dossier que du contenu non fiable peut atteindre est concerné : un dépôt fraîchement cloné, une archive décompressée ou un dossier partagé. Avec Claude Code, un projet décompressé dans un sous-dossier de Téléchargements charge aussi un CLAUDE.md situé dans le dossier Téléchargements lui-même, car les fichiers des dossiers parents sont également chargés.
Ce que la recherche a démontré
Forever a testé deux agents. La plupart des essais ont utilisé une charge inoffensive de substitution (ouvrir la calculatrice). Le véritable paquet malveillant n’a été exécuté qu’une seule fois, dans une machine virtuelle isolée.
OpenAI Codex
Les chercheurs ont réutilisé le véritable AGENTS.md provenant de la machine du client. Le fichier demandait à Codex d’ajouter une entrée de serveur MCP à sa configuration globale, ~/.codex/config.toml. Cette entrée lançait au démarrage une commande qui installait le paquet npm. La configuration étant globale, la modification persiste dans toutes les sessions Codex ultérieures sur la machine, et pas seulement dans celle qui a lu le fichier. Forever indique que l’attaque a nécessité plusieurs contournements : un document long et fastidieux, une session enfant lancée avec des flags de contournement du sandbox, et une méthode de lancement qui évitait le délai d’expiration au démarrage de Codex. Malgré cela, Codex a exécuté la charge dans plus de 90 % des tentatives.
Claude Code
Pour Claude Code, les chercheurs ont rédigé leur propre CLAUDE.md, présenté comme des notes de configuration d’une passerelle d’API interne. Il demandait à Claude d’écrire un paramètre ANTHROPIC_BASE_URL dans le fichier .claude/settings.json du projet, afin de rediriger le trafic de l’API vers un serveur contrôlé par les chercheurs. Selon Forever, cela fait fuiter le jeton OAuth de la session. Cela permet aussi au serveur de l’attaquant de se faire passer pour le modèle et de renvoyer des appels d’outils, y compris des commandes shell avec le sandbox désactivé. Forever a démontré le vol du jeton (rejoué pour agir à la place de la victime) et l’exécution de code au lancement suivant. Les chercheurs ont aussi montré une voie qui déclenchait l’attaque dans la même session en lançant un sous-agent.
Cette attaque a été moins fiable. Claude Code demande une approbation avant d’écrire dans les fichiers de paramètres et a souvent refusé la modification suspecte. Forever fait état d’un succès environ une fois sur deux, et d’environ une tentative sur cinq pour la voie du sous-agent dans la même session.
Ce qui n’a pas été démontré
- Forever n’a pas établi comment le vrai fichier est arrivé dans le dossier Téléchargements du client. La voie du téléchargement web est une possibilité démontrée, pas une cause confirmée.
- Seuls Codex et Claude Code ont été testés. Forever estime que d’autres agents qui chargent des fichiers d’instructions sont exposés de la même manière, mais ne les a pas testés.
- Les articles ne citent pas de versions précises des outils et ne rapportent aucune déclaration des éditeurs. La position de Forever est que « there is nothing here for OpenAI or Anthropic to patch » (il n’y a rien ici qu’OpenAI ou Anthropic puisse corriger) : les agents fonctionnent comme prévu.
Pourquoi c’est important
Les fichiers d’instructions passent facilement inaperçus parce qu’ils ressemblent à de la documentation. En pratique, ils jouent le rôle d’une configuration et, via un agent disposant d’un accès au shell, ils peuvent jouer le rôle de code. Trois points rendent le risque concret :
- Les agents sont souvent lancés dans Téléchargements. On utilise des agents pour trier des fichiers ou travailler sur quelque chose que l’on vient de télécharger. Forever a indiqué à BleepingComputer que des centaines de ses clients exécutent des agents de code depuis Téléchargements, avec plus de 1 300 sessions Claude Code lancées à cet endroit.
- L’impact survit à la session. Une configuration globale modifiée, un nouveau serveur MCP ou un point de terminaison d’API redirigé continuent de fonctionner après la suppression du fichier d’origine.
- Les identifiants sont la cible. Un jeton de session d’agent volé est un accès valide. Un attaquant peut l’utiliser sans exécuter le moindre code sur la machine.
Défenses pratiques
1. Choisir où démarrent les agents
- Ne démarrez jamais un agent de code dans
~/Downloads, ni dans un dossier où écrivent les navigateurs, la messagerie ou les applications de chat. Déplacez ou clonez d’abord le travail dans un dossier de travail dédié. - Évitez aussi de démarrer des agents dans votre répertoire personnel. Lancez-les dans le dossier du projet concerné. BleepingComputer note qu’OpenAI et Anthropic recommandent la même chose.
- Envisagez de configurer votre navigateur pour qu’il demande où enregistrer chaque téléchargement. Cela ajoute un clic, mais empêche les téléchargements silencieux.
2. Rechercher les fichiers d’instructions que vous n’avez pas écrits
Fouillez les emplacements où arrivent les fichiers non fiables, ainsi que votre dossier personnel. Sous Linux et macOS :
find ~/Downloads ~/Desktop ~ -maxdepth 3 \( -name AGENTS.md -o -name AGENTS.override.md -o -name CLAUDE.md -o -name CLAUDE.local.md \) -print 2>/dev/null | sort -u
Sous Windows, dans PowerShell :
Get-ChildItem $HOME\Downloads, $HOME\Desktop -Recurse -Depth 3 -Force -ErrorAction SilentlyContinue -Include AGENTS.md, AGENTS.override.md, CLAUDE.md, CLAUDE.local.md | Select-Object FullName, LastWriteTime
Lisez chaque fichier trouvé avant qu’un agent ne s’en approche. Méfiez-vous fortement des instructions demandant d’installer des paquets, d’ajouter des serveurs, de modifier des points de terminaison d’API ou de désactiver les approbations. Vérifiez aussi vos fichiers d’instructions personnels, ~/.codex/AGENTS.md et ~/.claude/CLAUDE.md, car ils s’appliquent à toutes les sessions.
Un fichier d’instructions de projet légitime décrit comment le projet est compilé et testé. Il n’a aucune raison de modifier la configuration globale de votre agent, son point de terminaison d’API ou ses paramètres de sécurité. Considérez comme hostile tout fichier qui demande ces modifications.
3. Vérifier la configuration de l’agent pour repérer les modifications que vous n’avez pas faites
Suivant les conseils de Forever, recherchez des blocs de serveur MCP inattendus, un chatgpt_base_url modifié, ou un ANTHROPIC_BASE_URL ou tout autre point de terminaison d’API que vous n’avez pas défini :
grep -nE '^\[mcp_servers|base_url' ~/.codex/config.toml
grep -nE 'BASE_URL|mcpServers' ~/.claude/settings.json .claude/settings.json .claude/settings.local.json .mcp.json 2>/dev/null
Les équipes qui utilisent Claude Code peuvent imposer les paramètres de manière centralisée grâce aux paramètres gérés. Elles peuvent aussi utiliser les hooks ConfigChange pour auditer ou bloquer les modifications de paramètres pendant une session.
4. Garder les garde-fous activés
- Laissez les demandes d’approbation et le sandbox activés. Évitez les flags qui les contournent, comme
--dangerously-bypass-approvals-and-sandboxpour Codex ou--dangerously-skip-permissionspour Claude Code, en dehors d’un environnement jetable. - Lisez attentivement les demandes d’approbation portant sur les fichiers de paramètres et de configuration. Dans le test de Claude Code, c’est l’étape d’approbation qui a stoppé l’attaque environ une fois sur deux.
- Lisez la boîte de dialogue de confiance de l’espace de travail de Claude Code avant de l’accepter pour un nouveau dossier.
- Travaillez sur les dépôts et téléchargements non fiables dans une machine virtuelle ou un dev container, et non sur votre poste de travail principal.
- Pour npm, bloquez les paquets MALFEX connus et envisagez
ignore-scriptspour les installations que vous n’avez pas vérifiées.
5. Si vous trouvez un fichier déposé
- Ne démarrez pas d’agent dans ce dossier. Conservez une copie du fichier pour l’enquête, puis retirez-le du dossier.
- Vérifiez les fichiers de configuration de l’agent mentionnés ci-dessus et supprimez tout ce que vous n’avez pas ajouté.
- Partez du principe que le jeton de session de l’agent a pu fuiter. Déconnectez-vous puis reconnectez-vous, et renouvelez toutes les clés d’API auxquelles l’agent pouvait accéder.
- Recherchez
function-coloretfunction-flagdans les lockfiles et les dossiersnode_modules. Si l’un d’eux a été installé, considérez la machine comme compromise et suivez votre procédure de réponse aux incidents.
Vue d’ensemble
Le titre de Forever est « Markdown Is the New Executable » (le Markdown est le nouvel exécutable). C’est une manière utile d’envisager tout fichier qu’un agent lit comme des instructions. Les fichiers d’instructions déterminent ce que fera ensuite un agent disposant d’un accès au shell ; ils méritent donc le même soin que des scripts : savoir d’où ils viennent, relire les modifications qui leur sont apportées et les tenir à l’écart des dossiers dans lesquels n’importe qui sur internet peut écrire. Les remèdes sont ici surtout des habitudes, pas des correctifs, et ils coûtent peu à adopter.
Références
- Forever Security, « Markdown Is the New Executable » (22 octobre 2026), la source principale
- BleepingComputer, « AI coding agents hijacked using AGENTS.md file in Downloads folder » (25 octobre 2026)
- The Hacker News, « Malicious File in Downloads Folder Tries to Trick AI Coding Agent Into Installing Malware » (26 octobre 2026)
- Checkmarx, campagne de malware MALFEX sur npm (5 octobre 2026)
- CloudSEK, campagne MALFEX d’attaque de la chaîne d’approvisionnement via des scripts postinstall npm malveillants
- OpenAI, documentation AGENTS.md de Codex
- Anthropic, documentation sur la mémoire (CLAUDE.md) de Claude Code et documentation sur la sécurité de Claude Code
Global
Japan
Korea
China
Taiwan
Vietnam
Thailand
Indonesia
Portugal
Spain
Germany
Egypt
Russia