système : OPÉRATIONNEL
← retour à tous les hacks
AGENTS CRITICAL NEW

Escalade de privilèges de contexte : du texte hostile promu dans 12 agents de code

Un papier du 1er septembre 2026 montre que du contenu peu fiable peut être promu vers des rôles de message plus privilégiés et des portées plus persistantes dans 12 harnais d'agents, dont Claude Code et Codex.

2026-09-02 // 8 min affects: claude-code, codex, gemini-cli, qwen-code, kimi-cli, aider, opencode, cline, goose, pi-mono, openclaw, hermes-agent

De quoi s’agit-il ?

Un agent IA, c’est un modèle plus un harnais (harness) : le code qui décide de ce qui entre dans la fenêtre de contexte, depuis quels fichiers, et avec quelle étiquette de privilège. Les fournisseurs définissent une hiérarchie de rôles pour ces étiquettes (OpenAI utilise system, developer, user, assistant, tool, du plus au moins fiable) et entraînent les modèles à privilégier les rôles élevés en cas de conflit d’instructions. Cette hiérarchie est la principale défense structurelle dont dispose l’industrie contre l’injection de prompt indirecte.

Le 1er septembre 2026, Zichuan Li, Jian Cui, Ashley Chen, Xiaojing Liao et Luyi Xing (University of Illinois Urbana-Champaign) ont publié What’s in Your Agent’s Context? Context Privilege Escalation Attacks against AI Agent Harness (arXiv:2609.01222). Il s’agit, selon les auteurs, de la première analyse systématique de la façon dont les harnais réels assemblent le contexte.

Le constat : la hiérarchie tient à l’intérieur du modèle, mais le harnais fuit autour. Du texte hostile entré comme sortie d’outil peu privilégiée peut être réétiqueté vers le haut ou rendu persistant, sans que l’attaquant ne touche jamais la machine. Les auteurs distinguent deux classes :

  • M-CPE (message-role context privilege escalation) — un contenu issu d’une source peu privilégiée se retrouve porté par un rôle de message plus privilégié.
  • X-CPE (cross-scope context privilege escalation) — le contenu persiste au-delà du contexte où il a été introduit, survit aux redémarrages de l’agent et suit l’utilisateur vers d’autres projets.

Les auteurs ont mené des attaques de bout en bout contre 12 harnais très diffusés, dont Claude Code, Codex, Gemini CLI, Cline, OpenCode, Goose, Aider, Qwen Code, Kimi CLI, Pi-mono, OpenClaw et Hermes Agent.

Comment ça marche

Le papier recense 16 vecteurs d’attaque en trois catégories, qui se ramènent tous au même geste : amener le harnais à recopier votre texte dans un emplacement auquel il fait davantage confiance.

Diversité des sources de contexte. Les harnais chargent bien plus que le seul fichier mémoire documenté. Claude Code recherche des CLAUDE.md dans les répertoires qu’il touche à l’exécution — une archive non fiable simplement décompressée, jamais exécutée, peut donc y déposer un fichier mémoire que l’agent lira ensuite à un rôle plus élevé. Gemini CLI effectue en plus un parcours en largeur descendant depuis son répertoire de lancement : un fichier placé profondément dans l’arborescence d’une pull request récupérée est chargé, que la PR soit approuvée ou non. Plusieurs agents assemblent également des informations d’environnement : Claude Code exécute git log --oneline -n 5 au lancement et place la sortie dans le contexte de niveau système, ce qui transforme un message de commit en canal d’instruction.

Balisage du contexte. Presque tous les harnais séparent les segments de contexte par des balises de type XML — <available_skills>, <skill>, <description>, <system-reminder>. Ce sont du texte brut, pas des tokens spéciaux. Un contenu qui comporte la balise fermante correspondante s’échappe de son propre conteneur, et le texte qui suit se lit comme s’il appartenait au bloc englobant, plus fiable. Certains harnais vont plus loin et interprètent des balises issues de la sortie du modèle pour déclencher des appels d’outils : un contenu simplement recopié devient alors une action.

