
getFileFromStorage (storageUtils.ts) のパストラバーサルによるFlowise (< 2.2.4) の未認証任意ファイル読み取り。サニタイズされていないファイルパスと、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))によって偽造されます。