flawopen.com/AI Security/hermes-agent-native-signin-redirect-parser-confusion
●
FlawOpen 映射: CWE-601 · CVSS v4 8.6[1] · 高危
安全研究 · FlawOpen
Hermes Agent 原生登录重定向解析缺陷
Tenable 披露了 Hermes Agent 原生登录中的高危重定向验证缺陷。0.21.6 之前的版本受影响。0.21.6 的修复已提供给 Docker/Hermes Cloud 和 CLI/git 安装;10 月 11 日发布的 0.21.7 还列出了 Desktop 应用、Microsoft Store/MSIX、安装程序、Docker 和 Hermes Cloud。查阅的发布说明没有提到 Termux,请单独核实该渠道。Tenable 将其评为 High(CVSS 4.0 8.6);未分配 CVE。CWE-601 是针对重定向后果的编辑分类。[1], [2], [5]
💡 通俗易懂的原理解析 (ELI5)
想象前台用一张地图核对地址,却把原始地址照抄后交给使用另一张地图的快递员。快递员可能去往前台未批准的地点。Hermes 使用 Python 解析器检查回调地址,却把未经规范化的原字符串交给浏览器;浏览器可能有不同解释。[1]
核心概念与专有名词
框架映射
- FlawOpen 对 MITRE CWE 的概念性映射;没有厂商或 CVE 记录将此弱点编号分配给本研究演示。 CWE-601
攻击执行流程分解
源代码对比:漏洞与安全实现
这是安全边界的示意模型,并非 Hermes Agent 完整源码或利用代码。易受影响示例概括了“检查解析后的主机、随后使用原始输入”的模式。加固示例展示已合并修复的安全属性:拒绝含糊输入,只允许规范的 loopback authority,返回规范 URI,并持久化/使用该值。实际实现和测试见链接 PR。[1], [3]
存在漏洞的实现
from urllib.parse import urlparse
def validate_callback(raw):
parsed = urlparse(raw)
# 原始流程检查了解析后的主机名,却继续保留并使用原始 URL。
if parsed.scheme == "http" and parsed.hostname in {"127.0.0.1", "::1"}:
return raw
raise ValueError("callback must be loopback")
加固后的安全修复
from urllib.parse import urlparse, urlunparse
LOOPBACK_HOSTS = {"127.0.0.1": "127.0.0.1", "::1": "[::1]"}
def validate_callback(raw):
if not raw.isascii() or "\\" in raw or any(ord(c) <= 0x20 or ord(c) == 0x7f for c in raw):
raise ValueError("callback must use canonical loopback syntax")
try:
parsed = urlparse(raw)
host, port = parsed.hostname, parsed.port
except ValueError as exc:
raise ValueError("invalid callback") from exc
if parsed.scheme != "http" or "#" in raw or parsed.username is not None or parsed.password is not None:
raise ValueError("callback must be a plain loopback URL")
authority_host = LOOPBACK_HOSTS.get(host)
if authority_host is None:
raise ValueError("callback host must be a loopback IP literal")
authority = authority_host + (f":{port}" if port is not None else "")
if parsed.netloc != authority:
raise ValueError("callback authority is not canonical")
return urlunparse(parsed._replace(path=parsed.path or "/"))
工程与系统安全加固清单
- ✓盘点 Hermes Agent 版本和安装渠道,并核实正在运行的构建。0.21.7 发布说明列出了 Desktop 应用、Microsoft Store/MSIX、安装程序、Docker 和 Hermes Cloud。[5]
- ✓通过相应的受支持渠道升级到 0.21.7 或更高版本;查阅的发布说明未列出 Termux,请单独核实。[2], [5]
- ✓确保验证函数返回规范值,授权流程保存并使用同一个值;不要验证一种表示形式后再使用原始输入。[3]
- ✓为解析器差异、userinfo、反斜杠、片段以及非规范 IP/端口增加回归测试;确认被拒绝的值不会进入授权码签发流程。[3]