جميع الأدلة

DEVOMNITOOLS / أدلة المطورين

إصلاح ثغرة مصادقة Bearer في بروتوكول MCP (CVE-2026-111771)

تشخيص ومعالجة ثغرة CVE-2026-111771 في مكتبة TypeScript لبروتوكول MCP. فحص مطالبات الجمهور محلياً داخل المتصفح.

DevOmniTools Research نُشر: حُدّث: 6 دقائق للقراءة

النقاط الأساسية

  • سمحت ثغرة CVE-2026-111771 لخوادم MCP بقبول توكنات صادرة لخدمات أخرى بسبب غياب التحقق من حقل الجمهور (aud).
  • يجب التحقق الصارم من مطالبات aud و iss وفقاً للمواصفة القياسية RFC 7519 في الخادم.
  • افحص ترويسات ومطالبات JWT داخل بيئة المتصفح المعزولة محلياً قبل ربط أدوات الذكاء الاصطناعي.

ملخص تنفيذي وتقييم المخاطر

مخطط معمارية التصدي لهجمات ترحيل الرموز عبر خوادم MCP

في 20 أكتوبر 2026، أصدرت قاعدة بيانات الأمان في GitHub الثغرة CVE-2026-111771 (GHSA-rvq5-wwqv-78pq) في حزمة TypeScript الرسمية لبروتوكول Model Context Protocol (@modelcontextprotocol/sdk). عند تشغيل خوادم MCP عبر وسائط HTTP البعيدة (مثل Server-Sent Events)، قبلت خوادم التحقق توكنات صالحة صدرت لخدمات أخرى داخل نفس بيئة المصادقة.

سبب الثغرة: غياب التحقق من الجمهور (RFC 7519)

وفقاً للمواصفة القياسية RFC 7519، يحدد حقل aud (الجمهور) الوجهة المستهدفة للتوكن. في الإصدارات المتأثرة، تم فحص التوقيع الرقمي مع إغفال التحقق الصارم من حقل aud.

فحص التوكنات محلياً في المتصفح

  1. افتح أداة قراءة وفحص JWT من DevOmniTools.
  2. الصق التوكن بدون بادئة Bearer.
  3. تأكد من أن قيمة aud تطابق تماماً مسار خادم MCP الخاص بك.

تعمل الأداة محلياً 100% داخل المتصفح.

نموذج الكود البرمجي الآمن

// ✅ تكوين آمن: تحقق صارم من حقل الجمهور والمُصدر
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { SSEServerTransport } from "@modelcontextprotocol/sdk/server/sse.js";
import jwt from "jsonwebtoken";

const MCP_RESOURCE_AUDIENCE = "https://mcp.company.internal/api/v1";
const TRUSTED_ISSUER = "https://auth.company.internal/";

app.get("/sse", (req, res) => {
  const authHeader = req.headers.authorization;
  if (!authHeader?.startsWith("Bearer ")) {
    return res.status(401).json({ error: "Missing or malformed bearer token" });
  }

  const token = authHeader.substring(7);

  try {
    const decoded = jwt.verify(token, process.env.IDP_PUBLIC_KEY!, {
      audience: MCP_RESOURCE_AUDIENCE,
      issuer: TRUSTED_ISSUER,
      algorithms: ["RS256", "ES256"],
    });

    req.user = decoded;
  } catch (err) {
    return res.status(403).json({ error: "Token rejected due to invalid audience" });
  }

  const transport = new SSEServerTransport("/messages", res);
  server.connect(transport);
});
  1. طلب التوكن من العميل
  2. إصدار JWT مع حقل aud محدد
  3. الخادم يتحقق من التوقيع وحقل aud
  4. تنفيذ أدوات MCP بأمان
سير عمل المصادقة الصارمة لبروتوكول MCP.

التفاصيل الهندسية لتصحيح ثغرة التوثيق في خوادم MCP

