上下文权限提升:不可信文本在 12 款编码智能体中被提权
2026 年 9 月 1 日的一篇论文表明,低信任内容可被提升到更高权限的消息角色与更持久的作用域,涉及 12 款智能体外壳,包括 Claude Code 与 Codex。
这是什么?
AI 智能体由模型加上**外壳(harness)**构成:外壳是决定哪些内容进入上下文窗口、来自哪些文件、以及被打上何种权限标签的代码。各厂商为这些标签定义了角色层级(OpenAI 使用 system、developer、user、assistant、tool,可信度由高到低),并训练模型在指令冲突时优先遵循高权限角色。这一层级是业界抵御间接提示注入的主要结构性防线。
2026 年 9 月 1 日,Zichuan Li、Jian Cui、Ashley Chen、Xiaojing Liao 与 Luyi Xing(伊利诺伊大学厄巴纳-香槟分校)发表了《What’s in Your Agent’s Context? Context Privilege Escalation Attacks against AI Agent Harness》(arXiv:2609.01222)。据作者所述,这是首次对真实外壳如何组装上下文所做的系统性安全分析。
核心结论是:层级在模型内部成立,但外壳在其周边泄漏。以低权限工具输出形式进入的攻击者文本,可以被向上重新标注或变为持久化内容,而攻击者始终无需接触目标主机。作者划分出两类攻击:
- M-CPE(message-role context privilege escalation):来自低权限来源的内容最终由更高权限的消息角色承载。
- X-CPE(cross-scope context privilege escalation):内容超出其被引入的上下文而持续存在,可在智能体重启后留存,并随用户进入其他项目。
作者对 12 款高知名度外壳实施了端到端概念验证攻击,包括 Claude Code、Codex、Gemini CLI、Cline、OpenCode、Goose、Aider、Qwen Code、Kimi CLI、Pi-mono、OpenClaw 与 Hermes Agent。
工作原理
论文归纳出三大类共 16 种攻击向量,其本质都是同一个动作:让外壳把攻击者的文本复制到它更信任的位置。
多样化的上下文来源。 外壳加载的内容远不止已公开文档中的那个记忆文件。Claude Code 会在运行时所触及的目录中搜索 CLAUDE.md,因此一个仅被解压、从未执行的不可信压缩包,也能投放一个记忆文件,随后被智能体以更高角色读取。Gemini CLI 还会从启动目录向下做广度优先搜索:放在已检出的拉取请求目录树深处的文件同样会被加载,无论该 PR 是否被批准。多款智能体还会组装环境信息:Claude Code 在启动时执行 git log --oneline -n 5,并把输出放入系统级上下文,这使得一条提交信息成为指令通道。
上下文标记。 几乎所有外壳都用类 XML 标签分隔上下文片段,例如 <available_skills>、<skill>、<description>、<system-reminder>。它们只是纯文本,并非特殊 token。若某段内容包含对应的闭合标签,它就能逃逸自身容器,其后的文本会被读成属于外层更高信任区块的内容。部分外壳更进一步,会从模型输出中解析标签以触发工具调用,于是被原样回显的内容就变成了动作。
组装逻辑。 加载优先级规则本身即可被利用。当 AGENTS.override.md 与 AGENTS.md 同时存在时,Codex 优先采用前者——因此,向一个在 CI 中运行 Codex 的仓库提交一个添加 override 文件的拉取请求,就能用贡献者的指令替换维护者的评审指令。记忆文件中的递归 @路径 导入,则让一行注入内容得以牵引出任意规模的附加内容树。
# 提权路径示意 — 不含可用载荷
[ r4 工具输出 ] 攻击者控制的网页 / 压缩包 / 提交信息
│
│ 外壳进行复制、发现或重新标注
▼
[ r0-r2 ] 记忆文件 · 技能描述 · 配置 · 环境信息块
│
│ 作用域扩大:会话 ──> 项目 ──> 用户
▼
每次启动重新加载,影响此后的全部会话
为在规模上度量该问题,作者构建了 CoRA(Context Risk Analyzer):一条由 LLM 辅助的分析流水线,先从外壳源码静态识别上下文来源及其角色,再通过实际运行外壳加以验证,然后依据向量分类法自动生成概念验证利用。在 12 款外壳上,CoRA 共报告 282 个存在 CPE 风险的上下文来源。概念验证在 GPT-5.5、GPT-5.4-mini 与 DeepSeek-V4-Flash 上均告成功。已演示的后果包括工具与技能调用被操纵、拒绝服务、智能体被完全接管以及远程代码执行——公开的 Claude Code 演示将运行时技能发现与下载网站模板中的内联命令语法串接起来。
为何重要
多数智能体加固建议都假定可信与不可信内容之间的边界只在摄取时划定一次。CPE 表明恰恰相反:这条边界由用户看不见、厂商也很少记录的外壳代码持续重划。你可以审阅每一条工具输出仍然失守,因为危险的一步发生在审阅之后——当外壳判定某个目录下的某个文件值得更高标签的时候。
有三点后果值得分开陈述。
代码评审是直接攻击面。 拉取请求场景并非理论包装:在 CI 中用智能体评审贡献的仓库,按设计就会接受攻击者撰写的文件、目录名与提交信息。无论评审结论如何,这些指令都已进入上下文。
持久化改变了风险性质。 普通的间接注入随会话结束而消失;X-CPE 写入的是每次启动都会重新加载的文件,从而把一次性注入转化为跟随开发者进入无关项目的立足点。
不透明是根因。 用户无法枚举自己的智能体加载了什么、来自何处、以何种角色加载,因为这部分逻辑是专有且未公开的。这是作者的核心批评,属于设计问题而非一份 bug 清单。
防御措施
升级智能体。 Codex 与 Gemini CLI 已发布可缓解部分问题的版本。在认为自己已被覆盖之前,请对照论文中的版本表核对你所用外壳的版本。
把不可信内容中的任何文件都视为不可信,包括记忆文件与技能文件。 出现在下载压缩包、依赖项或拉取请求分支中的 CLAUDE.md、SKILL.md、AGENTS.md 或 .cursor/rules,本质是披着配置文件外衣的攻击者输入。
不要在包含未经审阅的第三方目录树的目录中启动智能体。 对于 CI 评审流程,应在检出目录之外启动智能体,或在智能体启动前从分支中剥离其可识别的配置文件。尤其要留意指令文件的 override 命名变体。
用代码而非提示词来强制执行。 厂商文档表述明确:记忆文件是上下文,而非被强制执行的配置。Anthropic 指出,若要在模型作出任何决定的情况下都阻止某个动作,需要使用 PreToolUse 钩子。当角色标签失效时,拒绝列表、钩子与沙箱依然有效。
约束导入与加载路径。 关闭递归 @路径 导入或将其纳入审批流程,并排除并非由你撰写的记忆文件——Claude Code 正为此提供了 claudeMdExcludes,并在从项目文件加载外部导入前弹出确认。
每次会话都审计实际加载内容。 Claude Code 的 /context 会列出生效的记忆文件,InstructionsLoaded 钩子则记录哪些指令文件被加载以及原因。若无法枚举智能体的上下文来源,就无法对其权限作出判断。
中和被包裹内容中的标记。 如果你的外壳用标签包裹第三方文本,请在组装前对内容中的这些标签序列做转义或剥离。攻击者可以直接键入的边界符,不构成边界。
让环境元数据远离高信任角色。 在协作仓库中,提交信息、分支名、目录名与文件名都可由攻击者控制。它们应处于可用的最低角色,而不是系统块。
Status
| 项目 | 参考 | 日期 | 说明 |
|---|---|---|---|
| 主要论文 | arXiv:2609.01222,Li、Cui、Chen、Liao、Xing(UIUC) | 2026-09-01 | 两类攻击(M-CPE、X-CPE);16 种向量;282 个存在风险的上下文来源 |
| 受分析外壳 | Codex、Claude Code、Gemini CLI、Qwen Code、Kimi CLI、Aider、OpenCode、Cline、Goose、Pi-mono、OpenClaw、Hermes Agent | 2026-09-01 | 12 款均有端到端概念验证攻击 |
| 概念验证所用模型 | GPT-5.5、GPT-5.4-mini、DeepSeek-V4-Flash | 2026-09-01 | 攻击位于外壳层,并非特定于某一模型 |
| 工具 | CoRA(Context Risk Analyzer) | 2026-09-01 | 作者表示将随论文发布源码 |
| 公开演示 | 项目网站 zichuan.li/LLMAgentCPE | 2026-09-01 | 含 Claude Code 从技能发现到 RCE 的完整演示 |
| 负责任披露 | 已通报全部 12 家厂商/维护者 | — | Codex 与 Gemini CLI 已发布缓解版本;与其余厂商的工作仍在进行 |
| 厂商指引 | Anthropic Claude Code 记忆文档 | 现行 | 记忆文件是上下文而非强制配置;claudeMdExcludes、外部导入审批、PreToolUse 钩子 |
| 相关框架 | OWASP LLM Top 10(LLM01 提示注入)、OWASP Agentic Security Initiative | 2026 | 权限与工具滥用类别 |
目前没有野外利用的公开记录。作者在缓解讨论中主张减少上下文来源数量、过滤提权尝试,并让上下文组装过程对用户透明——最后一点目前尚无厂商完整实现。