Trois heures après qu’un autre afflux de CVE a frappé les serveurs MCP, une seconde divulgation de masse a touché la pile des agents IA. Six CVE, tous attribués par [email protected], publiés entre 20:17:41.107 et 20:17:41.843 UTC — un écart de 0,74 seconde — pointent tous vers le site de divulgation d’un chercheur. Ils visent Agno, LiteLLM, gpt-researcher, crewai-tools et PentestGPT.

La vulnérabilité qui compte

CVE-2026-37004 : « BerriAI litellm <=1.82.4 is vulnerable to Server-Side Template Injection (SSTI), which allows unauthenticated remote attackers to execute arbitrary OS commands via a crafted dotprompt_content parameter in the /prompts/test endpoint due to use of an unsandboxed jinja2.Environment. » LiteLLM est un proxy que des milliers d’équipes déploient devant leurs modèles.

Le correctif est réel et présent dans le code actuel : prompt_manager.py importe désormais ImmutableSandboxedEnvironment avec le commentaire en ligne « Sandboxed env: templates can come from user input via /prompts/test. ». Il remonte au commit d910a956, daté du 9 avril 2026, dont le titre est « fix(proxy): improve input validation on management endpoints. » Le diff remplace Environment( par ImmutableSandboxedEnvironment(. Il n’y avait ni avis de sécurité, ni CVE, ni mention dans le sujet de ce commit de template injection ou d’exécution de code à distance. La version 1.82.4 a été publiée sur PyPI le 18 mars ; la version actuelle est 1.98.0.

Ce que le cadrage courant passe à côté

La formule la plus facile à citer est « RCE non authentifiée dans LiteLLM, divulguée le 27 août ». La date qui compte est le 9 avril. Pendant 140 jours, quiconque lisait le changelog de LiteLLM pour décider d’une mise à jour n’avait aucun élément : le correctif de sécurité le plus grave de cette version était présenté dans le registre d’un simple nettoyage de lint.

L’entrée Agno échoue dans l’autre sens. Elle vise un comportement documenté, voulu et toujours livré. « Up to and including 2.5.8 » laisse entendre une 2.5.9 corrigée ; elle n’existe pas. runpy.run_path(...) et exec(code, self.safe_globals, self.safe_locals) figurent aujourd’hui dans main, à travers un passage à la version majeure 3.0.1, sous l’avertissement d’exécution de la bibliothèque elle-même : « PythonTools can run arbitrary code, please provide human supervision. » Un outil dont le but est d’exécuter du Python écrit par un modèle n’est pas une RCE non corrigée, et le plafond de version fabrique un correctif qui n’existe pas.

Six divulgations, zéro sévérité

Le bloc metrics est vide pour les six. Aucun CVSS de MITRE, aucun du chercheur, aucun de NVD. Une RCE non authentifiée dans un proxy largement déployé et une crédential de télémétrie codée en dur dans PentestGPT arrivent dans la base formellement à égalité, et les scanners en aval les ignoreront soit inventeront un score. Deux entrées plafonnent aussi une release candidate<= 1.10.2rc1 — comme borne affectée, face à la version actuelle 1.15.18 de crewai-tools, ce qu’aucun résolveur de dépendances ne peut exploiter.