
mcp-server-attestation v0.2.0
تعزيز سلسلة التوريد من الطبقة الثانية لخوادم MCP — بيانات الأداة الموقعة بـ Ed25519، إثبات الاستدعاء في وقت التشغيل، منقي الوسائط برفض افتراضي. يدافع ضد تسميم السوق + CVE-2025-69256 + CVE-2025-61591.
جزء من مجموعة أدوات StudioMeyer MCP — بُنِي في مايوركا 🌴 · ⭐ إذا استخدمته
mcp-server-attestation
تقوية سلسلة التوريد من المستوى الثاني لخوادم بروتوكول سياق النموذج (MCP). بيانات أدوات موقعة بـ Ed25519، توثيق وقت التشغيل للـ spawn، مصفف وسائط رفض افتراضي.رد مباشر على:
- تسمم سوق OX Security، أبريل 2026 — 9 من أصل 11 سجلًا لـ MCP قبلوا خوادم ضارة. موقف Anthropic المنشور: "سلوك متوقع".
- CVE-2025-69256 — تنفيذ أوامر عن بعد في Serverless Framework MCP عبر حقن أوامر
child_process.exec(). - CVE-2025-61591 — تنفيذ أوامر عن بعد في Cursor MCP عبر خادم ضار مثبت عبر OAuth مع اختطاف spawn.
توفر هذه الحزمة ما اختارت Anthropic ألا توفره: التحقق المشفر من أي الأدوات يُسمح للخادم بعرضها وأي استدعاءات spawn يُسمح له بفعلها. إنها تبعية جاهزة للاستخدام (drop-in)، وليست بديلًا لوقت التشغيل.
ملاحظة منا
لقد بنينا أدوات وأنظمة لأنفسنا خلال العامين الماضيين. حقيقة أن هذا المستودع صغير وله نجوم قليلة ليست لأنه جديد. بل لأننا قررنا للتو مشاركة ما بنيناه. إنها ليست تجربة جديدة، إنها قصة طويلة مع إيداع حديث.
نحن نحب بناء الأشياء ومشاركتها. لا نحب تكتيكات وسائل التواصل الاجتماعي، أو حيل النمو، أو مطاردة النجوم والمتابعين. لذا هذا المستودع صغير. الكود حقيقي، يُستخدم، والأسئلة تُجاب. احكم بنفسك.
إذا ساعدك، فإن المشاركة والاختبار والتعليقات تساعدنا. إذا كان يمكن أن يكون أفضل، فالتقرير (issue) أكثر فائدة. إذا بنيت شيئًا به، أخبرنا على [email protected]. ذلك يسعد يومنا حقًا.
من استوديو صغير في بالما دي مايوركا.
الحزم (npm workspaces)
| الحزمة | الغرض |
|---|---|
mcp-server-attestation (packages/lib) | المكتبة: التوقيع/التحقق بـ Ed25519، مخطط البيان (manifest schema)، المصفف، مصدق spawn، مخزن الثقة TOFU. |
mcp-attest-cli (packages/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
# 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)
| # | الاسم | 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 لجدول القدرات حسب الأداة.
واجهة الأوامر
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 عند عدم تطابق الدبوس (pin).
توافق مواصفات MCP
| إصدار المواصفات | الحالة |
|---|---|
| 2024-11-05 | قابل للتحليل في البيان، ليس هدف الخادم المرجعي |
| 2025-03-26 | قابل للتحليل في البيان، ليس هدف الخادم المرجعي |
| 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، NUL، CR، LF، VT، FF، NEL، أحرف العرض الصفري، BOM، تجاوزات RTL/LTR، معزولات Trojan-Source، والمتشابكات اللاتينية كاملة العرض. السلوك المسموح يتطلب أنواع القواعد الصريحةregex/enum/prefix/literal. - قواعد
regexآمنة من هجمات ReDoS. نمط قاعدةregexموقع من المؤلف، لكن قيمة الوسيطة يتحكم فيها المهاجم. يكتشف المصفف بشكل ثابت الأنماط المعرضة للتراجع (مثل المعاملات غير المحدودة المتداخلة(a+)+) ويرفض تشغيلها، لذا لا يمكن لوسيطة واحدة مصممة بعناية تجميد مسار spawn الساخن. تحمل قواعدregexأيضًا حدًا أقصى للإدخالmaxLength(الافتراضي 4096). - قواعد
prefixآمنة من الاجتياز. ترفض قواعدprefixمكونات المسار..افتراضيًا (denyTraversal: true، بما في ذلك الشكل المشفر%2e%2e)، لذا يتم حظر/safe/../../etc/passwdحتى لو استوفىprefix: "/safe/". - تحقق ثم توثيق. تقوم
attestSpawnVerifiedبالتحقق من توقيع البيان قبل توثيق spawn في استدعاء واحد آمن — استخدمها بدلاً منattestSpawnStrictإلا إذا قمت بقياس زمن التحقق Ed25519 لكل spawn خارج حلقة ساخنة حقًا. - 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). البناء هو فحص تراجعي: يجب حظر كل حمولة.
التوزيع
- نشر npm عبر GitHub Actions OIDC مع
--provenance. - الخادم المرجعي مُقدم إلى mcp.so ودليل FastMCP.
- المكتبة منشورة بشكل منفصل كـ
mcp-server-attestation.
حول StudioMeyer
StudioMeyer هو استوديو AI وتصميم مقره في بالما دي مايوركا، يعمل مع عملاء حول العالم. نبني مواقع ويب مخصصة وبنية تحتية للذكاء الاصطناعي للشركات الصغيرة والمتوسطة. كومة الإنتاج على Claude Agent SDK و MCP و n8n، مع Sentry و Langfuse و LangGraph للمراقبة وطبقة حماية داخلية.
الترخيص
MIT، حقوق النشر 2026 Matthias Meyer (StudioMeyer). انظر LICENSE.