flawopen.com/Teardowns/cve-2026-5027-langflow-multipart-file-write
Langflow CVE-2026-5027:上传文件路径穿越
CVE-2026-5027 可通过路径穿越将文件写入 Langflow 上传目录之外。GTIG 报告称该漏洞已遭利用;请升级到 1.9.0 或更高版本。[1], [2], [6]
邮局收件时,寄件人可以自选标签和目的地。如果工作人员只把标签拼到邮局文件夹路径上,却不检查最终路径,包裹就可能落到邮局之外。Langflow 上传路由信任了 multipart 文件名,而存储层没有独立确认最终路径仍位于获准目录内。[2], [3]
核心概念与专有名词
框架映射
- 本指南所述弱点的 CWE 参考: CWE-22
根本原因剖析 (Root Cause)
Tenable 的 CVE-2026-5027 记录说明,POST /api/v2/files 接受含路径穿越部分的 multipart 文件名,并将文件写到预期目录之外。安全边界跨越 API 路由与本地存储:验证 URL 参数并不能验证来自 multipart Content-Disposition 的文件名;把名称拼接到目录也不能证明路径受限。该 CVE 的向量要求低权限(PR:L);不要声称该 CVE 本身可绕过认证。Google GTIG 将 CVE-2026-5027 列入已确认在野利用的漏洞,但其公开摘要并未证明普遍存在代码执行。任意文件写入可能根据可写路径、进程权限和部署配置造成更严重后果;应标为条件性影响,而非必然 RCE。Langflow 相关 GHSA 列出 CVE-2026-33309,也指向 1.9.0 修复。本文依 Tenable 与 GTIG 使用 CVE-2026-5027,并明确说明标识差异。Langflow 合并的补丁在 API 层验证文件名,并在存储层实施规范化路径约束,包括创建目录之前。[1], [2], [3], [4], [5], [6]
攻击执行流程分解
源代码对比:漏洞与安全实现
这些是贴近源码结构的简化示例,并非上游逐字 diff。易受攻击的路径把客户端文件名当作存储路径。修复模式先验证文件名,再在存储层检查规范化目标是否位于规范化根目录内;上游 PR 还会拒绝分隔符和控制字符,并在创建目录前检查路径约束。即使 HTTP 层已验证输入,存储层也必须保留此检查。示例要求支持 Path.is_relative_to 的 Python 版本;在攻击者可写目录中,它本身不能消除检查与使用之间的竞态。生产环境应采用抗竞态文件操作和严格权限。核心防护是路径约束,而不只是文件名黑名单。[3], [2], [4], [7]
源码摘录: Langflow api/v2/files.py 与 services/storage/local.py — 安全边界简化示例
# 易受攻击数据流的简化示例。
new_filename = file.filename
file_path = folder_path / new_filename
await write_upload(file, file_path)
from pathlib import Path
def confined_upload_path(root: Path, client_name: str | None) -> Path:
name = Path(client_name or "").name
if not name or name in {".", ".."} or chr(0) in name:
raise ValueError("invalid upload filename")
base = root.resolve()
target = (base / name).resolve()
if not target.is_relative_to(base):
raise ValueError("upload path escapes storage root")
return target
# 在创建或写入之前,紧贴存储边界调用此函数。
target = confined_upload_path(upload_root, file.filename)
await write_upload(file, target)
工程与系统安全加固清单
- ✓将 Langflow 升级到 1.9.0 或更高版本,并在部署镜像中核验 langflow 和 langflow-base 的已安装版本。[2], [4]
- ✓独立验证 multipart 文件名,不要依赖 URL 参数验证;拒绝分隔符、控制字符、空名称和无效编码。[1], [2], [3]
- ✓在存储层解析目标路径,并在创建目录或写文件前确保其规范化路径位于上传根目录下。[3], [4], [7]
- ✓测试路径穿越、绝对路径、替代分隔符、空字节、Unicode 和符号链接目标;确认临时存储根目录之外没有文件生成。[3], [7]
- ✓以专用最小权限服务账号运行 Langflow;上传目录不可执行,并与应用代码、计划任务目录及凭据隔离。[2], [4]
- ✓检查互联网暴露面和上传日志中的越界名称;仅在有主机访问迹象时调查并轮换秘密。[6], [2]
- ✓明确记录标识映射:Tenable/GTIG 使用
CVE-2026-5027;Langflow 相关 GHSA 列出CVE-2026-33309。未经核实不要合并严重性或受影响版本。[1], [2], [4], [5], [6]