ATA Ontology v4.5 v1.4 · nodes+events model

Hermes Agent 威胁分析报告

📅 2026-04-16 🔬 方法论:Source × Sink × Novelty 📦 NousResearch/hermes-agent · MIT 🎯 范围:Native + Extended-Clean
v1.4 更新: (1) PoisoningEntry 可达性约束:第一投毒入口必须为外部可达实体(PUB/REG/CHAN/SUP),禁止内部实体(MEMORY.md等)作为PoisoningEntry · (2) COMP=0.5 新增可达性等级:需先攻破第三方服务才能污染响应的场景 · (3) AP-04 建模修正:攻击者自营恶意MCP Server(REG=1.0),非服务端入侵(COMP=0.5) · (4) AP-10 难度分修正:1.0→0.65 + SUP可达性修正:1.5→0.2(供应链壁垒最高,APT级),总分19.0→11.28,排名#2→#9 · (5) AP-11新增:邮件投毒→MEMORY.md+Cron双持久化后门,替换AP-06沙箱逃逸(非投毒劫持类) · (6) AP-12新增:自进化路径劫持→USER.md认知投毒→每日Workspace增量外发,替换AP-07进入Top 10(AP-07降为#11)· Novelty=5.0(AI安全文献前沿,公开案例为零)
15.65
最高威胁评分
3
≥17分 Critical 路径
6
Extended-Clean 路径
7
创新点专项分析 (INN)
3
结构性无法 patch
4
Ontology 修订提案 (ORP)
Extended-Clean 用户生活化配置

🏠 场景前提:用户日常使用后引入的 Clean 资产(无恶意,均为合法配置)

