漏洞概述 标题: 环境变量语义注入通过 解析器中的子串分割 ( ) 描述: 在 文件解析器中存在一个语义注入漏洞,允许攻击者通过嵌入已知密钥名称到凭证值中,持久地注入任意 Hermes 配置变量(例如 )。 当受害者通过正常 CLI 流程保存一个伪造的 API 密钥时,解析器的基于子串的分割会将嵌入的密钥视为单独的声明,从而实现对 LLM API 调用的完全拦截、提示提取和凭证窃取。 细节: 根因在于 函数,该函数尝试修复损坏的 文件,其中多个 对意外地连接在一行上。 该函数遍历一组已知的 Hermes 环境变量名称,并使用 定位任何 模式。 问题在于 执行无边界验证的朴素子串匹配,不检查匹配是否发生在密钥声明的开头或仅仅是嵌入在另一个值的部分。 如果 API 密钥值碰巧包含一个已知密钥名称(例如, ),该函数会将嵌入的出现视为连接点,并将该行拆分为两个单独的条目。 攻击链: 1. 攻击者创建一个恶意的 API 密钥,其中包含嵌入的 有效载荷。 2. 受害者通过正常的 Hermes 流程保存密钥(社会工程:“使用这个 API 密钥”、受污染的 OAuth 令牌、恶意集成自动配置凭证)。 3. 存储原始连接字符串,然后 在嵌入的密钥名称上拆分。 4. 文件现在包含一个单独的 行。 5. 在下一次启动时, 拾取注入的变量。所有 OpenAI API 调用现在路由到攻击者的代理。 6. 攻击者拦截提示、响应,并可以提取受害者的真实 API 密钥。 影响范围 LLM API 调用拦截: 通过劫持 ,所有 API 请求(包括提示、系统指令和工具调用)都通过攻击者的代理路由。 凭证窃取: 攻击者的代理接收受害者真实 API 密钥,作为每个转发请求的 头的一部分。 提示和响应外泄: 攻击者可以记录、修改或阻止所有 LLM 交互。 持久性妥协: 一旦触发,注入在重启后存活并持久化到 文件中。 受影响产品: 生态系统: pip 包名: hermes-agent 受影响版本: <= v2026.4.30 已修复版本: 无 严重性: 严重性: 高 向量字符串: CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:H/I:H/A:N 修复方案 目前尚未提供具体的修复方案。建议用户尽快更新到已修复的版本,或采取其他安全措施以防止此类漏洞被利用。 POC 代码