Il 24 giugno 2026 Trend Micro ha reso pubblica l'advisory ZDI-26-365, che documenta una vulnerabilità di esecuzione remota di codice arbitrario nel CSV Agent di FlowiseAI. La falla, scoperta il 24 febbraio 2026 dal ricercatore @NZubrisky e coordinata con il vendor, permette a un attaccante remoto di iniettare codice Python tramite il parametro customReadCSV e di eseguirlo nel contesto dell'account di servizio, aggirando il meccanismo di autenticazione. Il caso ripropone con urgenza una domanda che attraversa l'intero ecosistema AI low-code: quando una piattaforma promette di "semplificare" l'elaborazione dati generando ed eseguendo codice dinamicamente, chi controlla ciò che viene effettivamente eseguito?
- La vulnerabilità ZDI-26-365 interessa il metodo
rundella classeCSV_Agentsdi FlowiseAI, dove stringhe utente non validate alimentano l'esecuzione di codice Python - L'autenticazione richiesta per accedere alla funzionalità è aggirabile secondo quanto documentato dall'advisory ZDI
- Il codice malevolo viene eseguito nel contesto dell'account di servizio del sistema che ospita Flowise
- La patch, rilasciata nel commit GitHub #5836, aggiunge la funzione
validatePythonCodeForDataFrameper bloccare costrutti non sicuri nel parametrocustomReadCSVFunc
Il meccanismo: da customReadCSV a esecuzione arbitraria
Il nucleo della falla risiede nel modo in cui il CSV Agent gestisce il parametro customReadCSV. Questa opzione permette all'utente di fornire codice Python personalizzato per l'elaborazione di file CSV, funzionalità legittima in una piattaforma che mira a offrire flessibilità senza richiedere competenze di programmazione. Secondo l'advisory ZDI-26-365, il problema "results from the lack of proper validation of a user-supplied string before using it to execute Python code".
Il codice Python viene eseguito in ambiente Pyodide, un interprete Python compilato in WebAssembly che opera nel browser. Pyodide fornisce un sandbox parziale, ma la sicurezza di questo modello dipende interamente dal fatto che il codice in ingresso sia controllato. Quando la piattaforma accetta stringhe arbitrarie e le passa direttamente all'esecuzione, il perimetro di confine tra "flessibilità utente" e "esecuzione remota" si dissolve.
La specificità tecnica è rilevante: la falla non è un errore di parsing generico, ma una mancata validazione situata nel metodo run di una classe specifica, CSV_Agents. Questa precisione indica una superficie di attacco definita e, in teoria, contenibile, se la validazione fosse implementata correttamente fin dalla progettazione.
"This vulnerability allows remote attackers to execute arbitrary code on affected installations of Flowise" — ZDI Advisory 26-365
Il bypass dell'autenticazione: quando il controllo accessi non basta
L'advisory ZDI-26-365 contiene un elemento che eleva significativamente la gravità della vulnerabilità: l'autenticazione, pur essendo tecnicamente richiesta per accedere alla funzionalità compromessa, "can be bypassed". La formulazione esplicita di Trend Micro indica che il meccanismo di protezione perimetrale non costituisce un ostacolo effettivo per l'exploit.
Questo aspetto trasforma una potenziale vulnerabilità autenticata in una superficie di attacco esposta. Le piattaforme low-code come Flowise sono spesso deployate in ambienti interni, con l'assunto implicito che la rete aziendale o le credenziali di accesso siano sufficienti a contenere il rischio. Quando l'autenticazione è aggirabile, questo modello di fiducia collassa: l'attaccante non ha bisogno di credenziali valide, né di accesso privilegiato alla rete.
L'advisory non dettaglia la tecnica di bypass. Questo limite impedisce di valutare la complessità dell'attacco e la sua replicabilità in condizioni specifiche. Il dossier non documenta se il bypass sfrutti una vulnerabilità separata nel sistema di autenticazione di Flowise, una debolezza di configurazione comune, o un difetto di progettazione architetturale.
Il contesto delle piattaforme low-code LLM: codice generato, codice eseguito
FlowiseAI rappresenta una categoria crescente di strumenti che democratizzano l'accesso agli agenti LLM attraverso interfacce visuali e configurazioni parametriche. L'utente costruisce flussi di lavoro drag-and-drop, la piattaforma genera il codice sottostante, e questo codice viene eseguito per produrre risultati. Il modello offloading — la delega della complessità tecnica alla piattaforma — è il valore proposto, ma anche il punto di massima fragilità.
Il CSV Agent incarna questa tensione in modo emblematico. L'elaborazione di file CSV è un'operazione routine in contesti aziendali; la possibilità di personalizzarla con codice Python amplia il raggio d'azione, ma introduce un vettore di esecuzione dinamica che le interfacce low-code non rendono visibile all'utente finale. Chi configura l'agente vede un campo opzionale per "personalizzare la lettura CSV"; ciò che la piattaforma esegue è codice Python con i privilegi dell'account di servizio.
Questa architettura non è specifica di Flowise. Piattaforme analoghe — LangChain-based, framework di orchestrazione LLM, strumenti di data preparation con componenti scriptabili — condividono la stessa superficie di attacco: codice generato o configurato dall'utente, eseguito in ambienti con accesso a dati e risorse di sistema. La vulnerabilità ZDI-26-365 documenta un'istanza concreta di un problema di categoria.
Cosa fare adesso
Per gli operatori che gestiscono installazioni Flowise, tre azioni sono prioritarie sulla base dei dati disponibili. Primo: verificare la presenza del commit #5836 nell'installazione attiva, identificando se il codice sorgente includa la funzione validatePythonCodeForDataFrame nel percorso di elaborazione del CSV Agent. Secondo: in assenza della patch, disabilitare la funzionalità customReadCSV o limitarne l'accesso a ambienti di test isolati, dato che l'advisory ZDI-26-365 identifica proprio questo parametro come punto di ingresso della vulnerabilità.
Terzo: monitorare i log di esecuzione del CSV Agent per stringhe anomale nel campo customReadCSVFunc, in particolare costrutti che eccedano le operazioni pandas standard di lettura CSV. L'advisory non fornisce indicatori di compromissione specifici, ma la natura dell'injection Python rende rilevabili payload con importazioni di modulo o chiamate di sistema atipiche per il caso d'uso previsto.
La mancanza di versioni affette esplicite nell'advisory e l'assenza di CVE e CVSS complicano la prioritizzazione automatica nei sistemi di gestione vulnerabilità. Gli operatori devono quindi procedere con verifica manuale del codice sorgente o dei container in uso, piuttosto che affidarsi esclusivamente a scanner basati su identificatori formali.
L'impronta della ricerca: da Trend Micro al commit di fix
La disclosure coordinata segue la timeline standard di Trend Micro Zero Day Initiative: segnalazione al vendor il 24 febbraio 2026, rilascio pubblico il 24 giugno 2026 dopo il periodo di coordinamento. Il ricercatore @NZubrisky è accreditato per la scoperta; l'identità completa non è documentata nell'advisory.
Il commit di patch su GitHub corrobora indipendentemente la natura della vulnerabilità. L'aggiunta di validatePythonCodeForDataFrame nel percorso di elaborazione del parametro customReadCSVFunc conferma che il punto di ingresso identificato da ZDI corrisponde a una funzionalità reale e che la mitigazione targetizza esattamente quel flusso. La coerenza tra advisory e implementazione di fix rafforza la validità della descrizione tecnica.
La patch non elimina la funzionalità customReadCSV, ma la circonda di validazione: è un approccio che preserva la flessibilità utente introducendo un controllo di sicurezza. La scelta di limitare i costrutti a "safe pandas read_csv operations" indica una valutazione di rischio in cui la funzionalità completa del linguaggio Python è considerata eccessivamente esposta per il caso d'uso previsto.
FAQ
Qual è la differenza tra esecuzione in Pyodide e RCE sull'host?
Pyodide esegue Python in WebAssembly nel browser, offrendo isolamento parziale. La vulnerabilità ZDI-26-365 permette esecuzione di codice arbitrario "on affected installations of Flowise", ma l'advisory non specifica se il payload esca dal sandbox Pyodide o operi entro di esso con accesso ai dati del flusso. Il contesto di esecuzione è l'account di servizio del sistema.
Perché mancano CVE e CVSS nell'advisory?
L'advisory ZDI-26-365 non riporta identificatore CVE assegnato né punteggio CVSS. Questo non inficia la validità della vulnerabilità, ma riflette possibili tempistiche di assegnazione MITRE o una scelta di disclosure prioritaria rispetto alla catalogazione formale. Il commit di patch GitHub fornisce comunque un punto di riferimento tecnico verificabile.
Le installazioni cloud di Flowise sono interessate?
L'advisory si riferisce a "affected installations of Flowise" senza distinguere tra deployment self-hosted e servizi gestiti. Il dossier non specifica se la piattaforma cloud ufficiale di FlowiseAI abbia applicato la patch indipendentemente o se ne gestisca l'aggiornamento automatico.
Le informazioni sono basate sulla fonte citata e aggiornate al momento della pubblicazione.
Fonti
- http://www.zerodayinitiative.com/advisories/ZDI-26-365/
- http://www.zerodayinitiative.com/advisories/published/
- https://github.com/FlowiseAI/Flowise/commit/0c8236ac9a9720725e135603f4a54f7d7d6646ac