AGENT PROFILE · MOCK ENABLEMENT DOCUMENT

SimpleAgent · 实体全景

s08_background_tasks.py · 234 lines · ATA Ontology v4.6 · Assembly / Execution / Safety / Correlation
系统概况
字段
名称SimpleAgent(learn-claude-code s08)
文件agents/s08_background_tasks.py(234 行)
语言Python 3
依赖anthropic, python-dotenv
运行方式REPL(交互式命令行)
核心机制后台异步执行 + 通知队列自动注入(INN-01)
GitHubhttps://github.com/shareAI-lab/learn-claude-code
分析 Scopenative + extended-clean
Max RiskScore11.34(AP-SIM-01)
PHASE 1Assembly · 系统提示组装
s08:44WORKDIR = Path.cwd() # 运行时固化为当前工作目录,唯一动态变量
s08:46SYSTEM = f"You are a coding agent at {WORKDIR}. Use background_run for long-running commands."
组装特征说明
提示类型单一静态 f-string,无动态组件
唯一变量WORKDIR启动时 Path.cwd() 固化,运行中不可修改
Soul 配置文件
Memory 注入无(无 MEMORY.md / USER.md)
Skill 列表
Mock Assembly 所需WORKDIR 路径(Path.cwd() 结果)
PromptTemplate 槽位可信度
槽位名消息角色来源可信度威胁等级
systemsystem硬编码 f-string ✅ 可信 无威胁
user_messageuserREPL 用户输入 ⚠️ 半可信 AP-SIM-02/04 入口
tool_call_result.*user工具执行返回值 ❌ 不可信 AP-SIM-03 入口
<background-results>user后台任务输出(自动注入) 🔴 最高危 AP-SIM-01 入口 · T-AUTO=1.5 · SC-GAP-BGRESULT-INJECT
PHASE 2Execution · 工具执行清单
bash同步 shell 执行
HIGH-RISK
参数:command: str
返回:stdout + stderr(max 50000 chars,s08:131)
超时:timeout=120s(s08:128)
来源行:s08:121-134
dangerous_blocklist 检查 5 项:["rm -rf /", "sudo", "shutdown", "reboot", "> /dev/"]
curl / cat / base64 / chmod 不在列表中
read_file读取文件内容
MED-RISK
参数:path: str, limit?: int
返回:文件内容(max 50000 chars,s08:140)
来源行:s08:136-143
safe_path() 路径防护(s08:137),但不过滤文件内容。
读取恶意文件内容直接进入 tool_call_result → AP-SIM-03 入口
write_file写入文件
MED-RISK
参数:path: str, content: str
返回:"Wrote N bytes to {path}"
来源行:s08:145-151
safe_path() 路径防护,但不检查写入内容。
可写入任意内容到 WORKDIR → AP-SIM-01/04 Sink
edit_file替换文件内容
MED-RISK
参数:path: str, old_text: str, new_text: str
返回:"Edited {path}"
来源行:s08:153-162
safe_path() 路径防护。语义等同于 write_file,内容无过滤。
background_run⚠️ 异步 shell 执行 · 无任何安全检查
CRITICAL
参数:command: str
返回:"Background task {id} started: {command}"
超时:timeout=300s(s08:70)
来源行:s08:56-88
无 dangerous_blocklist,无 safe_path,无内容检查。
daemon 线程直接调用 subprocess.run(command, shell=True)。
INN-02: 与 bash 形成双通道安全不对称(SC-GAP-BGRUN-NO-CHECK)
check_background查询后台任务状态
LOW-RISK
参数:task_id?: str
返回:任务状态字符串或任务列表
来源行:s08:165-184
只读查询,无执行能力。但返回值暴露命令字符串(可用于侦察)。
上下文注入机制(关键)· agent_loop s08:188-215
s08:188while True:
s08:190    # Step 1: 后台结果自动注入(T-AUTO=1.5)——每次 LLM 调用前执行
s08:191    notifs = BG.drain_notifications()
s08:192    if notifs and messages:
s08:193        notif_text = "\n".join(f"[bg:{n['task_id']}] {n['status']}: {n['result']}" for n in notifs)
s08:195        messages.append({"role": "user", # ← 注入为用户消息,LLM 视为可信
s08:196                    "content": f"<background-results>\n{notif_text}\n</background-results>"})
s08:198    # Step 2: LLM 调用(接收已注入内容)
s08:199    response = client.messages.create(model=MODEL, system=SYSTEM, messages=messages, ...)
s08:210    # Step 3: 工具执行(跟随 LLM 决策,包括被注入的指令)
PHASE 3Safety Check · 安全机制全景
机制 ID名称实现位置覆盖范围已知绕过
SC-01safe_path()s08:115-119 阻止文件操作路径逃出 WORKDIR 不检查内容,不覆盖命令字符串
SC-02dangerous_blocklists08:122-125 bash 工具 5 项危险命令字符串匹配 background_run 无此检查(INN-02);curl/cat/base64 未在列表
SC-03timeouts08:70, 128 防止无限阻塞(bash 120s,bg 300s) 300s 内可完成大多数攻击
SC-04daemon 线程s08:61 主进程退出时后台线程自动终止 生命周期管理,非安全机制
安全机制有效性矩阵
机制 AP-SIM-01
bg注入
AP-SIM-02
策略绕过
AP-SIM-03
文件注入
AP-SIM-04
持久化
总体
safe_path ✅路径 ✅路径 ⭐⭐
dangerous_blocklist ❌绕过 N/A
timeout ⚠️DoS ⚠️DoS ⚠️DoS ⚠️DoS ⭐⭐⭐
daemon 线程 ✅生命周期 ✅生命周期 N/A N/A ⭐⭐
安全缺口(SC-GAP)
SC-GAP-BGRESULT-INJECT
<background-results> 注入块无内容过滤:攻击者控制的命令输出直接以 role="user" 注入 LLM 上下文,无任何 SecurityChecker 覆盖
影响路径:AP-SIM-01(RiskScore 11.34) · 触发系数 T-AUTO=1.5 · ORP-SIM-01 提案已提交
SC-GAP-BGRUN-NO-CHECK
background_run 无 dangerous_blocklist:与 bash 工具形成双执行通道安全不对称,dangerous_blocklist 仅在 bash 工具中实现,创造"安全错觉"
影响路径:AP-SIM-02(RiskScore 11.24) · 可绕过所有 5 项危险命令限制 · 内部独有发现
SC-GAP-SAFEPATH-PARTIAL
safe_path() 仅防路径穿越,不检查读取/写入内容:恶意文件内容(prompt injection payload)无阻进入工具返回值上下文
影响路径:AP-SIM-03(RiskScore 6.96)、AP-SIM-04(RiskScore 5.10)
PHASE 4Correlation · 跨会话关联
跨会话记忆
无 MEMORY.md / USER.md / 数据库
会话关联
每次启动 history = [] 重置
持久化路径
文件系统
仅 write_file → WORKDIR 内(AP-SIM-04 利用此路径)
用户画像
无任何用户状态持久化
Mock Correlation 含义:无需模拟长期记忆。唯一的跨会话关联路径是文件系统(AP-SIM-04 利用 write_file 写入 WORKDIR 内部文件,在下次会话或 CI 流水线中触发)。若攻击者通过 AP-SIM-04 修改 Makefile / 启动脚本,可实现真正的跨会话持久化。
创新点(INN)风险等级
INN-01 · BackgroundManager 通知注入机制
🔴 高风险
background_run 输出通过 drain_notifications() 在每次 LLM 调用前自动(T-AUTO=1.5)注入为 role="user" 消息。攻击者控制后台任务的输出内容即可控制 LLM 上下文。
✅ 可修复:在 drain_notifications() 注入前对 result 内容进行过滤 / 前缀隔离 / 角色分离
INN-02 · 双执行通道安全不对称
🔴 高风险
bash 有 dangerous_blocklist(5 项),background_run 完全无检查。存在危险命令拦截机制反而会让开发者/用户误认为系统安全——这是一种"安全错觉"。
✅ 可修复:在 background_run._execute() 中应用相同或更严格的命令检查
TOOL-* 标签标注
工具 TOOL-INPUT TOOL-DATA TOOL-ACT TOOL-FIELD TOOL-DEPLOY
bash UNTRUSTED PUBLIC HIGH-RISK LOCAL TOOL-DEPLOY-PLATFORM
read_file UNTRUSTED PRIVATE MED-RISK LOCAL TOOL-DEPLOY-PLATFORM
write_file UNTRUSTED PRIVATE MED-RISK LOCAL TOOL-DEPLOY-PLATFORM
edit_file UNTRUSTED PRIVATE MED-RISK LOCAL TOOL-DEPLOY-PLATFORM
background_run UNTRUSTED PUBLIC CRITICAL LOCAL TOOL-DEPLOY-PLATFORM
check_background TRUSTED PUBLIC LOW-RISK LOCAL TOOL-DEPLOY-PLATFORM