Fichier malveillant déclenchant l'exécution de code

Un fichier texte placé dans le dossier Téléchargements d'un client a conduit son agent de programmation à installer un paquet npm malveillant, selon des chercheurs de Forever Security. L'entreprise a reproduit l'attaque sur Codex et Claude Code sans qu'aucune faille ne soit à corriger. L'attaque reposait sur un fichier AGENTS.md placé dans le dossier ~/Downloads, qui servait aussi de répertoire de travail à l'agent. Personne n'avait placé ce fichier, et personne ne savait comment il était arrivé là.

Le fichier AGENTS.md contient les consignes du projet

Le fichier AGENTS.md regroupe les instructions qu'un agent de programmation suit sur un projet, des outils à utiliser à la manière d'exécuter les tests. Codex le lit au démarrage et exécute ce qu'il y trouve. Les chercheurs ont relevé que le dossier Téléchargements a une particularité : c'est le seul dans lequel le web peut écrire de lui-même. Chrome, Edge et Firefox y enregistrent leurs téléchargements sans demander où placer chaque fichier, et une page peut donc déposer un AGENTS.md à l'insu de l'utilisateur.

Une page web dépose des fichiers sans action de l'utilisateur

L'analyse de Forever Security montre qu'une page web peut déposer un fichier dans le dossier Téléchargements sans aucun clic. Une démonstration vérifiée par Bleeping Computer a effectivement réussi à récupérer un fichier au contenu anodin. Le Markdown, en revanche, ne s'exécute jamais, si bien qu'aucune mesure de sécurité ne s'applique. Entre les mains d'un agent, pourtant, ces instructions sont bel et bien exécutées.

Le risque augmente avec les habitudes de navigation des agents

Le risque s'accroît avec une autre habitude, celle de laisser les agents naviguer sur le web. Selon les mesures de Forever Security, un quart des sessions ouvrent un vrai navigateur, et la moitié des clients lancent au moins parfois un agent dans leur dossier Téléchargements. Claude Code y a été lancé plus de 1 300 fois. L'agent cherche parfois lui-même le fichier qui le ramène, et personne ne s'en aperçoit.

L'attaque démontre une exécution de code sur Codex

Un paquet installé sur Codex, et un jeton volé sur Claude Code. Les chercheurs ont rejoué le fichier du client tel quel, dans une machine virtuelle isolée. On ouvre Codex dans le dossier, on lui demande quelque chose, et avant de commencer la tâche, il ajoute à sa configuration un serveur « project tools » puis installe le paquet depuis npm. « Codex a exécuté le code de l'attaquant dès la première session », résument Gal Weizman et Omer Samet, qui font état d'un taux de réussite supérieur à 90 %.

L'attaque s'adapte aux défenses de Claude Code

Le fichier, un document de 13 Ko qui ressemble à un guide d'ingénierie, est écrit dans ~/.codex/config.toml, la configuration de toute la machine. Chaque session suivante charge alors le serveur du pirate, quel que soit le dossier. Claude Code s'est montré plus résistant, et l'attaque a dû changer de cible. Un fichier CLAUDE.md pousse l'agent à rediriger son trafic API vers un serveur contrôlé par les chercheurs, via la variable ANTHROPIC_BASE_URL glissée dans un fichier de paramètres. Chaque requête transporte alors le jeton OAuth de Claude, ce qui permet de se faire passer pour la victime auprès de la véritable API. Le serveur pirate répond ensuite au nom du modèle et renvoie des commandes que le client exécute. Claude Code a fini la chaîne dans environ la moitié des tentatives.

Les éditeurs nient toute responsabilité dans le risque

Du côté d'OpenAI et d'Anthropic, rien n'est à corriger. « Un agent qui suit le fichier AGENTS.md de son dossier fait exactement ce pour quoi il a été conçu », rappellent les chercheurs. Les deux éditeurs conseillent de lancer l'agent depuis le dossier du projet concerné, jamais depuis Téléchargements, et de garder actives les validations et le bac à sable. Pour les petites entreprises et les microentreprises, un développeur qui lance un agent sans ce cadre ouvre un nouveau point d'entrée aux pirates.

L'attaque repose sur l'interprétation de texte comme des commandes

Un fichier AGENTS.md ou CLAUDE.md sert souvent de « mémo de projet » que certains agents de programmation traitent comme une source d'instructions opérationnelles (outils à activer, commandes à lancer, règles de travail). Le Markdown n'exécute rien par lui-même, mais l'agent peut interpréter son contenu comme des directives, puis lancer des actions via le shell, un gestionnaire de paquets (npm) ou des « outils » internes. Le risque vient donc de la chaîne « texte → interprétation par l'agent → exécution par l'environnement », sans que le système d'exploitation ne voie de binaire suspect à bloquer.

Le dossier Téléchargements fonctionne comme une zone de dépôt accessible depuis le web

Il s'agit d'une forme d'injection de contexte : le fichier est inoffensif pour un humain, mais il devient actif par la logique de l'agent. Plus l'agent dispose de permissions (réseau, écriture de configuration, exécution de commandes), plus l'impact potentiel est élevé. Comment une page web peut-elle déposer un fichier dans le dossier Téléchargements sans action explicite, et pourquoi s'agit-il d'un vecteur d'attaque ? Les navigateurs autorisent le téléchargement de fichiers vers l'emplacement par défaut (souvent Téléchargements) sans demander à chaque fois un dossier de destination, surtout lorsque l'option « toujours demander où enregistrer » est désactivée. Une page peut donc déclencher un ou plusieurs téléchargements et faire apparaître un fichier dans ce dossier, même si l'utilisateur ne s'attend pas à y trouver des fichiers de « configuration ». Cela ne lance aucun exécutable, mais suffit à placer un document que l'agent lira automatiquement s'il utilise Téléchargements comme répertoire de travail.

La redirection du trafic API peut permettre le vol de jetons

Le dossier Téléchargements devient alors une « zone de dépôt » indirecte accessible depuis le web, ce qui pose problème lorsque des outils locaux y recherchent des fichiers de directives. L'attaque repose moins sur une faille du navigateur que sur l'hypothèse dangereuse selon laquelle un dossier alimenté depuis Internet peut servir de base de confiance pour un agent. Que signifie rediriger un client d'IA via une variable comme ANTHROPIC_BASE_URL, et comment cela peut-il mener au vol d'un jeton OAuth ? Une variable de type ANTHROPIC_BASE_URL sert à modifier l'URL du serveur d'API contacté par le client, ce qui permet en pratique de communiquer avec un proxy ou un faux point de terminaison contrôlé par un tiers. Si le client envoie son jeton OAuth dans les en-têtes (par exemple « Authorization »), ce jeton peut être récupéré par le serveur intermédiaire, puis réutilisé pour se faire passer pour l'utilisateur auprès du service légitime. Au-delà du vol d'identifiants, le proxy peut aussi renvoyer des réponses d'API « fausses mais plausibles » et influencer les actions locales du client (commandes, modifications de fichiers) s'il exécute les instructions contenues dans ces réponses. Il s'agit d'une variante d'attaque par détournement de point de terminaison, qui vise la couche de configuration plutôt qu'une faille cryptographique. Les protections efficaces sont une validation stricte des points de terminaison autorisés, l'isolation des secrets, et des confirmations explicites avant toute action à impact.