أظهرت المراجعات الأمنية لبروتوكول سياق النماذج (Model Context Protocol) وجود ثغرة تصنيفية في كيفية معالجة ترويسات Authorization: Bearer:

  • جذر المشكلة التقنية: كانت بعض تطبيقات الوكلاء الوسيطة تعتمد على تجريد مصفوفات النصوص بدون التحقق من صحة الفراغات، مما أتاح تجاوز فحوصات الأمان عبر إرسال ترويسات متعددة القيم.
  • مسار الإصلاح الموصى به: استخدم دوال تحقق صارمة تعتمد على مطابقة التعبيرات القياسية الصريحة والتأكد من مطابقة حمولة التوكن لمفاتيح التشفير الموثوقة قبل تمرير سياق التعليمات للنماذج الذكية.
  • حماية قنوات الاتصال المحلية: احرص دائماً على تقييد منافذ استماع خوادم MCP على عنوان الاسترجاع المحلي 127.0.0.1 وتفعيل التشفير المتبادل لضمان عدم تعرض العمليات لأي تجسس شبكي.

تحليل متعمق لمتجهات الهجوم: هجمات تتابع التوكنات (Token Relay Attacks)

في البنى التحتية الموزعة الحديثة التي تدمج نماذج الذكاء الاصطناعي التوليدية مع بروتوكول سياق النماذج (Model Context Protocol)، يؤدي إهمال التحقق من حقل aud (الجمهور المستهدف) إلى فتح ثغرات بالغة الخطورة تُعرف باسم هجمات تتابع التوكنات.

عندما يمنح المستخدم تفويضاً لخدمة معينة (مثل خدمة تحويل الملفات أو استعراض البيانات) عبر توكن Bearer JWT صالح، يفترض المستخدم أن هذا التوكن لن يُستخدم إلا داخل تلك الخدمة فقط. ولكن في حال استطاع خادم خبيث أو جهة وسيطة اعتراض هذا التوكن، ثم قامت بإعادة توجيهه إلى خادم MCP يدير أدوات حساسة في بيئة العمل (مثل قراءة قواعد البيانات، أو إدارة مفاتيح API، أو تنفيذ أوامر النظام)، فإن خادم MCP المتأثر بثغرة CVE-2026-111771 كان يقبل التوكن فوراً بمجرد التأكد من صحة التوقيع الرقمي للمُصدر (iss)، دون فحص ما إذا كان التوكن مخصصاً له بالفعل.

لماذا يعتبر فحص التوقيع الرقمي وحده غير كافٍ؟

يعتقد بعض مهندسي البرمجيات خطأً أن نجاح التحقق من التوقيع الرقمي عبر المفتاح العام للمُصدر (Public Key Verification) يعني بالضرورة أن الطلب شرعي وآمن. الحقيقة التقنية تكمن في أن التوقيع يثبت فقط أن التوكن لم يتم التلاعب بمحتواه منذ لحظة إصداره من قبل خادم الهوية المعتمد (Identity Provider). ومع ذلك، فإن التوقيع الرقمي لا يحدد صلاحية التوكن لسياق الاستخدام الحالي. إذا كان التوكن صادراً في الأصل لاستخدامه في لوحة التحكم الإدارية، فإن تمريره إلى خادم MCP مخصص لأدوات المطورين يجب أن يُرفض رفضاً قاطعاً ما لم يحتوي صراحة على معرف الجمهور الخاص بخادم MCP.

معايير التحقق الصارم وفقاً للمواصفة القياسية RFC 7519

