In der Nacht zum 25. Oktober hat das MCP-Projekt die Version 2.1.0 seiner Referenzserver veröffentlicht und dazu acht Sicherheitshinweise. Betroffen sind drei Pakete: @modelcontextprotocol/server-filesystem und @modelcontextprotocol/server-everything steigen auf 2.0.1, mcp-server-fetch auf 2026.10.24. Die vier übrigen Server der Sammlung bleiben unverändert.
Vier der acht Lücken sind als mittelschwer eingestuft, vier als niedrig. Das klingt harmlos, bis man sich ansieht, was die betroffenen Server tun: Der Filesystem-Server gibt einem Modell Lese- und Schreibzugriff auf Ordner auf deinem Rechner, und genau dort lagen die Fehler.
Vier Wege aus dem erlaubten Ordner heraus
Beim Filesystem-Server gingen alle vier Lücken auf dieselbe Bauart zurück: Der Server prüft einen Pfad, und danach benutzt er einen anderen.
Der erste Fall ist ein klassisches Zeitfensterproblem. Zwischen der Rechteprüfung und dem eigentlichen Schreibvorgang konnte ein übergeordneter Ordner gegen einen Symlink getauscht werden, und write_file, edit_file, create_directory oder das Ziel von move_file landeten außerhalb der erlaubten Verzeichnisse. Auf Linux und macOS ist das behoben. Auf Windows nur teilweise – der Hinweis GHSA-53mr-w429-c597 beschreibt, was offen bleibt und wie man es per Konfiguration umgeht.
Der zweite Fall ist noch simpler: Die Prüfung schnitt ein abschließendes Anführungszeichen oder Leerzeichen weg, die Dateioperation behielt es. Ein Nachbarordner, der genauso heißt wie ein erlaubter, nur mit diesem Zusatz, war damit erreichbar. Dazu kommen ein Symlink-Check, der eine andere Groß- und Kleinschreibung durchließ, was auf macOS-Standarddateisystemen reicht, und list_directory_with_sizes, das Größe und Änderungszeit von Dateien außerhalb des erlaubten Ordners verriet.
Der Everything-Server, der eigentlich zum Ausprobieren gedacht ist, hatte ein anderes Problem: Seine HTTP- und SSE-Transporte schickten Access-Control-Allow-Origin: * und prüften den Origin-Header nicht. Eine beliebige Webseite im Browser konnte damit seine Werkzeuge aufrufen, darunter get-env, und die Antwort mitlesen.
Beim Fetch-Server betreffen alle drei Lücken den Schutz vor Zugriffen auf interne Adressen: internationalisierte Hostnamen wurden in einer Form geprüft und in einer anderen verbunden, NAT64-Adressen im Bereich 64:ff9b::/96 galten als öffentlich, auch wenn sie eine private IPv4-Adresse tragen, und robots.txt wurde nur für die zuerst angefragte URL geprüft, nicht nach jeder Weiterleitung.
Die Update-Falle
Hier wird es praktisch. Die TypeScript-Server sind mit 1.0.0 von Datumsversionen auf semantische Versionen umgestiegen. Paketverwaltungen sortieren 2.0.1 deshalb unter jede 2025.x- und 2026.x-Version und bieten sie nicht als Aktualisierung an. Wer also irgendwann 2026.8.31 installiert hat, sieht kein Update und hält die Lücken für geschlossen.
Der Weg heraus ist, die Version ausdrücklich zu nennen:
npm install @modelcontextprotocol/server-filesystem@2.0.1
npm install @modelcontextprotocol/server-everything@2.0.1
Für den Python-Server bleibt es bei Datumsversionen, dort genügt das normale Update auf 2026.10.24.
Die Referenzserver sind der Maßstab, nach dem andere gebaut werden
Anthropic hat MCP 2025 an die Agentic AI Foundation übergeben, über die Übergabe der Agent Skills an dieselbe Stiftung habe ich vorgestern geschrieben. Diese Referenzserver sind damit nicht irgendein Repository, sondern die Vorlage, an der sich jeder orientiert, der einen eigenen MCP-Server schreibt. Wer die Pfadprüfung des Filesystem-Servers kopiert hat, hat die Lücke mitkopiert.
Und das Muster ist bei allen vier Filesystem-Fällen dasselbe: zwischen Prüfung und Benutzung liegt ein Spalt. Das ist kein Flüchtigkeitsfehler, sondern die schwierigste Klasse von Sicherheitsfehlern überhaupt, und sie trifft ein Werkzeug, das einem Sprachmodell Schreibrechte auf echte Ordner gibt. Dass der Everything-Server Umgebungsvariablen an jede beliebige Webseite herausgab, ist der Fall, der mich am meisten beschäftigt: Dieser Server läuft bei vielen nur zum Testen, und gerade deshalb hat kaum jemand nachgesehen, was er nach außen öffnet.
Quellen
- GitHub: modelcontextprotocol/servers Release v2.1.0
- GitHub: GHSA-53mr-w429-c597 – Parent-Directory Fallback TOCTOU in server-filesystem
- GitHub: GHSA-mvf5-2qqv-rg3c – Cross-Origin Environment Variable Exfiltration in server-everything
- GitHub: GHSA-v38p-wf49-hx2j – Private-address guard bypass via IDNA hostnames in mcp-server-fetch