返回更新列表
新发布Aug 20, 2026

mcp-server-attestation v0.2.0

面向MCP服务器的第二层供应链加固 — Ed25519签名的工具清单、运行时进程派生证明、默认拒绝的参数清理器。防御市场投毒攻击 + CVE-2025-69256 + CVE-2025-61591。

分享

StudioMeyer MCP Stack 的一部分 — 在 Mallorca 构建 🌴 · 如果使用请 ⭐

mcp-server-attestation

npm version npm downloads License Last commit GitHub stars

Layer-2 供应链加固,用于 Model Context Protocol 服务器。Ed25519 签名的工具清单、运行时 spawn 认证、默认拒绝参数清理器。

直接回应:

  • OX Security 市场投毒,2026 年 4 月 — 11 个 MCP 注册中心中有 9 个接受了恶意服务器。Anthropic 的公开立场:“预期行为”。
  • CVE-2025-69256 — 通过 child_process.exec() 命令注入的 Serverless Framework MCP 远程代码执行。
  • CVE-2025-61591 — 通过 OAuth 安装的恶意服务器进行 spawn 劫持的 Cursor MCP 远程代码执行。

此包提供了 Anthropic 选择不提供的内容:对服务器允许暴露哪些工具以及允许进行哪些 spawn 调用的密码学验证。它是一个即插即用的依赖,而不是运行时的替代品。

来自我们的说明

在过去两年里,我们一直在为自己构建工具和系统。这个仓库很小且星标很少,并不是因为它很新。而是因为我们才刚刚决定分享我们构建的东西。这不是一个全新的实验,这是一个有着最近提交的长久故事。

我们喜欢构建和分享东西。我们不喜欢社交媒体策略、增长黑客或追逐星标和关注者。所以这个仓库很小。代码是真实的,正在被使用,问题会得到回复。请自行判断。

如果对你有帮助,分享、测试和反馈对我们有帮助。如果可以更好,提一个 issue 更有用。如果你用它构建了什么东西,请告诉 [email protected]。这真的会让我们开心。

来自马略卡岛帕尔马的一个小工作室。

包(npm workspaces)

Package用途
mcp-server-attestation (packages/lib)库:Ed25519 签名/验证、清单模式、清理器、spawn 认证、TOFU 信任存储。
mcp-attest-cli (packages/cli)CLI mcp-attestkeygensignverifyinspectfingerprintcheck-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
# Reference MCP server:
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,无需守护进程。

如果你更愿意在每次 spawn 时重新验证签名(防御深度,防止未经验证或已交换的清单到达网关),请改用单个故障安全调用——它先验证再认证:

import { attestSpawnVerified, type SignedManifest } from "mcp-server-attestation";
attestSpawnVerified(signed as SignedManifest, { command, args });

工具(参考服务器 mcp-attest-demo

#名称只读提示破坏性提示
1attest_verify_manifesttruefalse
2attest_inspect_spawntruefalse
3attest_generate_manifest_templatetruefalse
4attest_sign_manifestfalsefalse
5attest_keygenfalsefalse

注释是诚实的:attest_sign_manifestattest_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,在引脚不匹配时退出代码 3。

MCP 规范兼容性

规范版本状态
2024-11-05可在清单中解析,不是参考服务器的目标
2025-03-26可在清单中解析,不是参考服务器的目标
2025-06-18完全目标

该库与传输无关。参考服务器仅支持 stdio。

安全模型

  • 首次使用即信任是默认行为。第一次验证服务器时,其公钥会被固定到 ~/.mcp-attest/trust.json(可通过 MCP_ATTEST_TRUST_FILE 覆盖)。后续验证将拒绝同一服务器名称的任何新密钥,错误为 TRUST_PIN_MISMATCH。这可以捕捉 Cursor 风格的恶意更新向量。
  • 没有捆绑的受信任密钥列表。 此包不充当看门人。如果你想要更强的保证,可以选择 --sigstore 将公钥指纹与 Sigstore Rekor 透明度日志进行交叉引用。
  • 默认拒绝参数清理器。 shellSafeString 会阻止每个 ASCII shell 元字符、NUL、CR、LF、VT、FF、NEL、零宽度字符、BOM、RTL/LTR 覆盖符、Trojan-Source 隔离符和全角拉丁语易混淆字符。白名单行为需要显式的 regex / enum / prefix / literal 规则类型。
  • ReDoS 安全的 regex 规则。 一个 regex 规则的模式由作者签名,但参数值由攻击者控制。清理器会静态检测容易导致回溯的模式(如嵌套的无界量词 (a+)+)并拒绝运行它们,因此单个精心构造的参数不会冻结 spawn 热路径。regex 规则还带有一个输入长度上限(默认 4096)。
  • 遍历安全的 prefix 规则。 prefix 规则默认拒绝 .. 路径组件(denyTraversal: true,包括 %2e%2e 编码形式),因此即使满足 prefix: "/safe/"/safe/../../etc/passwd 也会被阻止。
  • 先验证再认证。 attestSpawnVerified 在认证 spawn 之前检查清单签名,使用一个故障安全调用——除非你已测量过每个 spawn 的 Ed25519 验证在真正的热循环之外,否则请使用它而不是 attestSpawnStrict
  • 规范 JSON 是签名的表面。重新序列化不能改变已签名的字节。

此包不做什么(不在范围内):

  • 不对服务器进程进行沙箱或容器化。
  • OAuth 流程加固(单独的 mcp-oauth-shield 构建)。
  • 网络出口控制。
  • 自动修补现有服务器。

测试

npm install
npm run typecheck
npm test

测试语料包括 CVE 重放固定数据(packages/lib/tests/fixtures/cve-2025-69256-payloads.jsoncve-2025-61591-payloads.json)。构建是一个回归检查:每个有效负载都必须被阻止。

分发

  • 通过 GitHub Actions OIDC 进行 npm 发布,并带有 --provenance
  • 参考服务器已提交到 mcp.so 和 FastMCP 目录。
  • 库以 mcp-server-attestation 单独发布。

关于 StudioMeyer

StudioMeyer 是一家位于马略卡岛帕尔马的人工智能与设计工作室,与全球客户合作。我们为中小企业构建定制网站和 AI 基础设施。生产栈使用 Claude Agent SDK、MCP 和 n8n,并结合 Sentry、Langfuse 和 LangGraph 进行可观测性,以及内部防护层。

许可证

MIT,版权 2026 Matthias Meyer (StudioMeyer)。参见 LICENSE

分类