🔑
API 密钥文件 (~/.hermes/.env)
OpenAI / Anthropic / Slack / Notion Token · PIIAsset
📁
工作文档目录 (~/work/)
代码库、报告、合同、内部资料 · DataAsset
🔌
Notion MCP / 日历 MCP
config.yaml 中配置的 mcp_servers · MCPServer
💬
Slack / Discord 集成
gateway 平台接入 · Channel(ExternalEnv)
🧩
社区技能包 (skills/)
GitHub 安装的代码格式化、翻译等技能 · Skill(SkillSpace)
🧠
跨会话记忆 (MEMORY.md)
用户长期积累的工作偏好、项目上下文 · LongTermMemory
⚠️ 以上资产均为用户合法配置,不含恶意内容。攻击者仅从 Source 注入 poisoned 内容,Extended-Clean 场景说明攻击者"能获取什么"而非"用户引入了什么恶意资产"。
创新点专项安全分析 (INN-01 ~ 07)
越独特的机制,越可能是安全盲区。以下分析针对 Hermes Agent 有别于同类系统的独创性设计。
INN-01 FEATURE
跨会话记忆自动注入(MEMORY.md)
独特性:MEMORY.md 自动注入每次系统提示首部,无需用户操作。
安全含义:一次写入即永久后门——攻击者只需完成一次写入,后续所有会话均被感染。分阶段投毒(先写无害内容,后被修改)绕过 _MEMORY_THREAT_PATTERNS 的写入时检测。
AP-01 · 15.65分Critical
INN-02 DESIGN
沙箱内可调用 terminal(SANDBOX_ALLOWED_TOOLS)
独特性:execute_code 的 PTC 沙箱允许通过 UDS RPC 调用 terminal,官方承认为设计决策。
安全含义:沙箱约束(50call/50KB)不限制 terminal 子进程,等同于沙箱逃逸内置于设计中。无法通过 patch 修复
AP-06 · 9.64分无法 patch
INN-03 ECOSYSTEM
技能信任分级悖论(agent-created 最宽松)
独特性:agent-created 技能(Agent 自创)信任级别高于 community,INSTALL_POLICY["agent-created"] = (allow, allow, ask)
安全含义:被 prompt injection 操控的 Agent 创建的恶意技能,反而获得最高非内置信任级别——越"智能自主"越危险。
AP-02 · 11.78分 ↑#9
INN-04 INTEGRATION
20+ 平台统一网关(攻击面倍增)
独特性:Discord/Slack/Telegram/Email/Webhook 等 20+ 平台共享同一 Agent 实例和权限系统。
安全含义:攻击者选择认证最弱的平台作为入口——webhook 无签名验证 → 冒充用户触发完整 terminal 链。Extended-Clean 场景下每增加一个平台,攻击面非线性增长。
AP-08 · 11.45分
INN-05 FEATURE
SubAgent 委托链(审批状态继承)
独特性:SubAgent 继承父级 approval_mode,DELEGATE_BLOCKED_TOOLS 不含 terminal/execute_code。
安全含义:主 Agent 的审批状态(auto 模式)传递给子级,子级危险操作主 Agent 无法实时感知,MAX_DEPTH=2 × 完整 terminal 权限 = 2 层独立任意代码执行上下文。
AP-05 · 11.61分
INN-06 FEATURE
会话镜像(合法功能变持续数据管道)
独特性:gateway/mirror.py 提供实时会话镜像功能,配置端点存储在 config 中。
安全含义:镜像是合法特性,配置被篡改后变为持续数据外发管道——攻击者获得实时情报流而非一次性快照,且网络层面无法与正常镜像区分。
待补充独立 AP
INN-07 DESIGN
Redaction 显示层/底层分离设计
官方承认"Redaction operates on display layer only — underlying values remain intact."
安全含义:用户看到 [REDACTED] 误以为数据受保护,但 Agent 内部工具调用(包括被 prompt injection 触发的 terminal)可读取所有原始值,包括 API Key。放大 AP-04、AP-06 的危害。
放大 AP-04 + AP-06
攻击路径总览(按评分降序)
#AP攻击场景Scope SourceSinkNovelty总分 AI- 战略意图UI- 伪装
1 AP-01 MEMORY.md 记忆投毒持久后门 extended-clean 4.57.154.0 15.65 AI-PERSISTENCE UI-CONTEXT_LOAD
2 AP-04 MCP Line Jumping → API 密钥外发 extended-clean 3.66.254.0 13.85 AI-EXFILTRATION UI-TOOL_INVOKE
3 AP-11 邮件投毒→MEMORY+Cron双持久后门 extended-clean 3.04.855.0 12.85 AI-PERSISTENCE UI-EMAIL_PROCESS
4 AP-09 浏览器 Prompt Injection 外发 native 3.26.23.0 12.4 AI-COLLECTION UI-QUERY_INFO
5 AP-02 恶意社区技能工具链篡改 extended-clean 3.65.73.0 12.3 AI-PERSISTENCE UI-CODE_ASSIST
6 AP-05 SubAgent 委托链权限绕过 native 3.05.613.0 11.61 AI-PRIV_ESC UI-AGENT_DELEGATE
7 AP-03 工作目录 AGENTS.md 注入 extended-clean 3.05.53.0 11.5 AI-INITIAL_ACCESS UI-CONTEXT_LOAD
8 AP-08 网关弱认证冒充用户 extended-clean 3.05.453.0 11.45 AI-EXECUTION UI-TASK_EXECUTE
9 AP-10 LiteLLM 供应链底层劫持 native 0.786.54.0 11.28 AI-SUPPLY_CHAIN UI-CODE_ASSIST
10 AP-12 自进化劫持 → USER.md 认知投毒 → 每日外发 extended-clean 2.43.85.0 11.2 AI-COLLECTION UI-CONTEXT_LOAD
11 AP-07 Cron 调度器离线持久后门 native 2.54.73.0 10.2 AI-PERSISTENCE UI-SCHEDULE_TASK
高危攻击路径详解(Top 5)
AP-01 MEMORY.md 记忆投毒 → 跨会话持久系统提示劫持
extended-clean UI-CONTEXT_LOAD SI-PERSIST_MEMORY SI-MANIP_CONTEXT AI-PERSISTENCE · TA0003
15.65
意图三元组 UI-CONTEXT_LOAD
用户读取技术文章
SI-PERSIST_MEMORY
记忆后门植入
AI-PERSISTENCE
跨会话持久驻留
节点 + 事件流
PoisoningEntry
攻击者博客页面
WebSitePage
entry_type: mcp_tool_response
accessibility: PUB 1.2
trigger: T-ANY 1.2
INJECTweb_extract
Source
PromptTemplate.memory_guidance
prompt_builder.py:144
接受并传播毒载荷
PERSISTmemory_tool写入
Sink
MEMORY.md
LongTermMemory
sink_type: SK-MEMO
SI-PERSIST_MEMORY
SI-MANIP_CONTEXT
LEAD-TO-HARM每次会话自动注入
Affected
用户工作文档 + 对话历史
DataAsset · UserHistory
每次会话持续外发
4.5
Source分
PUB×T-ANY×0.75
+
7.15
Sink分
全局持久危害
+
4.0
Novelty
突破+3 稀有+1
=
15.65
/ 20