لتأمين خوادم MCP ضد كافة أشكال التلاعب بالهويات والتوكنات، يجب تطبيق سياسات التدقيق التالية:

  1. التحقق الصارم من حقل الجمهور (Audience Validation): يجب ألا يقبل الخادم التوكن إلا إذا كانت مصفوفة aud تحتوي تماماً على المعرف الفريد للنطاق أو المورد (Uniform Resource Identifier) الخاص بالخدمة المستهدفة.
  2. التحقق من وقت الصلاحية وسماحية التوقيت (Expiry & Clock Skew): يجب التأكد من عدم تجاوز تاريخ الانتهاء الموضح في حقل exp، مع وضع حد أقصى لسماحية اختلاف التوقيت بين الخوادم لا يتجاوز 60 ثانية.
  3. فحص حقل المُصدر الموثوق (Issuer Matching): يجب رفض أي توكن يصدر عن نطاقات فرعية غير مصرح بها أو مزودي هوية مجهولين عبر فحص مطابقة حقل iss تماماً.
  4. حظر خوارزميات التوقيع الضعيفة (Algorithm Restriction): يجب تقييد خوارزميات التشفير المسموحة بالخوارزميات غير المتناظرة القوية مثل RS256 أو ES256 أو Ed25519، مع حظر الخوارزمية غير الآمنة none وحظر استخدام المفاتيح المتناظرة HS256 ما لم تكن المفاتيح مشتركة ومعزولة بأمان تام.

مقارنة معمارية: خوادم MCP عبر Stdio مقابل وسائط النقل الشبكي (SSE / HTTP)

معيار المقارنةخوادم النقل المباشر (Stdio Transport)خوادم النقل الشبكي (SSE / HTTP Transport)
طبيعة الاتصالأنابيب الإدخال والإخراج المباشرة داخل نظام التشغيلطلبات HTTP مع قنوات بث الأحداث المتزامنة (Server-Sent Events)
نطاق التعرض الأمنيمعزول بالكامل داخل الجهاز المحلي (Air-Gapped Local Process)مفتوح للشبكة المحلية أو الإنترنت ويتطلب جدار حماية
متطلبات التوثيقلا يتطلب توكنات شبكية ويعتمد على صلاحيات المستخدم في النظاميتطلب توكنات Bearer JWT مشفرة وتحققاً صارماً من الهوية
التأثر بثغرة CVE-2026-111771غير متأثر تماماً نظراً لعدم وجود وسائط مصادقة HTTPمتأثر بشدة ويتطلب ترقية حزمة SDK وإضافة فحص الجمهور فوراً

أفضل الممارسات لعزل التوكنات وتدقيقها محلياً

  • عدم إرسال التوكنات إلى خوادم خارجية للفحص: استخدم دوال فك التشفير المحلية المعتمدة على WebCrypto داخل المتصفح لفحص مطالبات التوكن بدون أي تسريب للبيانات.
  • تفعيل سجلات التدقيق الآمنة (Audit Logging): سجل كافة محاولات الوصول المرفوضة الناتجة عن عدم تطابق الجمهور مع حفظ بصمة التوكن المشفرة دون حفظ التوكن الخام.
  • استخدام توكنات قصيرة الأجل (Short-Lived Access Tokens): اضبط مدة صلاحية توكنات الوصول إلى ما بين 5 إلى 15 دقيقة فقط، واعتمد على آليات التجديد المشروطة للحد من نافذة استغلال أي تسريب محتمل.

FAQ

ما هو السبب الجذري لثغرة CVE-2026-111771؟

كانت وسائط مصادقة HTTP تتحقق من التوقيع الرقمي دون التأكد من أن حقل الجمهور aud يطابق مسار خادم MCP المستهدف تحديداً.

كيف يتأكد المطورون من صحة الجمهور في التوكن؟

يمكن فك تشفير وفحص حقول التوكن محلياً داخل المتصفح عبر أداة فك تشفير JWT في DevOmniTools دون إرسال البيانات عبر الشبكة.

هل تتأثر خوادم MCP التي تعمل عبر stdio؟

لا. خوادم stdio المحلية تتصل عبر أنابيب الإدخال والإخراج المباشرة ولا تستخدم وسائط مصادقة HTTP.