Repository navigation
构建 Tool 执行脚本安全扫描、Filter 拦截与监控机制 #90
Description
背景和价值
tRPC-Agent 的 Tool、MCP Tool、Skill 和 CodeExecutor 能让 Agent 执行脚本、调用外部命令、读写文件或访问网络。这类能力是 Agent 落地自动化任务的关键,但也带来安全风险:恶意脚本可能删除文件、读取密钥、外传数据、安装不可信依赖、无限循环占用资源,或者通过 shell 注入绕过限制。
生产环境不能只依赖“把代码丢进沙箱”来解决安全问题。更合理的做法是在执行前通过 Filter 做静态扫描和策略判断,在执行时做资源限制和环境隔离,在执行后留下可审计记录、监控指标和 tracing 信息。该题要求构建 Tool 执行脚本的安全检查器、运行前拦截机制和可观测能力,帮助框架在启用工具执行能力时具备更清晰的安全边界。
任务描述
设计并实现一个 Tool Script Safety Guard。输入待执行的脚本内容、命令行参数、工作目录、环境变量和 tool 元数据,系统在真正执行前通过可插拔 Filter 进行风险扫描,输出 allow / deny / needs_human_review 决策;对允许执行的脚本记录安全摘要,对拒绝执行的脚本给出明确原因,并产出可用于监控系统消费的结构化事件。
具体要求
至少覆盖以下风险类型:
1.危险文件操作:递归删除、覆盖系统目录、访问 ~/.ssh、读取 .env、读取凭据文件等。
2.网络外连:使用 curl、wget、requests、aiohttp、socket 等访问非白名单域名。
3.进程和系统命令:调用 subprocess、os.system、shell 管道、后台进程、提权命令等。
4.依赖安装:执行 pip install、npm install、apt install 等可能改变运行环境的命令。
5.资源滥用:无限循环、超大文件写入、fork bomb、长时间 sleep、大量并发任务等可疑模式。
6.敏感信息泄漏:把 API Key、token、password、私钥内容写入日志、文件或网络请求。
实现要求:
●同时支持 Python 脚本和 Bash 命令的扫描。
●提供可配置策略文件,例如 tool_safety_policy.yaml,支持白名单域名、允许命令、禁止路径、最大超时、最大输出大小等配置。
●风险判定至少分为 allow、deny、needs_human_review 三类,不能把所有不确定情况都直接放行。
●需要能以 Filter 或 wrapper 形式接入 Tool / Skill 执行链路的前置检查位置;如果暂不直接改核心执行链路,也要提供清晰的 wrapper 示例。
●对扫描结果输出结构化报告,包含风险类型、命中规则、证据片段、建议处理方式和最终决策。
●需要输出审计日志或监控事件,至少包含 tool name、decision、risk level、rule id、耗时、是否脱敏、执行是否被拦截。
●如项目环境启用了 OpenTelemetry,应预留 span attributes 或等价埋点字段,例如 tool.safety.decision、tool.safety.risk_level、tool.safety.rule_id。
●不要求做到完美安全,但必须明确误报、漏报和绕过风险。
交付物
●新增安全检查器代码,例如 trpc_agent_sdk/tools/safety/、scripts/tool_safety_check.py 或示例目录中的独立实现。
●tool_safety_policy.yaml 示例配置。
●至少 12 条测试样例:安全 Python、危险删除、读取密钥、网络外连、白名单网络请求、subprocess 调用、shell 注入、依赖安装、无限循环、敏感信息输出、Bash 管道、人工复核场景。
●tool_safety_report.json 示例输出。
●tool_safety_audit.jsonl 或等价审计日志示例输出。
●README 或设计说明,解释规则体系、接入方式、已知限制和如何扩展新规则。
验收标准
1.公开提供的 12 条脚本样本必须全部可运行扫描并输出结构化报告。
2.高危脚本检出率 ≥ 90%,安全样本误报率 ≤ 10%。
3.读取密钥、危险删除、非白名单网络外连三类问题检出率必须达到 100%。
4.扫描单个 500 行脚本耗时 ≤ 1 秒。
5.报告必须包含 decision、risk level、rule id、evidence 和 recommendation。
6.策略文件修改后不需要改代码即可改变白名单域名、禁止路径和允许命令。
7.Filter / wrapper 必须能在执行前拒绝高危脚本,并记录一条可审计事件。
8.文档必须说明该机制和沙箱、Filter、Telemetry、CodeExecutor 的关系,以及为什么它不能替代沙箱隔离。
本issue为2026犀牛鸟开源人才培养活动专属issue,仅供已报名参与犀牛鸟活动的同学认领
【认领时间】7月1日~7月31日(7月1日前认领视为无效❗)
【认领方式】在本issue评论区回复“已认领本任务”,即视为认领成功
【活动报名】需提前完成犀牛鸟报名问卷,问卷将用于活动登记和奖励发放:https://wj.qq.com/s2/26888567/gh2q
Activity
dongdonglfd commentedon Jun 30, 2026
已认领本任务
ha0924 commentedon Jun 30, 2026
已认领本任务
lyra-planet commentedon Jun 30, 2026
已认领本任务
Spock12138 commentedon Jun 30, 2026
已认领本任务
xwzmonster commentedon Jun 30, 2026
已认领本任务
k0mondor commentedon Jun 30, 2026
已认领本任务
lll-peanut commentedon Jun 30, 2026
已认领本任务
xyxhhhhh commentedon Jul 1, 2026
已认领本任务
Violet2314 commentedon Jul 1, 2026
已认领本任务
Ygrowly commentedon Jul 1, 2026
已认领本任务
FireCollector commentedon Jul 1, 2026
已认领本任务
Susan-fish commentedon Jul 1, 2026
已认领本任务
455033731 commentedon Jul 1, 2026
已认领本任务
40 remaining items
szxiulin commentedon Jul 26, 2026
已认领本任务
xun0017 commentedon Jul 27, 2026
已认领本任务
KAI3zZ commentedon Jul 27, 2026
已认领本任务
docs: migrate safety guard docs to mkdocs structure
test(tools/safety): 补齐安全护栏未覆盖分支的单元测试 (trpc-group#90)
fix(tools/safety): 处理 Code Review 反馈 (trpc-group#90)
style(tools/safety): 修复 _scanner.py W504 换行 (trpc-group#90)
fix(tools/safety): 修复语言探测与网络放行的检测绕过 (trpc-group#90)
fix(tools/safety): 回应第四轮 AI Code Review — 异步审计落盘与 AST005 误报 (trpc-gro…
safety: suppress Python parse errors for unknown segments
safety: suppress Python parse errors for unknown segments
safety: suppress Python parse errors for unknown segments
raychen911 commentedon Aug 5, 2026
@xyxhhhhh @YAO-001 完成任务并获奖
raychen911 commentedon Aug 5, 2026
@ha0924 @Violet2314 @lll-peanut @Spock12138 @zzp1221 @DNKYr @shsaihdsaiudh 完成任务