Logique d’assemblage. Les règles d’ordre de chargement sont exploitables en elles-mêmes. Codex préfère AGENTS.override.md à AGENTS.md lorsque les deux existent — une pull request qui ajoute un fichier d’override à un dépôt exécutant Codex en CI remplace donc les instructions de revue du mainteneur par celles du contributeur. Les imports récursifs @chemin dans les fichiers mémoire permettent à une seule ligne injectée de tirer une arborescence entière de contenus supplémentaires.

# Forme de l'escalade — aucun payload fonctionnel
[ r4 sortie d'outil ]  page web / archive / message de commit contrôlés par l'attaquant

        │  le harnais recopie, découvre ou réétiquette

[ r0-r2 ]  fichier mémoire · description de skill · configuration · bloc d'environnement

        │  la portée s'élargit : session ──> projet ──> utilisateur

   rechargé à chaque lancement, dans toutes les sessions futures

Pour mesurer le phénomène à l’échelle, les auteurs ont construit CoRA (Context Risk Analyzer), un pipeline assisté par LLM qui identifie statiquement les sources de contexte et leurs rôles depuis le code du harnais, les valide en exécutant réellement le harnais, puis génère automatiquement des preuves de concept à partir de la taxonomie de vecteurs. Sur les 12 harnais, CoRA a signalé 282 sources de contexte vulnérables. Les preuves de concept ont réussi avec GPT-5.5, GPT-5.4-mini et DeepSeek-V4-Flash. Les conséquences démontrées vont de l’invocation manipulée d’outils et de skills au déni de service, à la compromission complète de l’agent et à l’exécution de code à distance — la démonstration publiée sur Claude Code enchaîne la découverte de skills à l’exécution et une syntaxe de commande en ligne dissimulée dans un template de site téléchargé.

Pourquoi c’est important

La plupart des conseils de durcissement d’agents supposent que la frontière entre contenu fiable et non fiable se trace une fois, à l’ingestion. Le CPE dit l’inverse : cette frontière est retracée en permanence, par du code de harnais que l’utilisateur ne voit pas et que l’éditeur documente rarement. Vous pouvez relire chaque sortie d’outil et perdre quand même, parce que l’étape dangereuse survient après la relecture — quand le harnais décide que ce fichier-là, dans ce répertoire-là, mérite une étiquette plus élevée.

Trois conséquences méritent d’être distinguées.

La revue de code est une cible directe. Les scénarios de pull request ne sont pas un habillage théorique : un dépôt qui fait relire les contributions par un agent en CI accepte par conception des fichiers, des noms de répertoires et des messages de commit rédigés par l’attaquant. Les instructions atterrissent dans le contexte quel que soit le verdict de la revue.

La persistance change le profil de risque. Une injection indirecte ordinaire meurt avec la session. Le X-CPE écrit dans des fichiers rechargés à chaque lancement, ce qui convertit une injection ponctuelle en point d’ancrage qui suit le développeur vers des projets sans rapport.

L’opacité est la cause racine. Les utilisateurs ne peuvent pas énumérer ce que leur agent charge, depuis où, ni à quel rôle, parce que cette logique est propriétaire et non documentée. C’est le reproche central des auteurs, et c’est un problème de conception plutôt qu’une liste de bugs.

Défenses

Mettez vos agents à jour. Codex et Gemini CLI ont publié des versions atténuant une partie du problème. Comparez la version de votre harnais au tableau du papier avant de vous croire couvert.

Traitez tout fichier situé dans du contenu non fiable comme non fiable, y compris les fichiers mémoire et skills. Un CLAUDE.md, SKILL.md, AGENTS.md ou .cursor/rules arrivant dans une archive téléchargée, une dépendance ou une branche de pull request est une entrée attaquant déguisée en fichier de configuration.

N’exécutez pas d’agent depuis un répertoire contenant des arborescences tierces non relues. Pour les workflows de revue en CI, lancez l’agent hors du checkout, ou retirez de la branche les fichiers de configuration reconnus par l’agent avant son démarrage. Surveillez en particulier les variantes nommées « override » de vos fichiers d’instructions.

Faites appliquer par du code, pas par des prompts. La documentation éditeur est explicite : les fichiers mémoire sont du contexte, pas de la configuration appliquée. Anthropic indique que pour bloquer une action indépendamment de ce que décide le modèle, il faut un hook PreToolUse. Les listes de refus, les hooks et les bacs à sable tiennent là où les étiquettes de rôle cèdent.

Encadrez les imports et les chemins de chargement. Désactivez ou soumettez à approbation les imports récursifs @chemin, et excluez les fichiers mémoire dont vous n’êtes pas l’auteur — Claude Code expose claudeMdExcludes précisément pour cela, et demande confirmation avant de charger des imports externes depuis un fichier de projet.

Auditez ce qui a réellement été chargé, à chaque session. /context liste dans Claude Code les fichiers mémoire effectivement en jeu, et le hook InstructionsLoaded journalise quels fichiers d’instructions ont été chargés et pourquoi. Si vous ne pouvez pas énumérer les sources de contexte de votre agent, vous ne pouvez pas raisonner sur leurs privilèges.

Neutralisez le balisage dans les contenus encapsulés. Si votre harnais encadre du texte tiers par des balises, échappez ou supprimez ces séquences dans le contenu avant assemblage. Des délimiteurs que l’attaquant peut taper ne sont pas des délimiteurs.

Gardez les métadonnées d’environnement hors des rôles à forte confiance. Messages de commit, noms de branches, de répertoires et de fichiers sont contrôlables par l’attaquant dans un dépôt collaboratif. Leur place est au rôle le plus bas disponible, pas dans le bloc système.

Status

ÉlémentRéférenceDateNotes
Papier principalarXiv:2609.01222, Li, Cui, Chen, Liao, Xing (UIUC)2026-09-01Deux classes d’attaque (M-CPE, X-CPE) ; 16 vecteurs ; 282 sources de contexte vulnérables
Harnais analysésCodex, Claude Code, Gemini CLI, Qwen Code, Kimi CLI, Aider, OpenCode, Cline, Goose, Pi-mono, OpenClaw, Hermes Agent2026-09-01Les 12 sont visés par des preuves de concept de bout en bout
Modèles utilisés dans les PoCGPT-5.5, GPT-5.4-mini, DeepSeek-V4-Flash2026-09-01Attaques au niveau du harnais, non spécifiques à un modèle
OutillageCoRA (Context Risk Analyzer)2026-09-01Les auteurs annoncent une publication du code avec le papier
Démonstrations publiquesSite projet, zichuan.li/LLMAgentCPE2026-09-01Contient un cheminement découverte de skill → RCE sur Claude Code
Divulgation responsableSignalée aux 12 éditeurs/mainteneursCodex et Gemini CLI ont publié des versions correctives ; travaux en cours avec les autres
Recommandations éditeurDocumentation mémoire de Claude Code (Anthropic)À jourLes fichiers mémoire sont du contexte, pas une application ; claudeMdExcludes, approbation des imports externes, hooks PreToolUse
Cadres associésOWASP LLM Top 10 (LLM01 injection de prompt), OWASP Agentic Security Initiative2026Catégories privilèges et mésusage d’outils

Aucune exploitation dans la nature n’est documentée. La discussion des auteurs sur les mitigations privilégie la réduction du nombre de sources de contexte, le filtrage des tentatives d’escalade et la transparence de l’assemblage de contexte vis-à-vis des utilisateurs — ce dernier point n’étant aujourd’hui pleinement assuré par aucun éditeur.

Sources