问题描述 / Problem Description
Langchain-Chatchat 的知识库创建和文档上传接口存在路径遍历漏洞。攻击者可以通过在 knowledge_base_name 参数中注入路径遍历序列(如 ..\\),将知识库内容写入到配置的知识库根目录之外的任意位置。
漏洞类型: 路径遍历 (Path Traversal)
CVSS评分: 9.1 (Critical)
影响范围: 任意目录创建和文件写入
复现问题的步骤 / Steps to Reproduce
-
启动 Langchain-Chatchat 服务
-
创建包含路径遍历的知识库:
curl -X POST "http://127.0.0.1:7861/knowledge_base/create_knowledge_base" \
-H "Content-Type: application/json" \
-d '{
"knowledge_base_name": "..\\malicious-kb",
"vector_store_type": "faiss",
"embed_model": "bge-large-zh-v1.5"
}'
-
上传文档到该知识库:
curl -X POST "http://127.0.0.1:7861/knowledge_base/upload_docs" \
-F "knowledge_base_name=..\\malicious-kb" \
-F "files=@test.txt"
-
观察文件被写入到知识库根目录外
预期的结果 / Expected Result
- 知识库应该被创建在
{KB_ROOT_PATH}/{knowledge_base_name}/ 下
knowledge_base_name 应该经过路径规范化
- 包含
.. 或绝对路径的名称应该被拒绝
实际结果 / Actual Result
漏洞根因 / Root Cause
受影响文件: libs/chatchat-server/chatchat/server/knowledge_base/kb_doc_api.py:130
受影响函数: _save_files_in_thread
该函数使用用户提供的 knowledge_base_name 直接构造路径,未进行边界检查:
def _save_files_in_thread(
files: List[UploadFile],
knowledge_base_name: str, # 用户可控
override: bool,
):
# 直接使用 knowledge_base_name 构造路径
kb_path = get_kb_path(knowledge_base_name) # 未进行边界检查
# ... 写入文件
安全影响 / Security Impact
严重性: CRITICAL
- 任意目录创建: 攻击者可以在服务器任意位置创建目录结构
- 任意文件写入: 可以将知识库内容写入到系统任意位置
- 数据泄露: 可以将知识库创建在 Web 可访问目录下
- 持久化攻击: 可以在系统启动目录或配置目录植入恶意文件
攻击场景示例:
- 创建知识库到
..\\..\\static\\malicious 使其通过 Web 访问
- 覆盖配置文件目录中的文件
- 在系统路径中植入恶意脚本
环境信息 / Environment Information
- Langchain-Chatchat 版本 / commit 号:Latest (commit from 2026-04-12)
- 部署方式(pypi 安装 / 源码部署 / docker 部署):源码部署 / dev deployment
- 使用的模型推理框架(Xinference / Ollama / OpenAI等):OpenAI
- 使用的 LLM 模型(GLM-4-9B / Qwen2-7B-Instruct 等):GLM-4-9B
- 使用的 Embedding 模型(bge-large-zh-v1.5 / m3e-base 等):bge-large-zh-v1.5
- 使用的向量库类型 (faiss / milvus / pg_vector 等): s
- 操作系统及版本 / Operating system and version: Windows
- Python 版本 / Python version: 3.8+
- 推理使用的硬件(GPU / CPU / MPS / NPU 等) / Inference hardware (GPU / CPU / MPS / NPU, etc.): GPU
- 其他相关环境信息 / Other relevant environment information:
附加信息 / Additional Information
特殊注意:
- 该漏洞在 Windows 系统上使用
..\\ 路径遍历序列
- 在 Linux/Unix 系统上应使用
../ 序列
- 即使向量库加载失败,文件仍然会被写入
问题描述 / Problem Description
Langchain-Chatchat 的知识库创建和文档上传接口存在路径遍历漏洞。攻击者可以通过在
knowledge_base_name参数中注入路径遍历序列(如..\\),将知识库内容写入到配置的知识库根目录之外的任意位置。漏洞类型: 路径遍历 (Path Traversal)
CVSS评分: 9.1 (Critical)
影响范围: 任意目录创建和文件写入
复现问题的步骤 / Steps to Reproduce
启动 Langchain-Chatchat 服务
创建包含路径遍历的知识库:
上传文档到该知识库:
观察文件被写入到知识库根目录外
预期的结果 / Expected Result
{KB_ROOT_PATH}/{knowledge_base_name}/下knowledge_base_name应该经过路径规范化..或绝对路径的名称应该被拒绝实际结果 / Actual Result
文件被写入到
D:\Project\Dataset\Langchain-Chatchat\.runtime-full-root\data\kb-name-escape-1776004764\content\kb-name-upload.txt成功逃逸了配置的知识库根目录
虽然向量库加载失败(返回 500 错误),但文件上传仍然成功(返回 200)
创建响应:
{ "code": 500, "msg": "创建知识库出错: 向量库 ..\\kb-name-escape-1776004764 加载失败。" }上传响应:
{ "code": 200, "msg": "文件上传与向量化完成", "data": {"failed_files": {}} }漏洞根因 / Root Cause
受影响文件:
libs/chatchat-server/chatchat/server/knowledge_base/kb_doc_api.py:130受影响函数:
_save_files_in_thread该函数使用用户提供的
knowledge_base_name直接构造路径,未进行边界检查:安全影响 / Security Impact
严重性: CRITICAL
攻击场景示例:
..\\..\\static\\malicious使其通过 Web 访问环境信息 / Environment Information
附加信息 / Additional Information
特殊注意:
..\\路径遍历序列../序列