studiomeyer-io/mcp-server-attestation
GitHub: studiomeyer-io/mcp-server-attestation
为 MCP 服务器提供 Ed25519 签名的工具清单验证、运行时子进程启动证明和默认拒绝参数清理,抵御供应链投毒与命令注入攻击的轻量级安全加固库。
Stars: 0 | Forks: 0
# mcp-server-attestation
针对模型上下文协议(Model Context Protocol)服务器的二层供应链强化。支持 Ed25519 签名的工具清单、运行时启动证明以及默认拒绝的参数清理器。
这是对以下事件的直接回应:
- **OX Security 市场投毒事件,2026 年 4 月** — 11 个 MCP 注册中心中有 9 个接受了恶意服务器。Anthropic 的公开立场是:“预期行为”。
- **CVE-2025-69256** — Serverless Framework MCP 通过 `child_process.exec()` 进行命令注入实现 RCE。
- **CVE-2025-61591** — Cursor MCP 通过带有启动劫持的 OAuth 安装恶意服务器实现 RCE。
本软件包提供了 Anthropic 选择不提供的功能:对服务器允许暴露哪些工具以及允许进行哪些 spawn 调用进行密码学验证。它是一个直接插入的依赖项,而不是运行时的替代品。
## 软件包(npm workspaces)
| 软件包 | 用途 |
| --- | --- |
| `mcp-server-attestation` (`packages/lib`) | 库:Ed25519 签名/验证、manifest schema、清理器、spawn 证明器、TOFU 信任存储。 |
| `mcp-attest-cli` (`packages/cli`) | CLI `mcp-attest`:`keygen`、`sign`、`verify`、`inspect`、`fingerprint`、`check-pin`。 |
| `mcp-attest-demo` (`packages/demo-server`) | 参考 MCP 服务器 (stdio, 规范 2025-06-18),公开了 5 个用于演示该库的工具。 |
## 安装
```
npm install mcp-server-attestation
# CLI:
npm install -g mcp-attest-cli
# 参考 MCP 服务器:
npx mcp-attest-demo
```
Node 20+。没有外部加密依赖 —— 使用 `node:crypto` Ed25519 原语。
## 五行服务器快速入门
```
import { verifyManifestStrict, attestSpawnStrict, type SignedManifest } from "mcp-server-attestation";
import signed from "./signed/manifest.json" assert { type: "json" };
// 1. At startup: prove the manifest you ship is the manifest you signed.
verifyManifestStrict(signed);
// 2. Before every child_process.spawn:
attestSpawnStrict(signed as SignedManifest, { command, args });
```
这就是全部的集成内容。两个函数调用,无 SaaS,无 daemon。
## 工具(参考服务器 `mcp-attest-demo`)
| # | 名称 | readOnlyHint | destructiveHint |
| - | ---- | ------------ | --------------- |
| 1 | `attest_verify_manifest` | true | false |
| 2 | `attest_inspect_spawn` | true | false |
| 3 | `attest_generate_manifest_template` | true | false |
| 4 | `attest_sign_manifest` | false | false |
| 5 | `attest_keygen` | false | false |
其注解是准确的:`attest_sign_manifest` 和 `attest_keygen` 会写入磁盘上的文件,因此它们不是只读的,但它们不会破坏现有数据,因此 destructiveHint 保持为 false。有关各工具的能力表,请参阅 `docs/THREAT-MODEL.md`。
## CLI
```
mcp-attest keygen --out-dir ./keys --name prod
mcp-attest sign --manifest manifest.json --private-key keys/prod.key --out signed.json
mcp-attest verify --signed signed.json --pin # TOFU pin
mcp-attest verify --signed signed.json --sigstore # opt-in Rekor cross-ref
mcp-attest inspect --signed signed.json --command /usr/bin/echo --arg "hello"
mcp-attest fingerprint --public-key keys/prod.pub
mcp-attest check-pin --server my-server --signed signed.json
```
`verify` 在签名错误时以代码 2 退出,在 pin 不匹配时以代码 3 退出。
## MCP 规范兼容性
| 规范版本 | 状态 |
| --- | --- |
| 2024-11-05 | 可在 manifest 中解析,非参考服务器的目标版本 |
| 2025-03-26 | 可在 manifest 中解析,非参考服务器的目标版本 |
| 2025-06-18 | 完全支持的目标版本 |
本库是传输无关的。参考服务器仅支持 stdio。
## 安全模型
- **首次使用信任(Trust-on-First-Use)** 是默认设置。首次验证服务器时,其公钥会被绑定到 `~/.mcp-attest/trust.json`(可通过 `MCP_ATTEST_TRUST_FILE` 覆盖)。后续的验证将拒绝同一服务器名称的任何新密钥,并抛出 `TRUST_PIN_MISMATCH`。这可以捕获类似 Cursor 风格的恶意更新向量。
- **没有捆绑的受信任密钥列表。** 本软件包不充当守门人的角色。如果您需要更强的保证,可以选择加入 `--sigstore`,将公钥指纹与 Sigstore Rekor 透明日志进行交叉比对。
- **默认拒绝的参数清理器。** `shellSafeString` 会阻止所有 ASCII shell 元字符、NUL、CR、LF、零宽度字符、BOM、RTL/LTR 覆盖以及 Trojan-Source 隔离字符。允许列表行为需要显式的 `regex` / `enum` / `prefix` / `literal` 规则类型。
- **规范 JSON(Canonical JSON)** 是被签名的数据表面。重新序列化无法更改已签名的字节。
本软件包不执行的操作(超出范围):
- 沙箱化或容器化服务器进程。
- OAuth 流程强化(单独的 `mcp-oauth-shield` 构建)。
- 网络出口控制。
- 自动修补现有服务器。
## 测试
```
npm install
npm run typecheck
npm test
```
测试语料库包含 CVE 重放夹具(`packages/lib/tests/fixtures/cve-2025-69256-payloads.json`、`cve-2025-61591-payloads.json`)。构建过程是一次回归检查:每个 payload 都必须被阻止。
## 分发
- 通过 GitHub Actions OIDC 使用 `--provenance` 发布到 npm。
- 参考服务器已提交至 mcp.so 和 FastMCP Directory。
- 库作为 `mcp-server-attestation` 单独发布。
## 许可证
MIT,版权所有 2026 Matthias Meyer (StudioMeyer)。请参阅 `LICENSE`。
标签:CVE-2025-61591, CVE-2025-69256, Ed25519, GNU通用公共许可证, JSONLines, MCP, MITM代理, Node.js, NPM包, OSV-Scalibr, RCE防护, TypeScript, 代码签名, 参数过滤, 命令注入防护, 哈希校验, 大模型安全, 子进程安全, 安全插件, 密钥验证, 市场投毒防护, 搜索语句(dork), 暗色界面, 模型上下文协议, 端点防护, 网络安全, 自动化攻击, 隐私保护, 零信任, 默认拒绝