
Неаутентифицированное произвольное чтение файлов в Flowise (< 2.2.4) через path traversal в getFileFromStorage (storageUtils.ts). Вызвано несанитизированным путём к файлу в сочетании с mass-assignment в PUT /api/v1/document-store/store/:id. Позволяет полную компрометацию через чтение /root/.flowise/encryption.key. Отличается от CVE-2025-71338 (исправлено в 2.2.4).
getFileFromStorage) — предлагаемая новая CVEОтдельная уязвимость по отношению к CVE-2025-71338 (которая является write-sink). Это
неаутентифицированное чтение произвольных файлов в пути «rehydrate» загрузчика document-store в Flowise,
затронуты версии 1.7.1 – 2.2.3, исправлено в 2.2.4. Чтение /root/.flowise/encryption.key даёт
ключ, который расшифровывает все сохранённые учётные данные провайдеров → полная компрометация учётных данных.
| Файл | Назначение |
|---|
report.md | Заявка на новую CVE: первопричина, путь уязвимости, CVSS, влияние, затронутые версии, решение, PoC, отличие от существующих CVE |
poc.py | Самодоказывающий PoC (только stdlib) — подделывает загрузчики через массовое присваивание, запускает чтение rehydrate через FILE-STORAGE::, выводит содержимое файла in-band |
docker/Dockerfile | Лабораторный образ с параметризацией версии (FROM реального образа вендора; без оверлеев) |
setup.sh | Собирает/запускает лабораторию (FLOWISE_VERSION, по умолчанию 2.1.0); классифицирует затронутые и исправленные версии |
evidence.txt | Проверка вживую: побайтно точная эксфильтрация encryption.key на 2.1.0 и 2.2.3; NOT-EXPLOITABLE на 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) выполняет path.join(getStoragePath(), ...paths, file) +
fs.readFileSync с несанитизированным file (raw ≤ 2.2.3, _sanitizeFilename добавлен в 2.2.4);
file предоставляется атакующим через значение загрузчика FILE-STORAGE::, а контролирующая запись loaders[].files[]
подделывается массовым присваиванием в PUT /store/:id (Object.assign(entity, req.body)).