终端过滤绕过测试
本skill重点讨论:AI IDE或编码Agent虽然宣称限制了终端命令,但这些限制是否真的有效。
很多产品只检查命令名看起来安全,却没有真正约束参数、换行、Shell展开、子命令或平台差异。
什么时候用
- 产品支持Agent直接运行终端命令
- 文档声称有allowlist、blocklist、审批过滤
- 已确认提示词注入、工具调用或任务执行能走到终端
- 需要判断能执行命令到底受不受控
重点测试事项
- 过滤器检查的是命令名、整行字符串,还是结构化语法
- 参数是否单独校验
- 换行、分号、管道、子命令、Shell展开是否会漏检
- Windows PowerShell、cmd、bash、zsh的处理是否一致
- 审批基于什么对象缓存:命令名、完整命令、路径、历史状态
常用绕过思路
1. 危险参数藏在允许命令里
例子:
find -exectar --to-commandgit -c core.pager=...
- 结构拆分例子:
- 换行注入
- 命令拼接
- 多段解析不一致3. Shell特性例子:
$(...)- 反引号
- 变量展开
- 通配符与路径解析4. 平台差异例子:
- PowerShell参数与bash参数语义不同
cmd /c、powershell -Command之类包装器导致边界失效
推荐流程
- 先确认真实执行链。 模型输出的命令是如何传给Shell的?
- 识别过滤所在层。 是模型前、Shell前、Shell后,还是只做UI提示?
- 从最小绕过开始。 先证明过滤器漏看了某一类结构,再讨论更深影响。
- 区分能通过审批和能真正执行。 有些命令能显示通过,但实际被后端拦了;有些相反。
- 按平台复核。 同一产品在PowerShell与bash下常常是两套问题。
证据重点
- 被批准时看到的命令
- 最终实际执行的命令
- 中间是否经过重写、拼接、包装
- 参数是否在审批后发生变化
与其他skill的衔接
- 前置常用是
提示词注入攻击链测试 - 如果过滤绕过后能把数据发出去,可接
AI IDE数据外传测试 - 如果绕过后能改写配置或形成持久化,可接
AI IDE代码执行面测试或MCP配置投毒测试
可优先参阅的资料
references/allowlist-patterns.mdreferences/bypass-payloads.mdreferences/known-vulns.md
输出表述建议
最终结论尽量写清楚:
- 过滤模型:产品声称如何限制命令
- 真实缺陷:漏了命令名、参数、结构还是Shell特性
- 最小绕过样例:哪种形式能稳定通过
- 执行结果:最终能做到什么
- 平台范围:只影响某个Shell,还是通用问题