AAP-003 : falsification d'outils et contournement de primitives shell
HERMES AGENTIC SECURITY SCORE & MENACE
Cible :Outils Terminaux d'Agents & Allowlists de Commandes Le HASS classe l'AAP-003 à un niveau EXTRÊME (91/100). L'attaque détourne la boucle d'exécution autonome de l'agent (ex. mode Auto-Run), permettant à un attaquant distant d'exécuter du code arbitraire sans confirmation du développeur en altérant l'environnement d'une session shell rémanente.
AAP-003: Tool Parameter Tampering & Built-in BypassMODÈLE D'ATTAQUE
2. Chaîne d’exécution du motif d’attaque
Section intitulée « 2. Chaîne d’exécution du motif d’attaque »AAP-003 : de l'Empoisonnement d'Environnement à la Compromission Hôte
Fenêtre de Contexte de l'Agent L'adversaire insère une consigne dissimulée dans un fichier de documentation ou une pull request incitant l'agent à configurer une variable d'environnement spécifique.
Filtre d'Allowlist Terminal L'agent émet une commande interne shell (ex. export BASH_ENV=/tmp/payload.sh). Comme export est une primitive intégrée et non un binaire sur disque, le filtre l'autorise sans confirmation.
Processus Sous-Shell Interactif Le sous-shell persistant enregistre BASH_ENV. Tout sous-shell non interactif lancé ultérieurement évaluera et exécutera automatiquement le script hostile.
Binaire Autorisé (ex. git) L'agent lance une commande autorisée (ex. git branch ou npm test). Le sous-shell instancié charge BASH_ENV et exécute la charge utile de l'attaquant en arrière-plan.
OS du Développeur La charge utile s'exécute avec l'ensemble des privilèges de la session utilisateur, établissant un shell inversé vers le C2 adverse.
3. Mécanisme technique et cause racine
Section intitulée « 3. Mécanisme technique et cause racine »Cette vulnérabilité résulte d’un écart sémantique entre la validation de chemins de binaires sur disque et la sémantique avec état d’un interpréteur shell :
- Filtrage syntaxique naïf : de nombreux IDEs et agents CLI (tels que Cursor avant la v2.3, documenté dans CVE-2026-22708) inspectent uniquement le premier mot de la commande :
// Modèle vulnérable : vérifie le premier terme sans bloquer les built-insconst isAllowed = ['git', 'npm', 'pytest', 'ls', 'cat'].includes(command.split(' ')[0]);
- Les primitives internes ne sont pas des binaires : les shells POSIX exécutent
export,typeset,declareetaliasen interne. Si le filtre ne les interdit pas explicitement, la commande s’exécute silencieusement. - Persistance d’état de session : dans une session terminale persistante, toute mutation d’environnement impacte l’ensemble des commandes suivantes.
4. Ingénierie de détection
Section intitulée « 4. Ingénierie de détection »title: Manipulation de Variables d'Environnement Shell par un Agentid: 4b21c910-c124-4f56-91e8-348b6c003001status: productiondescription: Détecte l'exécution de commandes altérant des variables d'environnement critiques (BASH_ENV, PROMPT_COMMAND, LD_PRELOAD) par des processus d'IDE ou d'agents.references: - https://hermes-codex.vercel.app/fr/agentic-attack-patterns/aap-003-tool-parameter-tampering/ - https://hermes-codex.vercel.app/fr/cve/2026/cve-2026-22708/author: Hermes Codex AI Security Labdate: 2026-09-07logsource: category: process_creation product: linuxdetection: selection_parent: ParentImage|contains: - 'cursor' - 'code' - 'windsurf' - 'electron' selection_cmd: CommandLine|contains: - 'export BASH_ENV=' - 'export PROMPT_COMMAND=' - 'export LD_PRELOAD=' - 'export PYTHONPATH=' - 'typeset -x BASH_ENV' - 'declare -x BASH_ENV' condition: selection_parent and selection_cmdfields: - ParentImage - CommandLine - Userlevel: criticaltags: - attack.execution - attack.t1059.004 - hermes.aap-003-- Détecter les processus shell de développement avec BASH_ENV ou LD_PRELOAD frelatésSELECT p.pid, p.name, p.cmdline, pe.key, pe.valueFROM processes pJOIN process_envs pe ON p.pid = pe.pidWHERE pe.key IN ('BASH_ENV', 'PROMPT_COMMAND', 'LD_PRELOAD', 'NODE_OPTIONS') AND (pe.value LIKE '/tmp/%' OR pe.value LIKE '/dev/shm/%' OR pe.value LIKE '%.sh');5. Mesures de durcissement
Section intitulée « 5. Mesures de durcissement »| Couche Défensive | Préconisation | Implémentation |
|---|---|---|
| Exécution sans état | Imposer des sous-shells éphémères | Exécuter chaque outil d’agent via env -i /bin/bash -c ... pour purger l’environnement hérité. |
| Analyse AST formelle | Parser l’arbre syntaxique du shell | Utiliser un analyseur de grammaire shell (tree-sitter) pour identifier les affectations et commandes internes. |
| Validation humaine obligatoire | Bloquer l’Auto-Run sur les built-ins | Exiger une confirmation systématique pour toute altération de variable shell. |
| Sandboxing MicroVM | Isoler l’espace d’exécution | Exécuter l’agent dans un conteneur éphémère ou une microVM sans accès aux identifiants hôtes. |