Alle Anleitungen

DEVOMNITOOLS / Anleitungen für Entwickler

MCP Bearer-Auth Schwachstelle beheben (CVE-2026-111771)

Diagnostizieren und beheben Sie CVE-2026-111771 im Model Context Protocol (MCP) TypeScript SDK. Prüfen Sie Audience-Claims lokal im Browser.

DevOmniTools Research Veröffentlicht: Aktualisiert: 2 Min. Lesezeit

Das Wichtigste

  • CVE-2026-111771 ermöglichte es MCP-Servern, Bearer-Tokens anderer Dienste aufgrund fehlender Audience-Prüfung (aud) zu akzeptieren.
  • RFC 7519 aud- und iss-Claims müssen serverseitig strikt validiert werden.
  • Prüfen Sie JWT-Header und Claims in einer lokalen Browser-Sandbox vor der Freigabe externer Agent-Verbindungen.

Zusammenfassung und Gefahrenanalyse

Am 20. Oktober 2026 wurde in der GitHub Advisory Database die Schwachstelle CVE-2026-111771 (GHSA-rvq5-wwqv-78pq) für das offizielle Model Context Protocol (@modelcontextprotocol/sdk) veröffentlicht. Bei HTTP-Transporten (wie Server-Sent Events) akzeptierte die Authentifizierung gültige Tokens, die für andere Dienste ausgestellt worden waren.

Ursache: Fehlende Audience-Validierung (RFC 7519)

Gemäß RFC 7519 (JSON Web Token) bestimmt der aud-Claim die Zielressource. Betroffene Versionen des SDKs prüften Signaturen und Gültigkeitsdauer, unterließen jedoch die strikte Auswertung des aud-Wertes.

Lokale Token-Prüfung im Browser

  1. Öffnen Sie den DevOmniTools JWT & JWS Decoder.
  2. Fügen Sie das Token ohne den Bearer-Präfix ein.
  3. Prüfen Sie, ob aud exakt der URI Ihres MCP-Servers entspricht.

Der Decoder läuft zu 100% lokal im Browser.

Codebeispiel: Sichere Konfiguration

// ✅ SICHER: Strikte Prüfung von Audience und Issuer
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: "Fehlender Bearer-Header" });
  }

  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 abgelehnt: Ungültige Audience" });
  }

  const transport = new SSEServerTransport("/messages", res);
  server.connect(transport);
});
  1. Client fordert Token an
  2. IDP signiert JWT mit aud
  3. MCP Server prüft Signatur und aud
  4. Autorisierte Tool-Ausführung
MCP Token Validierungsablauf.

FAQ

Was ist die Ursache von CVE-2026-111771 in MCP-Servern?

Der HTTP-Transport im MCP TypeScript SDK prüfte Signaturen, validierte jedoch nicht strikt, ob der aud-Claim mit der Server-URI übereinstimmte.

Wie können Entwickler Audience-Claims sicher überprüfen?

Über den DevOmniTools JWT-Decoder können Tokens lokal im Browser geprüft werden, ohne Geheimnisse ins Netzwerk zu übertragen.

Sind stdio-basierte MCP-Server betroffen?

Nein. Lokale stdio-Server kommunizieren über Standard-E/A-Pipes und nutzen keine HTTP-Bearer-Authentifizierung.