
CVE-2026-33017 - Exploit RCE non autenticato in Langflow
codificato da: Xer0TLabs x Persephrak Decentralized Syndicate
Questo documento è una spiegazione di alto livello del programma Python fornito, per revisione, risposta agli incidenti e analisi difensiva. Intenzionalmente non include istruzioni operative, indicazioni sulla selezione dei target, esempi di payload o procedure per ottenere accesso a un sistema.
Lo script si definisce come un exploit per una presunta vulnerabilità di esecuzione remota di codice non autenticata in Langflow. Questo README descrive ciò che il codice tenta di fare; non valida in modo indipendente l'identificativo CVE, le versioni interessate, il comportamento degli endpoint, gli advisory dei vendor o l'efficacia dello script.
Il programma è strutturato come uno strumento di automazione da riga di comando che tenta di inviare dati JSON appositamente costruiti a un endpoint HTTP di Langflow. La sua premessa dichiarata è che Python controllato dall'utente, incorporato in una definizione di flusso, verrà elaborato dall'applicazione remota.
Se questa premessa regge su un target, lo script è progettato per trasformarla in esecuzione arbitraria di comandi del sistema operativo. Oltre a un controllo di esecuzione di base, contiene routine progettate per stabilire persistenza, creare una sessione remota interattiva, eseguire comandi di ricognizione e generare localmente una coppia di chiavi SSH.
Poiché queste capacità potrebbero compromettere sistemi senza autorizzazione, il codice deve essere trattato come potenzialmente dannoso o come strumento a duplice uso. Non deve essere eseguito contro sistemi a meno che l'attività non sia esplicitamente autorizzata e disciplinata da un ambito di test definito.
Il programma importa moduli Python standard per l'analisi degli argomenti, la gestione JSON, le richieste HTTP, i socket, i thread, l'esecuzione di sottoprocessi e l'accesso ai file.
Disabilita globalmente la normale verifica dei certificati TLS tramite ssl._create_unverified_context. Ciò fa sì che le richieste HTTPS accettino certificati non validi o non attendibili. Sebbene a volte presente nel codice di test, questo è pericoloso in produzione perché indebolisce la protezione contro l'intercettazione e l'impersonificazione.
Colors definisce sequenze di escape ANSI per terminale utilizzate per stampare output colorati.
Logger è una piccola classe di utilità che stampa messaggi informativi, di successo, di avviso e di errore. Il suo metodo banner() visualizza il titolo dello script, la presunta vulnerabilità, la presunta gamma di prodotti interessati, la gravità e lo stato CISA KEV. Queste affermazioni sono testo di presentazione nel programma e non sono prova che le affermazioni siano accurate.
Questa è la classe principale. Quando viene inizializzata:
http:// se manca.L'ID di flusso predefinito è un valore fisso simile a un UUID. Il programma consente di sovrascriverlo tramite un'opzione da riga di comando.
_build_malicious_payload(command) crea un oggetto JSON che assomiglia a un grafo di flusso con un nodo. Il nodo è marcato come CustomComponent e include codice sorgente Python in un campo code.
Il sorgente inserito tenta di invocare un comando del sistema operativo. Prima prova un'API Python e ripiega su una chiamata a sottoprocesso se si verifica un errore. La struttura JSON viene quindi restituita al codice di invio della richiesta.
Questa è la logica principale dell'exploit: presuppone che il servizio ricevente esegua il codice inviato durante l'elaborazione del grafo.
_send_exploit_request(payload_data) serializza il payload come JSON ed effettua una richiesta HTTP POST all'endpoint costruito. Include intestazioni convenzionali simili a quelle di un browser e restituisce sia il testo del corpo della risposta sia lo stato HTTP.
Gli errori HTTP vengono catturati e restituiti anziché terminare il programma. Altre eccezioni, come errori di connessione o timeout, vengono convertite in stringhe e restituite con stato 0.
check_vulnerability() invia un payload contenente un comando marcatore e poi tratta sia una risposta HTTP riuscita sia qualsiasi risposta contenente la parola error come prova che il target "sembra vulnerabile".
Questo non è un metodo di verifica affidabile. Una risposta 200, una risposta 500 o un errore dell'applicazione possono verificarsi per molte ragioni non correlate all'esecuzione del codice. Lo script non osserva in modo indipendente l'output del marcatore, quindi può produrre falsi positivi.
execute_command(command) avvolge il comando fornito nel payload di flusso dannoso e lo invia. Interpreta HTTP 200 o 500 come un possibile esito positivo.
Ancora una volta, i codici di stato da soli non dimostrano l'esecuzione remota di comandi. Da una prospettiva di revisione difensiva del codice, questo metodo tenta di rendere lo strumento flessibile consentendo a un operatore di fornire comandi OS arbitrari.
_build_ssh_payload() e inject_ssh_key() sono progettate per modificare la configurazione SSH remota e i file delle chiavi autorizzate. Le azioni tentate includono la creazione di directory SSH, l'aggiunta di una chiave pubblica SSH, la modifica dei permessi, la modifica delle impostazioni del demone SSH, il riavvio del servizio SSH, la creazione di un meccanismo di persistenza basato su cron e la rimozione di artefatti della cronologia della shell.
Questi sono comportamenti di persistenza ed elusione delle difese, non un controllo benigno della vulnerabilità. Il programma può dichiarare il successo semplicemente in base a uno stato HTTP, senza confermare che un file o un servizio sia stato effettivamente modificato.
_build_reverse_shell_payload() assembla molteplici meccanismi di fallback progettati per indurre il target a avviare una connessione di rete in uscita verso un host e una porta controllati dall'operatore.
spawn_reverse_shell() avvia un listener TCP locale in un thread in background, attende brevemente, invia il payload remoto e poi attende una connessione.
_start_listener() accetta una connessione e fornisce un semplice ciclo di comandi interattivo. Questa è una capacità di accesso remoto. Ha una gestione degli errori limitata, non autentica la connessione in entrata e non è adatta per amministrazione sicura o infrastruttura di test legittima.
full_exploit_chain() combina molteplici comportamenti:
L'elenco di ricognizione è progettato per rivelare identità, privilegi, informazioni sul sistema operativo, file, processi, servizi in ascolto, account e attività pianificate. Questa è una caratteristica dell'enumerazione post-compromissione.
generate_ssh_key_pair(key_path) invoca il programma locale ssh-keygen per creare una coppia di chiavi RSA a 4096 bit se i file richiesti non esistono già.
Crea un commento sulla chiave che fa riferimento al presunto CVE ed è progettato per supportare la funzione di persistenza SSH. Questo influisce sulla macchina su cui viene eseguito lo script stesso, non sul target remoto.
main() definisce le opzioni da riga di comando per la selezione del target, un ID di flusso, l'esecuzione di un singolo comando, la gestione delle chiavi SSH, le impostazioni della reverse shell, l'esecuzione a catena completa, la generazione automatica delle chiavi e l'output verboso.
Il codice esegue solo una validazione limitata. Ad esempio, le modalità reverse shell e catena completa richiedono un host e una porta locali. Non valida autorizzazione, ambito, proprietà del target, sicurezza dell'URL o se il target sia effettivamente un'istanza Langflow.
encoded_key viene calcolata ma mai utilizzata.I team di sicurezza che revisionano questo codice dovrebbero trattare quanto segue come indicatori di tentata exploitazione o attività post-compromissione:
Per le decisioni di remediation, fare affidamento sugli advisory di sicurezza ufficiali di Langflow, sulle note di rilascio e sul processo di gestione delle vulnerabilità della propria organizzazione piuttosto che sulle dichiarazioni di versione e gravità incorporate in questo script.
Non eseguire o ridistribuire questo programma come strumento di distribuzione o accesso. Se è stato trovato su un sistema, conservarlo come prova, registrare hash e timestamp, limitare l'accesso alla copia, ispezionare i log di servizio e di rete pertinenti e seguire il processo di risposta agli incidenti dell'organizzazione.
Per una valutazione autorizzata legittima, utilizzare un ambito scritto, un piano di validazione non distruttivo, una condizione di arresto documentata e un report incentrato sulla remediation. Evitare persistenza, reverse shell, modifiche alle credenziali, cancellazione della cronologia o qualsiasi azione che possa interrompere i sistemi o lasciare accessi non autorizzati.