feat: add command blacklist guardrail for MCP command channels
MCP 工具一旦被外部 agent 放行,参数里的命令就不再受它自身权限系统检查 (Claude Code 的 MCP 权限规则只按工具名匹配、不带参数内容), vps_exec 里的 rm -rf / 在 agent 侧零提示。这是唯一的兜底。 - src/guard.rs:名单判定。归一化(剥引号、\/ 还原、折叠空白、转小写、 短选项聚簇排序,故 -rf/-fr/-r -f 等价)+ * 通配 + 词边界匹配 + 截断标记检查 - data/deny-list.txt:首启写出内置 25 条不可逆灾难,用户可增删,每次判定重读 - 挂在 vps_exec 与 vps_terminal 的 send 上,命中即拒绝执行、不产生输出 - 工具描述写明护栏存在,并告诉 agent 被拦时不要换写法重试 - GET/PUT /api/guard + 设置页 MCP 标签下的名单编辑区 - 没有白名单、确认流程、风险分级与安全挡位 边界:防手滑,不防蓄意绕过(r\m -rf /、$(echo rm) -rf / 这类纯模式匹配必然漏)。 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
1 parent
14e7066db9
commit
7bf552952f
6 files changed
+545
-5
No files matched your search
+5
-3
@@ -89,9 +89,11 @@
|
||||
- 执行命令(同步等待或转后台任务,含 Windows PowerShell 编码与 CLIXML 处理)→ 复用 **板块一/二(SSH & 本机执行链路)**
|
||||
- 列目录 / 读写改删文件 → 复用 **板块三(文件浏览器内核)**
|
||||
- 上传 / 下载大文件 → 复用 **板块四(文件上传下载引擎)**,一次调用完成传输
|
||||
- **命令安全护栏与审批**:
|
||||
- 针对 Agent 执行路径设置 TOML 规则护栏(红线 > 黑名单 > critical > 需审批 > 白名单 > 放行),每台主机可设独立安全挡位(`safe` / `standard` / `trusted`)。
|
||||
- 拦截时返回清晰的 `why` + `suggestion`;需人工确认的命令进入 UI 审批队列,并在主机运行记录与审计中留痕。
|
||||
- **命令黑名单护栏**:
|
||||
- 一份全局名单(`data/deny-list.txt`,一行一条、`*` 通配、按词边界,首启写出内置的不可逆灾难,之后用户自己增删),只覆盖 `vps_exec` 与 `vps_terminal` 的命令通道;文件写/传输类不判定。
|
||||
- 命中即拒绝执行并说明命中了哪条;没有白名单、确认流程、风险分级与安全挡位。
|
||||
- 存在的理由只有一个:MCP 工具一旦被外部 agent 放行,参数里的命令就不再受它自身权限系统检查,这里是唯一的兜底。
|
||||
- 边界:防手滑,不防蓄意绕过(`r\m -rf /`、`$(echo rm) -rf /` 这类形态纯模式匹配必然漏)。
|
||||
- **双传输支持**:`--mcp-stdio`(供本机 Claude Code 零配置直连)+ Streamable HTTP(带范围令牌)。
|
||||
|
||||
---
|
||||
|
||||
Reference in new issue
Block a user