
Unauthenticated arbitrary file read in Flowise (< 2.2.4) via path traversal in getFileFromStorage (storageUtils.ts). Caused by un-sanitized file path combined with mass-assignment in PUT /api/v1/document-store/store/:id. Allows full compromise via /root/.flowise/encryption.key read. Distinct from CVE-2025-71338 (fixed in 2.2.4).
getFileFromStorage) — novo CVE propostoUma vulnerabilidade separada da CVE-2025-71338 (que é o sink de escrita). Esta é uma
leitura arbitrária de ficheiro sem autenticação no caminho "rehydrate" do carregador de document-store do Flowise,
afetando 1.7.1 – 2.2.3, corrigida em 2.2.4. A leitura de /root/.flowise/encryption.key produz
a chave que descriptografa todas as credenciais de fornecedores armazenadas → comprometimento total de credenciais.
| Ficheiro | Finalidade |
|---|---|
report.md | O envio do novo CVE: causa raiz, caminho da vulnerabilidade, CVSS, impacto, versões afetadas, solução, PoC, distinção dos CVEs existentes |
poc.py | PoC autossuficiente (apenas stdlib) — forja loaders via mass assignment, aciona a leitura rehydrate FILE-STORAGE::, imprime o conteúdo do ficheiro in-band |
docker/Dockerfile | Imagem de laboratório parametrizada por versão (FROM a imagem real do fornecedor; zero overlay) |
setup.sh | Cria/inicia o laboratório (FLOWISE_VERSION, padrão 2.1.0); classifica afetado vs corrigido |
evidence.txt | Verificação ao vivo: exfiltração byte-exata de encryption.key em 2.1.0 e 2.2.3; NOT-EXPLOITABLE em 2.2.4 |
# iniciar um laboratório afetado (padrão 2.1.0):
bash setup.sh
# exfiltrar a chave de descriptografia de credenciais (autossuficiente; sem listener):
python3 poc.py http://127.0.0.1:3510 --read-path /root/.flowise/encryption.key
# verdade fundamental:
docker exec <container> cat /root/.flowise/encryption.key
getFileFromStorage(file, ...paths) faz path.join(getStoragePath(), ...paths, file) +
fs.readFileSync com file sem sanitização (cru ≤ 2.2.3, _sanitizeFilename adicionado em 2.2.4);
file é fornecido pelo atacante através do valor do loader FILE-STORAGE::, e a entrada de bloqueio loaders[].files[]
é forjada pelo mass assignment de PUT /store/:id (Object.assign(entity, req.body)).