关于 Rce Guard
Rce Guard 面向 MCP 服务运营者,生成隔离策略描述符,并扫描子进程命令中的已知 RCE 模式。v0.1 只描述策略,不会对运行中的进程实际执行隔离。
主要功能
- 01生成进程隔离策略描述符
- 02配置网络出口允许列表
- 03扫描已知 RCE 行为模式
- 04跟踪跨服务 Canary 泄漏
- 05追加写入 NDJSON 审计日志
- 06规范化 Unicode 输入
适用场景
- 01为 MCP 子进程生成策略
- 02检查命令中的已知 RCE 模式
- 03跟踪跨服务的 Canary 泄漏
MCP 相关
它提供 MCP 服务及用于注册、审计子进程,扫描命令、跟踪 Canary、生成网络出口策略描述符和读取审计日志的工具。v0.1 的工具不会对运行中的进程实际执行策略。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
6收录的工具列表 · 更新于 3 周前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| args | array | 否 | |
| binary | string | 是 | |
| serverId | string | 是 | |
| trustTier | enum | 是 | LOW | MEDIUM | HIGH | CRITICAL |
| isolationProfile | object | 否 | |
| isolationProfile.cpuMs | integer | 否 | |
| isolationProfile.memMB | integer | 否 | |
| isolationProfile.pidMax | integer | 否 | |
| isolationProfile.fsReadOnly | array | 否 | |
| isolationProfile.fsWritable | array | 否 | |
| isolationProfile.egressAllowlist | array | 否 |
详细介绍
属于 StudioMeyer MCP Stack 的一部分 — 在马略卡岛打造 🌴 · 如果你在使用,请点 ⭐
mcp-rce-guard
适用于 MCP 服务的策略合成、行为式 CVE 重放与金丝雀追踪库。Foundation Pillar 9。
v0.1 范围:策略合成器,而非内核级沙箱
请准确理解它是什么、又不是什么。 v0.1 是一个构建模块库,用于合成隔离策略描述符(landlock JSON 配置文件、sandbox-exec .sb 方案文件、cgroups-v2 规范映射),并提供行为谓词,用于扫描子进程命令中已知的 RCE 漏洞模式。它不会将这些策略应用到正在运行的进程。负责启动子进程的宿主需要将描述符转换为特定平台的系统调用(Linux landlock、macOS sandbox-exec、cgroups-v2 fs 写入)。
原生强制执行(NAPI-RS landlock 绑定、sandbox-exec execa 封装、带退出时清理功能的 cgroups-v2 文件写入、跨平台集成测试)属于 v0.2 阶段,不包含在 v0.1 中。分层防御依赖宿主将策略输出接入实际强制执行;本库负责干净地完成前半部分。
如果你需要以下功能,请使用本库:
- 以类型安全且经过验证的方式描述 MCP 子进程可以读取、写入、启动和通信的对象。
- 可复现的扫描器,用于检测子进程命令中已知的 RCE 漏洞类别(MCP-SDK-RCE-2026-04-22、CVE-2026-27124、Nginx-MCP RCE 9.8、解释器内联求值 RCE),以及 simulate_attacker_input 语料库中的 5 种 shell 注入模式和 3 种全角 Unicode 载荷模式。
- 仅追加的 NDJSON 审计日志,记录每项隔离决策。经过验证的防篡改签名(Acra 模式的密钥派生 + 轮换 + 集成验证器)已列入 v0.2 路线图;v0.1 提供未签名日志,并将签名作为 v0.2 的交付内容。
如果你需要在内核边界实际约束恶意子进程,请不要使用 v0.1。此时,v0.1 描述符需要与强制执行辅助工具配合使用。v0.2 将提供该辅助工具。
功能(v0.1)
- 进程隔离策略合成 — 输出 landlock(Linux >=5.13)策略描述符、sandbox-exec(macOS)Scheme 配置文件、cgroups-v2 规范(memory.max、pids.max、cpu.max)。仅提供描述符;不会执行系统调用。
- 网络出站允许列表 — 默认拒绝策略,支持通配符 / 精确匹配 / 后缀匹配 / port:* 匹配。仅提供描述符;不集成 nftables / 数据包过滤器。
- CVE 重放套件 — 针对已知 MCP 服务 RCE 向量(
mcp-sdk-rce-2026-04-22、cve-2026-27124、nginx-mcp-rce-9.8、mcp-interpreter-eval-rce)的行为谓词。不是利用载荷,而是用于扫描目标命令是否存在易受攻击模式的谓词。mcp-interpreter-eval-rce测试样例(在 0.1.1 中添加)会标记解释器内联求值入口(node -e/--eval/-p、python -c、perl -e、ruby -e、php -r、deno eval、bun -e),这些入口无需 shell 二进制文件或 shell 元字符即可执行任意代码;自 0.1.1 起,shell 元字符谓词也会标记换行符/CR 命令分隔符。精确令牌匹配可避免将无害的启动标志(--experimental-vm-modules、--max-old-space-size、--inspect)误判为漏洞。 - 跨服务金丝雀令牌 — 签发令牌,并扫描下游 stdout / fs-write / network-egress 流中的泄漏(MCPHunt arXiv 2604.27819 模式)。
- 仅追加的 NDJSON 审计日志 — 每次工具调用都会追加到
$MCP_RCE_GUARD_HOME/audit.log。100MB 轮换,最多保留 10 个备份。v0.1 提供未签名日志(无进程内验证器);v0.2 将添加 Acra 模式的 HMAC 链,支持密钥派生、安全轮换和集成验证器。 - 与 Pillar 8(mcp-stdio-shellguard)共用的 NFKC + 零宽字符剥除 + Bidi 屏蔽规范化。
安装
npm install -g mcp-rce-guard
或通过 npx 运行:
npx -y mcp-rce-guard serve
工具(MCP,规范 2025-06-18)
| 工具 | 用途 | readOnly | destructive |
|---|---|---|---|
register_subprocess | 使用隔离配置注册子 MCP 服务,并获取句柄、指纹和策略描述符 | 是 | 否 |
audit_subprocess | 验证请求参数是否符合已注册的允许列表(NFKC 规范化后,检查是否有不可见字符) | 是 | 否 |
scan_cve_replay | 针对目标服务命令运行行为谓词 | 是 | 否 |
track_canary | 签发金丝雀令牌,并扫描下游服务是否有泄漏 | 是 | 否 |
inject_egress_policy | 为已注册的子进程生成网络出口允许列表描述符(v0.1 仅生成描述符) | 是 | 否 |
get_audit_log | 按筛选条件读取 NDJSON 审计日志条目 | 是 | 否 |
v0.1 说明: v0.1 中所有六个工具均为
readOnlyHint=true, destructiveHint=false,因为它们只生成策略描述符并向审计日志追加内容,不会修改子进程状态。v0.2 接入原生强制执行后,inject_egress_policy将改为destructiveHint=true。
CLI
mcp-rce-guard serve # start MCP server on stdio
mcp-rce-guard platform # detect isolation backend (landlock/sandbox-exec/unsupported)
mcp-rce-guard scan-cve <cmd> # one-shot CVE replay against a command
mcp-rce-guard audit-log # tail the audit log
mcp-rce-guard policy <profile.json> # synthesize landlock+cgroups+sandbox-exec from JSON
兼容性矩阵
| 平台 | 隔离后端 | 网络出口 | cgroups |
|---|---|---|---|
| Linux >= 5.13 | landlock | nftables hook(带外) | cgroups-v2 |
| Linux < 5.13 | 不支持 | 不支持 | 不支持 |
| macOS 11+ | sandbox-exec (.sb) | sandbox-exec 网络规则 | 不适用 |
| Windows | 不支持(计划支持:AppContainer) | 不适用 | 不适用 |
分层架构(v0.1)
Pillar 1 (mcp-protocol-conformance) — protocol input shape
↓
Pillar 8 (mcp-stdio-shellguard) — argv allowlist + invisible-codepoint detection
↓
Pillar 9 (mcp-rce-guard, this lib) — policy synthesis + CVE-replay scan + canary
↓
Host spawner (caller responsibility) — applies the policy descriptor via real syscalls
在 v0.2 中,底部方框将合并到 Pillar 9(NAPI-RS landlock 绑定、sandbox-exec 执行包装、带清理功能的 cgroups-v2 文件系统写入)中。在此之前,主机必须负责将描述符桥接到平台。
信任等级
| 等级 | mem | pids | egress | 用途 |
|---|---|---|---|---|
LOW | 256MB | 32 | 无 | 来自注册表的不可信 MCP |
MEDIUM | 512MB | 64 | 仅 API | 范围有限的已知供应商 |
HIGH | 1024MB | 128 | 广泛 | 源码经过审查的第一方 MCP |
CRITICAL | 2048MB | 256 | 不受限制 | 与本地 OS 集成、源码由你掌控的 MCP |
审计日志位置
$MCP_RCE_GUARD_HOME/audit.log # default: ~/.mcp-rce-guard/audit.log
每行写入一份 JSON 文档(NDJSON),读取时逐行执行
JSON.parse,因此 args 字符串中的任意字符(制表符、
引号、内嵌转义序列)都能安全地往返保留。日志达到
100MB 时会轮转;最多保留 10 个备份(audit.log.1 .. audit.log.10)。
v0.1 不会对条目签名。此前的 MCP_RCE_GUARD_SIGNING_KEY
HMAC-SHA256 方案在发布前已移除:它没有进程内验证器、
没有密钥长度验证,也没有轮换策略,因此只是在做表面上的安全防护。v0.2 将推出经过验证的 Acra 模式链(KDF(master) → per-entry HMAC、密钥轮换,以及集成的 verify_audit_log 工具)。
说明
- v0.1 生成策略描述符。实际应用 landlock 系统调用由负责启动的助手完成(职责分离:策略合成具有可移植性,系统调用则依赖平台)。计划在 v0.2 中提供原生绑定包装器。
- CVE 测试样例是行为谓词,而非可运行的漏洞利用程序。它们检查的是“目标命令是否符合已知可被利用的特征?”,而不是“能否触发漏洞利用?”
- 金丝雀令牌使用加密安全随机生成的 64 位十六进制主体,并置于
__MCP_CANARY_<hex>__标记中。模式的唯一性在统计意义上成立,但无法通过密码学保证其能抵御控制生成器的对手。
已知问题 v0.1
这些是 v0.1 系列中确实存在但已接受的限制。它们已列入下方的 v0.2 路线图;如果其中任何一项会阻碍你的使用场景,请在未来的 v0.2.x 版本发布后固定使用该版本。
- 审计日志轮换存在 TOCTOU 窗口(
src/audit/log.tsrotateAuditLog)。大小检查和重命名不是原子操作。在 多进程/高并发环境中,两个追加进程可能都会观察到“需要轮换”,并都尝试重命名;失败一方的追加操作会写入 刚创建的空活动日志。解决方法:串行化写入,或每个进程只运行一个写入器。v0.2 将通过proper-lockfile控制轮换。 - 重启后内存状态会丢失(
src/state.ts)。已注册的 子进程和金丝雀链保存在进程内存中。进程重启后,注册表会被清空;操作员必须重新注册。v0.2 计划提供 SQLite 后端存储,作为可选的持久化层。 mcp-protocol-validatorCI 步骤不是硬性门禁 (.github/workflows/ci.yml)。由于上游工具仍在稳定过程中,验证器以continue-on-error: true运行;失败会显示为 CI 注释,但不会阻止流程。v0.2 将在上游稳定后把它提升为 硬性门禁。- v0.1 中的审计日志未签名。参见上文“审计日志位置”。v0.2 将添加经过验证的 Acra 模式签名链。
v0.2 路线图(暂缓,尚无提交日期)
- pnpm 工作区包含
mcp-rce-guard+mcp-rce-demo+mcp-rce-fixtures(市场分发卫生:CVE 夹具单独分发)。 - 为 Linux 提供 NAPI-RS Landlock 绑定(内核 >=5.13)。不通过 C 桥接,无法测试使用 prctl + LANDLOCK_CREATE_RULESET 的普通
child_process.spawn。 - 使用 profile 文件生命周期包装 macOS sandbox-exec execa(deny-network 触发 connection-refused,deny-fs-read 触发 EACCES)。
- cgroups-v2 fs.writeFile,包含权限检查、退出时清理和信号处理程序。
- 集成测试
tests/integration/linux-landlock.test.ts+tests/integration/macos-sandbox-exec.test.ts。 - 参考服务
mcp-rce-demo,包含 6 个可实时演示各项功能的工具(read_isolated_file、attempt_egress_blocked、spawn_subprocess_audited、replay_cve_demo、inject_canary_demo、get_demo_audit)。 - 在 ubuntu-latest GitHub Actions 运行器上进行延迟测试“子进程启动 p95 <200ms”。
- 为全部 3 个 npm 包启用 Sigstore Trusted Publishing OIDC。
- 经过验证的 Acra 模式审计日志链:KDF 主密钥 → 每条记录的 HMAC、带重叠窗口的密钥轮换,以及集成的
verify_audit_log工具。替代 v0.1 中因缺少验证器而在发布前移除的 HMAC-SHA256 原型。
许可证
MIT — 版权所有 (c) 2026 Matthias Meyer(StudioMeyer)
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。