جميع الأدلة

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

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

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

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

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

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

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

في 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.

FAQ

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

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

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

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

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

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