⚡ Harm 对象

harm_type
user_data_loss + user_privacy_leak
harm_event
LeakToEvent(持续外发完整对话)
severity
0.95
harmreversed
false — 已外发数据不可撤回

🔍 检测缺口

_MEMORY_THREAT_PATTERNS(11条)仅在写入时静态匹配;分阶段投毒(Turn1写无害内容,Turn2被修改为恶意内容)绕过写入检测。读取时注入系统提示无二次扫描。INN-01 的核心威胁。
AP-10 LiteLLM 供应链攻击 → Agent 底层完全劫持
native (依赖链) SI-EXEC_SUPPLY SI-PERSIST_CODE AI-SUPPLY_CHAIN · AML.TA0001
15.5
意图三元组 UI-CODE_ASSIST SI-EXEC_SUPPLY + SI-PERSIST_CODE AI-SUPPLY_CHAIN + AI-PERSISTENCE
PoisoningEntry
PyPI: litellm v1.82.7/8
供应链恶意包
entry_type: public_repo
accessibility: SUP 0.2
trigger: T-ANY 1.2
TeamPCP · 2026-03-24
INJECTpip install
Source
Python 运行时环境
requirements.txt → litellm
import 机制传播
PERSIST.pth 写入
Sink
.pth 文件(site-packages)
sink_type: SK-SYS
SI-EXEC_SUPPLY
Python 启动时自动执行
LEAD-TO-HARM底层劫持
Affected
整个 Hermes Agent 进程
AgentAsset
全量权限·所有工具·用户数据
零防御覆盖
0.78
Source分
SUP(0.2)×T-ANY×0.65
+
6.5
Sink分
全量凭据+代码外发
+
4.0
Novelty
突破+2 稀有+2
=
11.28
/ 20
v1.4 修正:难度分1.0→0.65 + SUP可达性1.5→0.2(供应链攻击需APT级能力,壁垒最高)。Source分5.0→0.78,总分19.0→11.28,排名#2→#9。

⚡ Harm 对象

