Flowise(< 2.2.4)中通过 getFileFromStorage(storageUtils.ts)的路径遍历实现未认证的任意文件读取。由未净化的文件路径与 PUT /api/v1/document-store/store/:id 中的批量赋值共同导致。可通过读取 /root/.flowise/encryption.key 实现完全入侵。与 CVE-2025-71338(已在 2.2.4 中修复)不同。
| 文件 | 用途 |
|---|
report.md | 新 CVE 提交材料:根因、漏洞路径、CVSS、影响、受影响版本、解决方案、PoC,以及与现有 CVE 的区别 |
poc.py | 自证式 PoC(仅标准库)— 通过批量赋值伪造加载器,触发 FILE-STORAGE:: rehydrate 读取,并带内打印文件内容 |
docker/Dockerfile | 版本参数化的实验镜像(FROM 真实厂商镜像;零覆盖层) |
setup.sh | 构建/启动实验环境(FLOWISE_VERSION,默认 2.1.0);区分受影响版本与已修复版本 |
evidence.txt | 实测验证:在 2.1.0 和 2.2.3 上实现字节精确的 encryption.key 外泄;在 2.2.4 上不可利用(NOT-EXPLOITABLE) |
# 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) 会执行 path.join(getStoragePath(), ...paths, file) + fs.readFileSync,且 file 未经净化(≤ 2.2.3 中为原始值,2.2.4 中新增了 _sanitizeFilename);file 由攻击者通过 FILE-STORAGE:: 加载器的值提供,而起把关作用的 loaders[].files[] 条目则通过 PUT /store/:id 的批量赋值(Object.assign(entity, req.body))伪造。