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

Architektur zur Abwehr von Token-Relay-Angriffen auf MCP-Server

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);
});

Schutzmaßnahmen gegen Token-Confusion-Angriffe

Token-Confusion-Angriffe treten auf, wenn ein Server ein kryptografisch gültiges Token akzeptiert, das für eine völlig andere Anwendung, einen fremden Mandanten oder einen anderen API-Endpunkt ausgestellt wurde. Im Kontext des Model Context Protocol (MCP) kann ein kompromittierter oder bösartiger Client ein Bearer-Token eines Drittanbieters vorlegen, um unbefugten Zugriff auf lokale Werkzeuge, Datenbankverbindungen oder Host-Dateisysteme zu erlangen.

Zur vollständigen Behebung müssen Entwickler folgende Richtlinien umsetzen:

  1. Explizite Audience-Bindung: Definieren Sie für jeden MCP-Server einen eindeutigen Ressourcenbezeichner (z. B. https://mcp.company.internal/tools/analysis) und erzwingen Sie diesen im IDP-Validierungs-Hook.
  2. Mandanten- und Issuer-Isolation: Verwerfen Sie alle Tokens, deren iss-Claim nicht exakt mit der vertrauenswürdigen Identitätsquelle Ihres Unternehmens übereinstimmt.
  3. Schlüsselrotations- und Algorithmusbeschränkung: Erlauben Sie ausschließlich moderne asymmetrische Algorithmen (wie RS256, ES256 oder EdDSA) und deaktivieren Sie unsichere HMAC-Fallbacks rigoros.
  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.