问题描述 / Problem Description
项目中的工具调用 API 路由存在未授权访问漏洞。tool_routes.py 中的 /tools/call POST 接口缺乏身份验证机制,允许任意外部请求访问。同时,shell.py 中注册的 shell 工具直接封装了 ShellTool,未对外部输入进行安全过滤。攻击者可以通过未鉴权的 API 越权调用 shell 工具,传入恶意载荷,从而在服务器宿主机上执行任意系统命令,获取服务器控制权。
复现问题的步骤 / Steps to Reproduce
-
部署并启动 Langchain-Chatchat 服务(需包含系统命令工具配置)。
-
在未经任何身份认证的情况下,向服务器发送如下构造的恶意 POST 请求:
POST /tools/call HTTP/1.1
Content-Type: application/json
{
"name": "shell",
"tool_input": {
"query": "whoami && id"
}
}
-
检查服务器端状态以及接口返回的响应数据。
-
问题出现:由于缺乏鉴权,API 成功接纳请求,并将 query 参数传递给 ShellTool 执行。
预期的结果 / Expected Result
敏感的 API 接口(特别是涉及工具调用的 /tools/call)应当受到严格的身份鉴权保护(如 Token 校验)。未经授权的访问应当被拒绝(返回 HTTP 401/403 状态码)。此外,高危工具(如系统命令执行)不应直接暴露,或应对输入参数进行严格的沙箱隔离和过滤。
实际结果 / Actual Result
接口无需任何凭证即可调用。通过 tool_input 传入的系统命令被宿主机直接执行,且执行结果会明文返回在响应包的 data 字段中,造成严重的安全风险(RCE)。
问题描述 / Problem Description
项目中的工具调用 API 路由存在未授权访问漏洞。tool_routes.py 中的 /tools/call POST 接口缺乏身份验证机制,允许任意外部请求访问。同时,shell.py 中注册的 shell 工具直接封装了 ShellTool,未对外部输入进行安全过滤。攻击者可以通过未鉴权的 API 越权调用 shell 工具,传入恶意载荷,从而在服务器宿主机上执行任意系统命令,获取服务器控制权。
复现问题的步骤 / Steps to Reproduce
部署并启动 Langchain-Chatchat 服务(需包含系统命令工具配置)。
在未经任何身份认证的情况下,向服务器发送如下构造的恶意 POST 请求:
POST /tools/call HTTP/1.1
Content-Type: application/json
{
"name": "shell",
"tool_input": {
"query": "whoami && id"
}
}
检查服务器端状态以及接口返回的响应数据。
问题出现:由于缺乏鉴权,API 成功接纳请求,并将 query 参数传递给 ShellTool 执行。
预期的结果 / Expected Result
敏感的 API 接口(特别是涉及工具调用的 /tools/call)应当受到严格的身份鉴权保护(如 Token 校验)。未经授权的访问应当被拒绝(返回 HTTP 401/403 状态码)。此外,高危工具(如系统命令执行)不应直接暴露,或应对输入参数进行严格的沙箱隔离和过滤。
实际结果 / Actual Result
接口无需任何凭证即可调用。通过 tool_input 传入的系统命令被宿主机直接执行,且执行结果会明文返回在响应包的 data 字段中,造成严重的安全风险(RCE)。