CrewAI : un repli silencieux du bac à sable transforme l'injection de prompt en RCE (VU#221883)
Quatre failles CrewAI permettent de chaîner injection de prompt, RCE, SSRF et lecture de fichiers via un Code Interpreter qui sort silencieusement de Docker. La mise à jour CERT/CC du 20 mai 2026 confirme le correctif complet.
De quoi s’agit-il ?
CrewAI — un framework très répandu pour orchestrer des systèmes multi-agents — a livré une chaîne de quatre vulnérabilités qui permettent à un attaquant de transformer une injection de prompt en exécution de code à distance (RCE) sur l’hôte. Les failles ont été signalées par Yarden Porat (Cyata) et publiées dans la note de vulnérabilité CERT/CC VU#221883 le 30 mars 2026 (rendue publique le 26 mars). La note a été révisée le 20 mai 2026, quand CrewAI a confirmé que les quatre failles — CVE-2026-2275, CVE-2026-2285, CVE-2026-2286, CVE-2026-2287 — sont désormais corrigées dans les versions actuelles. Au moment de la divulgation initiale, aucun correctif complet n’existait : c’est cette clôture du 20 mai qui constitue l’actualité ici.
Comment ça marche
La cause racine est une dégradation silencieuse de la sécurité, pas un exploit exotique. Le Code Interpreter Tool de CrewAI est censé exécuter le Python généré par l’agent dans un conteneur Docker. Lorsque Docker est inaccessible — ou s’arrête en cours d’exécution — l’outil bascule vers un environnement SandboxPython en mémoire, plus faible, au lieu d’échouer de façon sûre. Un attaquant capable d’influencer l’agent (directement, ou indirectement via un document ou une page web empoisonnés que l’agent lit) chaîne les quatre failles :
Vulnérabilité Emplacement Effet
----------------- ---------------------------- --------------------------------------
CVE-2026-2275 Repli du CodeInterpreterTool Évasion du bac à sable : appels C
arbitraires via ctypes si Docker absent
CVE-2026-2287 Pas de vérif. Docker runtime Repli silencieux vers bac à sable -> RCE
CVE-2026-2286 Outils de recherche RAG SSRF : URL runtime non validées vers
services internes / métadonnées cloud
CVE-2026-2285 Outil de chargement JSON Lecture de fichier arbitraire, sans
validation de chemin
CVE-2026-2275 se déclenche lorsque allow_code_execution=True est défini, ou lorsqu’un développeur ajoute manuellement le Code Interpreter Tool. Les trois autres sont des défauts de configuration et de validation. Aucun payload exploitable n’est reproduit ici — la référence technique canonique est la note CERT/CC. Le point est structurel : un outil annoncé comme « bac à sable » exécutait silencieusement du code en dehors du bac à sable.
Pourquoi c’est important
L’impact dépend de la configuration de l’hôte, et au pire il s’agit d’une compromission complète. Selon le CERT/CC, un attaquant qui atteint un agent CrewAI avec le Code Interpreter Tool activé peut obtenir une évasion de bac à sable plus RCE/lecture de fichier lorsque Docker est présent, ou une RCE complète lorsque l’hôte tourne en mode configuration ou unsafe. Les primitives SSRF et lecture arbitraire permettent le vol d’identifiants — atteindre les points de métadonnées cloud ou lire des secrets sur le disque — pivot classique d’un agent compromis vers le reste de l’environnement.
Deux leçons dépassent largement CrewAI. D’abord, « bac à sable par défaut, non sécurisé en repli » est un piège : toute couche d’isolation qui se dégrade en silence quand une dépendance manque finira par tourner en mode dégradé en production. Ensuite, l’injection de prompt est le vecteur de livraison, pas la vulnérabilité — l’agent exécute fidèlement des instructions influencées par l’attaquant, et les dégâts ne sont bornés que par ce que les outils alentour autorisent. C’est le schéma de la « trifecta létale » (entrée non fiable + exécution de code/outils + portée sensible) réalisé dans un framework grand public.
Défenses
Le correctif propre consiste à passer à une version actuelle de CrewAI, où les failles sont corrigées. Selon la déclaration de l’éditeur dans VU#221883 (20 mai 2026) : le Code Interpreter Tool et son repli SandboxPython non sécurisé ont été entièrement supprimés (PR #4791 et #5309), allow_code_execution est déprécié au profit de bacs à sable externes comme E2B ou Daytona, et des fonctions centralisées validate_file_path() et validate_url() (PR #5310 et #5315) bloquent désormais le path traversal et le SSRF vers les adresses privées, internes et de métadonnées cloud, dans RagTool et plus de 20 outils.
Si vous ne pouvez pas mettre à jour immédiatement :
- Désactivez le Code Interpreter Tool partout où il n’est pas strictement nécessaire, et ne définissez pas
allow_code_execution=Truesauf si vous disposez d’un bac à sable externe et appliqué. - Échouez de façon sûre, ne basculez jamais. Traitez « Docker indisponible » comme un arrêt net de l’exécution de code, pas comme une raison de retomber sur un interpréteur en mémoire. Surveillez la disponibilité de Docker et alertez en cas de repli.
- Traitez toutes les entrées de l’agent comme non fiables — y compris documents, sorties d’outils et contenus web récupérés — et limitez les outils qu’un agent peut appeler selon la provenance de ses entrées.
- Filtrez le trafic sortant de l’hôte. Bloquez l’accès à
169.254.169.254et aux plages internes pour qu’une primitive SSRF ne puisse atteindre ni les métadonnées cloud ni les services internes. - Auditez la porte de sortie. Le correctif livre un override
CREWAI_TOOLS_ALLOW_UNSAFE_PATHS=truequi désactive la nouvelle validation de chemin — vérifiez qu’il n’est défini dans aucun déploiement.
État des lieux
| Élément | Référence | Date | Notes |
|---|---|---|---|
| Éditeur notifié | CERT/CC | 2026-01-05 | Début de la divulgation coordonnée |
| Divulgation publique | CERT/CC VU#221883 | 2026-03-26 → 03-30 | Signalé par Yarden Porat (Cyata) |
| CVE-2026-2275 (RCE / évasion) | VU#221883 | 2026-03-30 | Évasion ctypes sur le repli SandboxPython |
| CVE-2026-2287 (RCE) | VU#221883 | 2026-03-30 | Absence de vérification Docker au runtime |
| CVE-2026-2286 (SSRF) | VU#221883 | 2026-03-30 | URL d’outils RAG non validées |
| CVE-2026-2285 (lecture fichier) | VU#221883 | 2026-03-30 | Path traversal du chargeur JSON |
| Correctif complet confirmé | CERT/CC (révision 3) | 2026-05-20 | Outil supprimé ; validateurs chemin/URL ajoutés |
Le titre n’est pas « un framework d’IA avait des bugs » — c’est qu’un outil présenté comme un bac à sable Docker exécutait silencieusement du code hors de ce bac à sable lorsque la dépendance disparaissait, et qu’une injection de prompt suffisait à l’atteindre. Le correctif est arrivé ; la leçon de conception — l’isolation doit échouer de façon sûre — est ce qu’il faut retenir pour votre propre pile d’agents.