Gepubliceerd:
Tien beveiligingsadviezen voor de officiële MCP-SDK's: welke update u nu nodig hebt (en welke niets doet zonder configuratie)
Kort: tussen 28 september en 5 oktober 2026 publiceerde het MCP-project tien beveiligingsadviezen voor de officiële SDK's: zes voor Python (mcp) en vier voor TypeScript. De ernstigste (CVSS 7,5): een kwaadaardige MCP-server kon de OAuth-geheimen van een client naar zichzelf laten sturen. Veilig zijn Python 1.30.0/2.2.0 en TypeScript 1.32.0/2.3.0 of hoger — maar twee fixes moet u daarna nog zelf aanzetten.
De SDK's van het Model Context Protocol zijn de bibliotheken waarop een groot deel van de MCP-servers en -clients is gebouwd, inclusief maatwerk binnen organisaties. Een fout in de SDK zit dus niet in één product, maar in alles wat erop draait. Opvallend aan deze reeks: de fixes waren grotendeels al uitgebracht vóór de adviezen verschenen. Python 1.30.0 en 2.2.0 staan sinds 7 september op PyPI; de TypeScript-fixes kwamen op 28 september en 2 oktober. Wie sindsdien niet heeft bijgewerkt, draait dus bekende kwetsbaarheden.
Welke kwetsbaarheden zijn er gevonden?
De tien adviezen vallen in vier groepen.
- OAuth-geheimen naar de verkeerde partij (Python GHSA-qx49-fqc8-xw99, TypeScript CVE-2026-104850; beide CVSS 7,5). De client controleerde niet altijd of de autorisatieserver die een MCP-server opgaf, ook de server was waar de inloggegevens bij hoorden. Een kwaadaardige of gecompromitteerde MCP-server kon zo
client_secret, autorisatiecodes, PKCE-verifiers en in TypeScript ook opgeslagen refresh-tokens ontvangen. Beveiligingsbedrijf Cycode, dat de Python-variant beschreef, laat zien dat het slachtoffer daarbij gewoon de echte inlogpagina van de eigen provider ziet. Getroffen: Python 1.9.1 t/m 1.29.1 en 2.0.0 t/m 2.1.1; TypeScript@modelcontextprotocol/sdk1.12.0 t/m 1.30.1. - Tokens voor een andere dienst geaccepteerd (beide SDK's, CVSS 6,8). De bearer-authenticatie aan serverkant kon niet controleren of een token voor díe server was uitgegeven. Gebruikt uw identity provider één autorisatieserver voor meerdere diensten, dan accepteerde uw MCP-server ook tokens voor een andere applicatie.
- Gegevens lekken via doorverwijzingen (beide SDK's, CVSS 5,9 en 6,5). HTTP-clients volgden redirects naar elk willekeurig domein en stuurden eigen headers mee, zoals een
X-API-Key, en bij 307/308-redirects ook de request-body. - Beschikbaarheid en isolatie. In Python ruimde een Streamable HTTP-server in de standaard stateful modus sessies nooit op (CVE-2026-59951, CVSS 7,5), en lazen HTTP-endpoints request-bodies zonder groottelimiet in (CVSS 7,5) — beide middelen om een server zonder inloggegevens plat te leggen. Een Python-client haalde bovendien URL's of lokale bestanden op die een server in een output-schema opgaf (CVSS 6,5). In TypeScript konden clients die één
InMemoryTaskStoredeelden elkaars experimentele taken inzien en annuleren (CVSS 8,6); die functie is in de specificatie van 28 juli al vervangen.
Waarom is updaten bij sommige fixes niet genoeg?
Dit is het punt dat in de berichtgeving het snelst verdwijnt. De adviezen zeggen het letterlijk: "Upgrading alone changes nothing." Bij de audience-controle staat de nieuwe beveiliging standaard uit. In Python zet u validate_token_resource=True in AuthSettings en geeft u de audience terug uit verify_token(); in TypeScript geeft u expectedResource mee aan requireBearerAuth(). Hetzelfde geldt in Python voor machine-to-machine-clients (ClientCredentialsOAuthProvider en PrivateKeyJWTOAuthProvider): zonder de nieuwe parameter issuer= volgen ze nog steeds de autorisatieserver die de MCP-server aanwijst. Op 1.30.0 geeft dat alleen een DeprecationWarning, die Python standaard verbergt. In versie 3.0 worden beide controles verplicht.
Daarnaast adviseert het project na de update opgeslagen OAuth-clientregistraties één keer te wissen, zodat ze opnieuw aan de juiste autorisatieserver worden gekoppeld. En heeft een client mogelijk met een onbetrouwbare server verbonden: roteer het client-secret en trek tokens in.
Ons advies
(1) Inventariseer waar de MCP-SDK's in uw organisatie draaien: eigen servers, interne agents, maar ook tools van leveranciers die de SDK bundelen — vraag daar naar de gebruikte versie. (2) Werk bij naar Python mcp ≥ 1.30.0 of ≥ 2.2.0 en TypeScript @modelcontextprotocol/sdk ≥ 1.32.0 of de 2.x-pakketten ≥ 2.3.0. (3) Zet daarna de twee opt-in-controles aan: audience-validatie op uw HTTP-servers en issuer= bij machine-to-machine-clients. Neem dat op in uw deployment-checklist, niet alleen in deze patchronde. (4) Laat agents met OAuth-rechten alleen verbinden met MCP-servers die u vertrouwt; deze reeks laat zien dat een kwaadaardige server meer kan dan alleen verkeerde antwoorden geven. Meer in veiligheid & watchouts en, als u zelf bouwt, MCP-server bouwen.
Wat zegt dit over de volwassenheid van MCP?
Onze duiding: tien adviezen in acht dagen klinkt alarmerend, maar het patroon is eerder geruststellend dan zorgwekkend. De fouten zijn gemeld door externe onderzoekers, gecoördineerd opgelost, in beide SDK's tegelijk gedicht en gedocumenteerd met een heldere "ben ik geraakt?"-sectie per advies. Zo hoort een volwassen open-sourceproject te werken. De keerzijde is dat een groot deel van de fixes opt-in is. Dat beschermt bestaande installaties tegen breuk, maar legt de verantwoordelijkheid bij de beheerder. Wie MCP zakelijk inzet, moet SDK-updates daarom behandelen als elk ander beveiligingsonderhoud: met eigenaarschap, een vaste cadans en een controle dat de beveiliging ook echt aanstaat. Eerder schreven we over de aanscherping van autorisatie in de specificatie van juli; deze adviezen zijn daar in de praktijk het vervolg op.
Bronnen
- GHSA-qx49-fqc8-xw99 — OAuth client could send credentials to an authorization server chosen by the MCP server (Python SDK, 28 september 2026)
- GHSA-84m7-p3x7-pcfv / CVE-2026-59951 — Streamable HTTP sessions never reclaimed (Python SDK, 30 september 2026)
- GHSA-fmmv-w9g8-j3gc — request bodies read with no size limit (Python SDK)
- GHSA-rwrf-2pqf-9j8j — server-chosen $ref URLs fetched during validation (Python SDK)
- GHSA-5h93-6whr-6q8j — cross-origin redirects (Python SDK, 2 oktober 2026)
- GHSA-w4fh-qvv9-3v23 — tokens for a different resource server accepted (Python SDK, 5 oktober 2026)
- GHSA-6qxp-vccf-f47h / CVE-2026-104850 — OAuth credentials to MCP-chosen authorization server (TypeScript SDK, 30 september 2026)
- GHSA-rvq5-wwqv-78pq — bearer auth accepted tokens for another service (TypeScript SDK)
- GHSA-6prh-2h8m-c8cw — cross-origin redirects (TypeScript SDK)
- GHSA-22jm-h49p-29qw — experimental tasks not tied to session (TypeScript SDK)
- mcp op PyPI — releasegeschiedenis (1.30.0 en 2.2.0: 7 september 2026)
- MCP Python SDK OAuth account takeover — Cycode (28 september 2026)
- MCP security digest oktober 2026 — Adversa AI (8 oktober 2026)
Veelgestelde vragen
Naar welke versie van de MCP-SDK moet ik updaten?
Python: mcp 1.30.0 (1.x) of 2.2.0 (2.x) of hoger; de nieuwste is 2.3.0. TypeScript: @modelcontextprotocol/sdk 1.32.0 of hoger, of voor de 2.x-pakketten @modelcontextprotocol/client en @modelcontextprotocol/server 2.3.0 of hoger. Daarmee zijn alle tien de adviezen gedekt.
Ben ik geraakt als ik alleen een MCP-server bouw?
Deels. De OAuth-, redirect- en $ref-fouten zitten aan de clientkant. Servers die over HTTP draaien zijn wel geraakt door de sessie- en geheugenproblemen (Python) en door het ontbreken van een audience-controle op bearer-tokens (beide SDK's). Servers die alleen via stdio lokaal draaien, vallen buiten alle tien adviezen.
Waarom is updaten soms niet genoeg?
Bij twee fixes staat de nieuwe beveiliging standaard uit om bestaande installaties niet te breken: de controle op de audience van tokens aan serverkant, en in Python het vastleggen van de juiste autorisatieserver via issuer= bij machine-to-machine-clients. Die moet u zelf aanzetten; in versie 3.0 worden ze volgens de adviezen de standaard.
Laatst bijgewerkt: