
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) — 제안된 신규 CVECVE-2025-71338(쓰기(write) 싱크)과 별개의 취약점입니다. 이는
Flowise 문서 저장소 로더 "리하이드레이션(rehydrate)" 경로에서 인증 없이 가능한 임의 파일 읽기로,
1.7.1 – 2.2.3에 영향이 있으며 2.2.4에서 수정되었습니다. /root/.flowise/encryption.key를 읽으면
저장된 모든 공급자 자격 증명을 해독하는 키를 얻을 수 있습니다 → 전체 자격 증명 탈취.
| 파일 | 용도 |
|---|
report.md | 신규 CVE 제출 자료: 근본 원인, 취약점 경로, CVSS, 영향, 영향 버전, 해결책, PoC, 기존 CVE와의 차이점 |
poc.py | 자체 입증 PoC(표준 라이브러리만 사용) — 대량 할당(mass assignment)으로 로더를 위조하고 FILE-STORAGE:: 리하이드레이션 읽기를 트리거하여 파일 내용을 대역 내(in-band)로 출력 |
docker/Dockerfile | 버전 파라미터화된 실습 이미지(실제 공급업체 이미지에서 FROM; 오버레이 없음) |
setup.sh | 실습 환경 빌드/시작(FLOWISE_VERSION, 기본값 2.1.0); 영향 버전 vs 수정 버전 분류 |
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에서는 raw, 2.2.4에서 _sanitizeFilename 추가);
file은 FILE-STORAGE:: 로더 값을 통해 공격자가 제공하며, 게이트 역할을 하는 loaders[].files[]
항목은 PUT /store/:id 대량 할당(Object.assign(entity, req.body))으로 위조됩니다.