漏洞概述 标题: Prompt Injection Scanner Bypass in Memory Tool via Multi-Word Regex Evasion 描述: Memory Tool 中的 使用了一个刚性正则表达式模式,未能检测到包含额外单词(如 , , , )的注入载荷。由于内存条目被持久化到磁盘并在每次会话开始时直接注入到代理的系统提示中,成功的绕过允许攻击者永久改变代理行为,通过外部聊天接口(API 服务器、Discord、Slack 等)影响所有未来会话。类似的绕过也存在于 中。 详细信息: 函数在 中扫描所有内容,然后将其写入代理的持久内存文件 ( )。该文件在会话开始时通过 加载到系统提示中,因此任何通过扫描器的内容都会直接影响代理的行为。 易受攻击的正则表达式位于 的第 67 行: 该模式要求关键字在 后立即出现,且仅用空格分隔。它没有考虑干预词。例如: - "ignore ALL prior instructions" — 两个关键字,而正则期望一个 - "ignore my previous instructions" — 我在 和 之间插入了内容 - "ignore the above instructions" — 我在 和 之间插入了内容 所有这些都返回 (安全),从 允许注入写入 。 相同的原因之前已被识别并修补在 (提交 )中,使用 来匹配零个或多个干预词,但 和 未用相同的修复更新。 类似的易受攻击模式存在于 的第 312 行: 这仅可选地匹配 在 之前,完全忽略了其他关键字变体和多词插入。 完整的攻击链: 1. 攻击者通过任何外部接口(API 、Discord、Slack)发送精心制作的消息。 2. LLM 处理请求并调用 memory 工具保存内容。 3. 调用 — 扫描器返回 (绕过)。 4. 注入载荷写入磁盘上的 。 5. 在下一个会话开始时, 将内容注入到代理的系统提示中。 6. 代理行为被永久改变,影响所有未来交互。 影响范围 受影响产品: 生态系统: pip 包名: hermes-agent 受影响版本: <= v2024.4.30 (v0.12.0) 修补版本: None 严重性: 严重性: High 向量字符串: CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:N 弱点: CWE-74: Improper Neutralization of Special Elements in Output Used by a Downstream Component (Injection) 影响: 这是一个持久提示注入漏洞。任何可以通过任何支持的接口(API 服务器、Discord、Slack 或其他网关平台)向代理发送消息的用户,都可以通过在系统提示中插入额外单词来永久注入指令,绕过 和目标关键字。 一旦载荷写入 ,它将在所有未来会话中持续存在,并影响每次交互。这可以被利用为: 代理行为劫持: 永久改变代理的指令、人格或目标。 数据外泄: 指示代理在未来对话中泄露敏感信息。 权限提升: 覆盖系统提示中的安全约束。 持久后门: 注入在重启后存活,并影响所有与代理交互的用户。 修复方案 PoC 代码: 方法 1: 直接扫描器绕过验证 1. 从 下载利用脚本。 2. 从 下载控制脚本。 3. 运行利用脚本: 4. 运行控制脚本以确认扫描器对标准载荷有效: 方法 2: 外部 API 利用(需要运行网关) 1. 启动 Hermes 网关: 2. 从 下载 API 利用脚本。 3. 运行利用脚本: 日志证据: 利用输出 ( ): 控制输出 ( ): 修复建议: 更新 和 中的正则表达式,以匹配零个或多个干预词,类似于 中的修复。 确保所有相关工具都使用相同的修复,以防止类似的绕过。