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
- Öffnen Sie den DevOmniTools JWT & JWS Decoder.
- Fügen Sie das Token ohne den
Bearer-Präfix ein. - Prüfen Sie, ob
audexakt 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);
});- Client fordert Token an
- IDP signiert JWT mit aud
- MCP Server prüft Signatur und aud
- Autorisierte Tool-Ausführung
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.