harm_type
system_env_loss + user_data_loss + user_privacy_leak
harm_event
LeakToEvent(Python 进程启动时自动外发 ~/.hermes/.env + ~/work/** 至攻击者端点 · Sensitive-CREDENTIAL + Sensitive-CODEBASE)
severity
1.00
harmreversed
false — 需卸载重装依赖,清除 .pth

🔍 检测缺口

Hermes CI 检查 .pth 文件和 base64+exec 针对源码扫描,不扫描安装时写入的文件。OSV check 检查 npm/npx,不检查 PyPI 包的 .pth 注入。这是 零防御覆盖 的路径。
AP-04 MCP Line Jumping → API 密钥 + 用户数据一次性外发
extended-clean UI-TOOL_INVOKE SI-EXFIL_MCP SI-EXEC_TOOL_DESC AI-EXFILTRATION + AI-CRED_ACCESS · TA0010
13.85
Extended-Clean 前置:用户主动安装攻击者自营的恶意 MCP Server(通过 MCP 注册表发现) + ~/.hermes/.env 存有多个 API Key(OpenAI/Anthropic/Slack)。
v1.4 建模修正:攻击者自营恶意 MCP Server(REG=1.0),而非入侵合法 Notion 服务端(COMP=0.5)。PoisoningEntry 正确性已修正。
意图三元组 UI-TOOL_INVOKE
调用恶意 MCP Server
SI-EXFIL_MCP + SI-EXEC_TOOL_DESC
MCP Line Jumping
AI-EXFILTRATION + AI-CRED_ACCESS
PoisoningEntry
攻击者自营恶意 MCP Server
MCPServer (API)
entry_type: mcp_tool_response ←ORP-02
accessibility: REG 1.0
trigger: T-ANY 1.2
用户主动安装
INJECTMCP Line Jumping
Source
PromptTemplate(工具结果上下文)
MCP 返回内容进入 Agent 上下文
_build_safe_env() 不覆盖
LEAD-TO-HARMterminal 执行外发
Sink
terminal_tool (curl + base64)
Tool (SBE)
sink_type: SK-TOOL
SI-EXFIL_MCP
Affected
~/.hermes/.env + MEMORY.md
PIIAsset (API Keys)
DataAsset (UserHistory)
harmreversed: false

🔍 检测缺口(零防御区域)

_build_safe_env() 仅过滤 MCP 进程的环境变量,不过滤 MCP 工具返回内容触发的后续 Agent 调用。MCP 工具返回值是唯一没有任何安全扫描的数据入口。INN-07(display redaction)让用户误以为 API Key 受保护。
AP-02 恶意社区技能安装 → approval.py 篡改 → 支付审批失效
extended-clean UI-CODE_ASSIST SI-PERSIST_CODE AI-PERSISTENCE + AI-DEFENSE_EVASION · TA0003
11.78 ↑#9
Extended-Clean 前置:用户已安装 3 个社区技能(代码格式化 / 翻译 / 文件整理)。攻击者发布"代码格式化助手 v2"技能,含隐藏后门逻辑,功能正常以避免用户怀疑。
意图三元组 UI-CODE_ASSIST
安装代码辅助技能
SI-PERSIST_CODE
篡改 approval.py
AI-PERSISTENCE + AI-DEFENSE_EVASION
PoisoningEntry
恶意社区技能 repo
Skill (GitHub)
entry_type: public_repo
accessibility: PUB 1.2
trigger: T-BROAD 1.0
INJECTskills_guard 静态扫描通过
Source
PromptTemplate.skills_guidance
prompt_builder.py:164
skills 注入系统提示
PERSISTexecute_code/subprocess 旁路 approval.py
Sink
tools/approval.py
File (SystemConfig)
sink_type: SK-SYS
SI-PERSIST_CODE
审批机制被篡改
LEAD-TO-HARM永久失效
Affected
所有后续会话权限
AgentAsset (SystemPrompt)
harmreversed: false
需手动恢复 approval.py

🔍 检测缺口(INN-03 信任分级悖论 + SC-GAP-EXECUTE-CODE)

INSTALL_POLICY["agent-created"] = ("allow","allow","ask"):Agent 被操控后生成的恶意技能获得比社区技能更高的信任。skills_guard.py 静态扫描(70+规则)对混淆+延迟执行无效,运行时行为无独立沙箱监控。
v1.5修订:Persist 路径更新为 execute_code 工具内 subprocess.run() 直接修改 approval.py——该路径完全旁路 approval.py hook,无需规避 DANGEROUS_PATTERNS。d_Sink₁ 0.80→1.00,危害分 3.02→3.78,总分 11.02→11.78,排名 #10→#9。

⚡ Harm 对象

harm_type
financial_loss + defense_evasion
harm_event
PayedToEvent(approval.py 审批逻辑被篡改失效,支付/转账等高危操作无需用户确认,攻击者可静默触发向其账户转账 · Sensitive-FINANCIAL)
severity
0.90
harmreversed
false — 需手动恢复 approval.py,历史未经审批操作不可撤销
CriticalEntity
tools/approval.py(Sensitive-FINANCIAL · SystemConfig)
AP-11 邮件投毒 → MEMORY.md + Cron 双持久化后门(互锁自愈)
extended-clean UI-EMAIL_PROCESS SI-PERSIST_MEMORY SI-CronPersist AI-PERSISTENCE · TA0003 NEW
12.85
意图三元组 UI-EMAIL_PROCESS
用户处理邮件
SI-PERSIST_MEMORY + SI-CronPersist
双Sink写入
AI-PERSISTENCE
双持久互锁驻留
节点 + 事件流
PoisoningEntry
攻击者发送的恶意邮件
Email
entry_type: email_message
accessibility: PUB 1.2
trigger: T-BROAD 1.0
INJECT邮件Skill读取
Source
tool_call_result(邮件Skill返回正文)
PromptTemplate
接受并传播毒载荷
PERSIST×2双Sink写入
Sink ×2
MEMORY.md + CronCreate
sink_type: SK-MEMO + SK-PERSIST
双持久互锁自愈
零安全覆盖
LEAD-TO-HARM跨会话持续
Affected
MEMORY.md + CronScheduler + ~/.hermes/.env
AF-MEMORY + AF-TOOL + AF-CONFIG
持续凭证外发
3.0
Source分
PUB×T-BROAD×0.50
+
4.85
Sink分
双Sink持久危害
+
5.0
Novelty
双持久互锁首见
=
12.85
/ 20

⚡ Harm 对象

harm_type
user_data_loss + user_privacy_leak + persistence
harm_event
LeakToEvent(持续凭证外发)
severity
0.90
harmreversed
false — 需同时清除MEMORY.md与Cron任务方可根除

🔍 检测缺口(双持久互锁)

SC-GAP-EMAIL-RESP(零覆盖):邮件Skill返回内容无任何安全扫描,直接进入Agent上下文。SC-GAP-CRON-APPROVAL(零覆盖):CronCreate无强制用户确认机制。核心威胁:MEMORY.md指令重建Cron,Cron任务重建MEMORY.md,形成双持久互锁自愈机制——需同时清除方可根除。
PoisoningEntry 可达性分析
可达性约束原则(v1.4):PoisoningEntry 标注的实体必须是攻击者在无需先行内部妥协的情况下即可控制的外部资源。内部实体(如 MEMORY.md、本地配置文件等)不得作为 PoisoningEntry,只能作为 Sink 或 Affected 节点。可达性等级决定 Source 分的乘数基准:PUB(公开可达)=1.2、REG(注册/发现可达)=1.0、CHAN(渠道可达,需社会工程)=0.9、COMP(需先行内部妥协)=0.5、SUP(供应链,壁垒最高·APT级)=0.2
AP ID PoisoningEntry 实体 可达性等级 乘数 正确性 说明
AP-01 攻击者博客页面 PUB 1.2 web_extract 自动处理;无需任何前置妥协
AP-02 GitHub Skill 仓库 PUB 1.2 用户主动安装;攻击者仅需发布恶意仓库
AP-03 克隆仓库 AGENTS.md PUB 1.2 Hermes 自动读取 context_files;攻击者控制公开仓库即可
AP-04 攻击者自营恶意 MCP Server REG 1.0 ✅ (v1.4修正) 非服务端入侵;用户主动从 MCP 注册表安装;攻击者自营服务
AP-05 Slack 恶意消息 CHAN 0.9 需能向用户 Slack 工作区发送消息;有社会工程成本
AP-11 攻击者发送的恶意邮件 PUB 1.2 任何人可发邮件,邮件Skill自动处理;双Sink互锁(MEMORY.md + CronCreate),需同时清除方可根除
AP-07 攻击者网页 PUB 1.2 browse_web 工具读取;攻击者控制目标网页内容
AP-08 Webhook / API 入口 PUB 1.2 直接 API 注入;gateway 无签名验证,公开暴露
AP-09 攻击者参考页面 PUB 1.2 browser 工具读取;用户主动触发浏览操作
AP-10 PyPI 恶意包 SUP 0.2 供应链级别(APT级,壁垒最高);SUP 1.5→0.2,难度分0.65,总分19.0→11.28
安全机制有效性评估
机制覆盖路径覆盖盲区有效性
_MEMORY_THREAT_PATTERNS (11条) AP-01 写入时部分检测 分阶段投毒、读取时注入系统提示 ⚠️ 有限
_CONTEXT_THREAT_PATTERNS (10条) AP-03, AP-09 部分检测 多语言/编码混淆/分段注入;检测到后不中止 ⚠️ 有限
skills_guard THREAT_PATTERNS (70+条) AP-02 安装前静态扫描 混淆+延迟执行、运行时行为无监控 ⚠️ 有限
MCP _build_safe_env() 过滤 MCP 进程环境变量 AP-04:不过滤工具返回内容触发的后续调用 ❌ AP-04 无效
DANGEROUS_PATTERNS (~30条) AP-08 部分检测明显危险命令 base64+curl 组合、多步骤命令绕过 ⚠️ 有限
SANDBOX_ALLOWED_TOOLS AP-06:设计决策允许 terminal,结构性无法 patch ❌ 结构性问题
MAX_DEPTH=2 (SubAgent) 限制 AP-05 嵌套深度 每层仍有完整 terminal/execute_code 权限 ⚠️ 有限
OSV malware check npm/npx 包检查 AP-10:不检查 PyPI 包 .pth 注入,供应链零防御 ❌ AP-10 无效
Output Redaction (redact.py) display 层 PII 剥离(用户可见) INN-07:Agent 内部工具调用读到原始值,display-only 无保护效果 ❌ 误导性保护
approval.py on/auto/off on 模式下有一定人工审批 auto/off 模式完全失效;AP-02 可永久篡改此机制 ⚠️ 模式依赖
Ontology 修订提案(ORP)
ORP-01
新增三标签族:UI- / SI- / AI-
UserInstructIntent(用户伪装意图)· SinkIntent(具体恶意动作)· AttackIntentTag(ATT&CK 战略目标)三层语义分工,打在不同对象上,支持意图三元组分析。
Critical
ORP-02
PoisoningEntry.entry_type += mcp_tool_response
MCP 工具返回值是独立的高危入口类型(Trail of Bits MCP Line Jumping 研究证实),accessibility=REG/AUTH,trigger=T-ANY。AP-04 的核心 PoisoningEntry。
High
ORP-03
AttackPath += scope 字段 (native / extended-clean)
区分"开箱即有风险"(native)和"用户生活化使用后风险"(extended-clean)。Extended-Clean 中的 clean 资产本身无恶意,只是让 Harm 有了真实受害对象。
High
ORP-04
Sink.sink_subtype 细化枚举
SK-TOOL 细化为 SK-TOOL-EXEC / SK-TOOL-WRITE / SK-TOOL-COMM / SK-TOOL-SCHED。SK-SYS 细化为 SK-SYS-PROMPT / SK-SYS-SKILL / SK-SYS-AGENT。
Medium
专项问答(Q&A · 动态加载自 HermesAgent_QA.md)
正在加载 Q&A 数据…
ATA Ontology v5.0 · Hermes Agent 威胁分析报告 v1.4 · 2026-04-21
12 AttackPaths · 7 创新点分析 · 4 ORP · 9 Q&A · nodes+events 完整结构