🔴 严重 | CVE-2026-65700 — h2oGPT through 0.2.1 contains a path traversal vul...
🔴 【深度分析】严重安全漏洞:CVE-2026-65700
CVSS 评分: 严重(9.3)🔴 状态: Deferred 发布时间: 2026-07-23
🔍 技术细节速览
| 字段 | 值 |
|---|---|
| CVE ID | CVE-2026-65700 |
| CVSS 评分 | 9.3 🔴 |
| 严重程度 | 严重 |
| CVSS 向量 | CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X |
| CWE 分类 | CWE-22 |
| 发布时间 | 2026-07-23 |
| 最后更新 | 2026-07-27 |
| 状态 | Deferred |
| 数据来源 | disclosure@vulncheck.com |
CVSS 4.0 评分:9.3(严重)
向量:AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N
危害等级:严重
攻击者无需认证、无需用户交互,即可通过网络远程实现任意文件读写删除,并导致远程代码执行。
漏洞概述
CVE-2026-65700 是存在于 h2oGPT(截至 0.2.1 版本)中的一个高危路径遍历漏洞。该漏洞位于 OpenAI 兼容的文件 API 中,攻击者可以通过在 bearer token(身份令牌)中嵌入路径遍历序列(如 ../),绕过认证机制,并以服务进程的权限对服务器上的任意文件进行读取、写入和删除操作。结合默认空 API Key 的配置缺陷,攻击者无需任何凭证即可触发该漏洞,最终可通过写入启动钩子或应用程序加载的文件实现远程代码执行(RCE)。
该漏洞影响 h2oGPT 项目中 openai_server/backend_utils.py 的 get_user_dir 函数,其对用户提供的 token 字符串未做任何清理,直接拼接到文件路径中,导致目录穿越。
受影响组件与版本
| 组件 | 版本范围 |
|---|---|
| h2oGPT(h2oGPT) | ≤ 0.2.1 |
| 受影响模块 | OpenAI 兼容文件 API(openai_server/backend_utils.py 中的 get_user_dir 函数) |
注意:h2oGPT 是一个基于开源大语言模型的推理服务框架,常用于部署 H2O.ai 的对话模型。
漏洞原理分析
1. 根因:未消毒的 token 作为路径组件
在 openai_server/backend_utils.py 中,get_user_dir 函数使用 os.path.join 将用户提供的 bearer token 字符串拼接到用户目录的基路径中:
# 简化伪代码
def get_user_dir(token):
base_dir = "/path/to/user_data"
user_dir = os.path.join(base_dir, token) # token 未经任何校验
return user_dir
由于 os.path.join 在处理包含 .. 的路径时会正常进行路径解析,攻击者若提供 token 为 ../../etc/,则最终目录变为 /path/to/user_data/../../etc/,即 /etc/,从而越过了预期的用户数据目录。
2. 认证绕过:默认 API Key 为空
根据描述,h2oGPT 的默认配置中,API Key 为空字符串(EMPTY)。在 OpenAI 兼容的 API 实现中,许多端点依赖 bearer token 进行身份验证,而空的 API Key 被当作合法 token 处理,导致攻击者无需任何凭证即可构造任意的 token 字符串。因此,认证机制形同虚设,任何远程攻击者都可以直接发送包含恶意 token 的请求。
3. 攻击向量:通过文件内容、删除、上传接口利用
漏洞影响多个文件操作端点:
- 文件读取:通过指定遍历后的路径,读取任意文件(如配置文件、密码哈希、源代码等)。
- 文件上传:向任意路径写入文件内容。
- 文件删除:删除服务器上的任意文件。
攻击者可以通过文件上传接口,向以下敏感位置写入恶意文件:
- 启动钩子(startup hooks):例如写入
.bashrc、cron任务、systemd服务单元等,在服务器重启或定时执行时获得代码执行。 - 应用加载的文件:例如覆盖 Python 模块、动态库(.so)、配置文件(如
flask或uwsgi的配置)等,在服务重载或重启时自动执行恶意代码。
由此,一个未认证的远程攻击者可以完全控制服务器进程的权限,实现远程代码执行。
影响评估
| 评估维度 | 分析 |
|---|---|
| 攻击复杂度 | 低(AC:L)。无需特殊技巧,仅需在 token 中插入 ../ 等简单序列。 |
| 攻击向量 | 网络(AV:N)。攻击者可通过互联网远程触发。 |
| 所需权限 | 无(PR:N)。默认空 API Key 使认证被绕过。 |
| 用户交互 | 无(UI:N)。无需受害者操作。 |
| 影响范围 | 机密性高、完整性高、可用性高(VC:H/VI:H/VA:H)。攻击者可完全控制文件系统,导致数据泄露、篡改、服务瘫痪及远程代码执行。 |
| 实际威胁 | 极高。结合现代容器化部署中常见的默认空密钥、暴露的 API 端口,该漏洞极易被大规模自动化扫描利用。一旦成功写入恶意代码,攻击者便可获得持久化控制权。 |
| 漏洞状态 | Deferred(延迟处理)。表明 NVD 尚未获得厂商正式补丁或确认,用户面临无官方修复的风险。 |
修复建议
1. 紧急补丁(需厂商或自行开发)
- 对 token 进行严格路径安全校验:禁止在 token 中出现
..、/等路径分隔符,或者使用白名单模式仅允许字母数字。 - 替换
os.path.join为安全的路径拼接:使用os.path.realpath或预先规范化路径,并验证结果是否仍在预期基目录下。 - 强制 API Key 非空:禁止空的 API Key,要求客户端提供有效的随机密钥。
当前无官方补丁版本(截至 2026-07-23),建议社区用户自行补丁或等待厂商更新。
2. 临时缓解措施(运维层面)
- 网络隔离:确保 h2oGPT 服务仅监听内部网络或使用反向代理(如 Nginx)并设置
/api路径访问控制白名单。 - 禁用不必要的文件端点:如果业务不需要 OpenAI 文件 API,可将其路由在网关层直接返回 403。
- 监控异常访问:在日志中监控包含
../或..%2f的请求,并触发告警。 - 容器化最小权限:以非 root 用户运行服务,并限制进程可写目录(如挂载只读根文件系统)。
- 使用 WAF 规则:对于公开部署,可部署 Web 应用防火墙拦截包含路径遍历模式的请求。
3. 长期修复
- 关注 h2oGPT 官方更新:虽然漏洞状态为 Deferred,但建议持续跟踪官方 GitHub 或邮件列表,及时应用补丁。
- 代码审计:对
backend_utils.py及相关文件操作函数进行全面的安全审查,确保所有用户输入均被消毒。
参考资料
| 类型 | 链接 |
|---|---|
| CVE 详情页 | https://nvd.nist.gov/vuln/detail/CVE-2026-65700 |
| CWE 分类 | CWE-22: Improper Limitation of a Pathname to a Restricted Directory ('Path Traversal') |
| h2oGPT 项目 | https://github.com/h2oai/h2ogpt |
| 发现者 | disclosure@vulncheck.com |
⚠️ 安全警示:由于漏洞状态为 Deferred,且 CVSS 评分高达 9.3,所有使用 h2oGPT 0.2.1 及更早版本的生产环境应视为高危。建议立即采取上述缓解措施,并评估是否暂时下线相关服务直至官方修复发布。