
Lectura arbitraria de archivos no autenticada en Flowise (< 2.2.4) a través de path traversal en getFileFromStorage (storageUtils.ts). Causada por una ruta de archivo no saneada combinada con asignación masiva en PUT /api/v1/document-store/store/:id. Permite el compromiso total mediante la lectura de /root/.flowise/encryption.key. Distinto de CVE-2025-71338 (corregido en 2.2.4).
getFileFromStorage) — nueva CVE propuestaUna vulnerabilidad independiente de CVE-2025-71338 (que es el sumidero de escritura). Se trata de una
lectura arbitraria de archivos no autenticada en la ruta de "rehydrate" del cargador de document-store
de Flowise, que afecta a 1.7.1 – 2.2.3 y se corrige en 2.2.4. La lectura de /root/.flowise/encryption.key proporciona
la clave que descifra todas las credenciales almacenadas de los proveedores → compromiso total de las credenciales.
| Archivo | Propósito |
|---|
report.md | La propuesta de la nueva CVE: causa raíz, ruta de la vulnerabilidad, CVSS, impacto, versiones afectadas, solución, PoC, distinción de las CVE existentes |
poc.py | PoC autodemostrable (solo stdlib) — forja cargadores mediante asignación masiva, dispara la lectura rehydrate de FILE-STORAGE:: e imprime el contenido del archivo en banda |
docker/Dockerfile | Imagen de laboratorio parametrizada por versión (FROM la imagen real del proveedor; cero superposición) |
setup.sh | Construye/inicia el laboratorio (FLOWISE_VERSION, por defecto 2.1.0); clasifica afectado vs corregido |
evidence.txt | Verificación en vivo: exfiltración exacta al byte de encryption.key en 2.1.0 y 2.2.3; NO-EXPLOTABLE en 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) ejecuta path.join(getStoragePath(), ...paths, file) +
fs.readFileSync con file sin sanear (crudo ≤ 2.2.3, _sanitizeFilename añadido en 2.2.4);
file lo proporciona el atacante a través del valor del cargador FILE-STORAGE::, y la entrada de control loaders[].files[]
se forja mediante la asignación masiva de PUT /store/:id (Object.assign(entity, req.body)).