
Lettura arbitraria di file non autenticata in Flowise (< 2.2.4) tramite path traversal in getFileFromStorage (storageUtils.ts). Causata da percorso file non sanificato combinato con mass-assignment in PUT /api/v1/document-store/store/:id. Consente il compromesso completo tramite lettura di /root/.flowise/encryption.key. Distinta da CVE-2025-71338 (corretta in 2.2.4).
getFileFromStorage) — nuova CVE propostaUna vulnerabilità separata da CVE-2025-71338 (che è il write sink). Si tratta di una
lettura arbitraria di file non autenticata nel percorso "rehydrate" del loader document-store di Flowise,
che interessa le versioni 1.7.1 – 2.2.3, corretta in 2.2.4. La lettura di /root/.flowise/encryption.key restituisce
la chiave che decripta tutte le credenziali dei provider memorizzate → compromissione completa delle credenziali.
| File | Scopo |
|---|
report.md | La proposta di nuova CVE: causa principale, percorso della vulnerabilità, CVSS, impatto, versioni interessate, soluzione, PoC, distinzione dalle CVE esistenti |
poc.py | PoC auto-dimostrante (solo stdlib) — forgia i loader tramite mass assignment, attiva la lettura rehydrate FILE-STORAGE::, stampa i contenuti del file in-band |
docker/Dockerfile | Immagine lab parametrizzata per versione (FROM l'immagine reale del vendor; zero overlay) |
setup.sh | Compila/avvia il lab (FLOWISE_VERSION, default 2.1.0); classifica le versioni interessate rispetto a quelle corrette |
evidence.txt | Verifica live: esfiltrazione byte-esatta di encryption.key su 2.1.0 & 2.2.3; NOT-EXPLOITABLE su 2.2.4 |
# start an affected lab (default 2.1.0):
bash setup.sh
# exfiltrate the credential-decryption key (self-proving; no listener):
python3 poc.py http://127.0.0.1:3510 --read-path /root/.flowise/encryption.key
# ground truth:
docker exec <container> cat /root/.flowise/encryption.key
getFileFromStorage(file, ...paths) esegue path.join(getStoragePath(), ...paths, file) +
fs.readFileSync con file non sanificato (raw ≤ 2.2.3, _sanitizeFilename aggiunto in 2.2.4);
file è fornito dall'attaccante tramite il valore del loader FILE-STORAGE::, e la voce loaders[].files[]
che abilita il controllo è forgiata tramite il mass assignment su PUT /store/:id (Object.assign(entity, req.body)).