最简单的 Prompt Injection 在同一轮 Context 中完成:不可信文档进入模型,模型立即改变行为。真实 Agent 往往包含多轮推理、多个 Tool、多个模型和持久化状态,攻击内容可能先被加工、转存或隐藏,在之后的阶段才激活。
传播方式决定了攻击链的可见性、持续时间和影响范围。
Cross-context Injection
Cross-context Injection 指攻击内容从一个上下文进入另一个上下文,并在新上下文中继续影响模型。
text
网页正文
→ 搜索 Agent 摘要
→ 摘要交给规划 Agent
→ 规划结果交给执行 Agent
如果系统只在最初的网页读取阶段标记内容,后续摘要被当作"内部 Agent 输出"重新信任,就会发生 Context Laundering:内容经过可信组件后失去原始 Provenance,但其指令语义仍然保留。
Generated Summary 不是新的可信 Source。它是包含派生内容的中间产物,应该继承原始数据的信任标签。
Tool Result Injection
Agent 调用 Tool 后,结果通常会重新进入下一轮 Context。Tool Result 因此既是输出,也是新的输入 Source。
text
LLM
→ call fetch_page(url)
→ Tool 返回网页正文
→ 正文进入下一轮 Context
→ 模型改变计划
即使 Tool 本身完全按设计工作,返回数据仍可能由攻击者控制。安全分析不能把"来自合法 Tool"误认为"返回内容可信"。
json
{
"tool": "fetch_page",
"execution_trust": "trusted_tool",
"content_trust": "untrusted_external_data"
}
执行组件可信与数据内容可信是两个不同属性。
Stored Prompt Injection
当攻击内容被写入知识库、Memory、代码仓库、工单或共享文档,并在以后被重新检索,就形成持久化传播。
text
攻击者一次写入
→ 内容被持久化
→ 多个任务检索
→ 多个 Agent 或用户受到影响
Stored Injection 的风险取决于:
text
Persistence 内容保存多久
Reach 哪些用户、Agent 或租户会读取
Trigger 什么检索条件会让它进入 Context
Privilege 读取它的 Agent 拥有什么能力
Cleanup 删除原始入口后,派生副本是否仍存在
如果内容被摘要后写入 Memory,即使原始恶意文档已经删除,派生内容仍可能继续触发。这也是为什么 Provenance 需要覆盖派生数据。
Multi-stage Prompt Injection
多阶段攻击不会在第一段内容里直接给出最终操作,而是将意图拆开,让不同步骤分别看起来合理。
text
Stage 1
让 Agent 读取某个内部资源。
Stage 2
让 Agent 将内容保存为草稿或 Memory。
Stage 3
在之后的任务中诱导 Agent 调用外部写 Tool。
单独审查每一步时,读取、保存和发送都可能符合某种业务用途。风险来自跨步骤组合,以及系统没有把早期 Source Provenance 传播到最终 Sink。
Multi-agent 传播
多 Agent 系统常将输出交给下一个 Agent:研究 Agent 负责收集资料,规划 Agent 负责制定步骤,执行 Agent 负责调用 Tool。
text
Research Agent:能接触不可信网页
Planning Agent:能决定任务步骤
Execution Agent:拥有高权限 Tool
职责拆分只有在信任和权限也被拆分时才有安全价值。如果执行 Agent 无条件信任 Planning Agent 的自然语言输出,攻击内容仍能跨 Agent 传播。
安全接口应传递结构化的操作申请和 Provenance,而不是把上游输出直接当作新的高权限指令。
python
OperationProposal(
action="create_draft",
arguments={...},
requested_by="planning_agent",
originating_sources=["external_web"],
user_intent_id="task-123",
)
传播图需要同时记录内容和状态
仅记录文本流向仍然不够。多阶段 Agent 还会改变状态:
text
Conversation State
Task Plan
Memory
Draft
Temporary File
Approval State
Tool Cache
Agent-to-Agent Message
任何后续会重新进入决策流程的状态,都可能成为新的 Source。Threat Model 需要明确状态的写入者、读取者、作用域、生命周期和原始 Provenance。
传播控制的重点
对抗复杂传播应在整个生命周期保留和使用信任信息。
text
入口处
记录 Source 与攻击者控制程度。
转换时
派生内容继承原始 Provenance。
跨 Agent 时
传递结构化请求,而不是默认信任自然语言输出。
写入状态时
记录写入主体、来源、Scope 和 TTL。
到达 Sink 前
重新检查完整数据流和指令来源。