Niedrig

ckan-mcp-server: DataStore Table UI-Ressource validiert postMessage-Ursprung (in) nicht und postet an targetOrigin "*" (out)

  • Veröffentlicht: 16.10.2026
  • Aktualisiert: 20.10.2026 08:36

Zusammenfassung

Die MCP-Apps-UI-Ressource (eine interaktive DataStore-Tabelle, die im Webview bzw. iFrame des Hosts gerendert wird) kommuniziert über postMessage mit ihrem übergeordneten Element. Der eingehende message-Listener führt keine event.origin-Validierung durch, und ausgehende Nachrichten werden mit dem Zielursprung '*' gesendet. Jedes Fenster oder jeder Frame, der das Dokument erreichen kann, kann Daten in die Tabelle einschleusen und den MCP-UI-Handshake stören. Zudem werden die JSON-RPC-Nachrichten der Benutzeroberfläche ohne Ursprungsbeschränkung übertragen.

Betroffener Code

src/resources/datastore-table-ui.ts (Inline-HTML):

js
window.addEventListener('message', function (event) {
  var msg = event.data;                    // no check of event.origin
  if (!msg || typeof msg !== 'object') return;
  if (msg.id !== undefined && _pending[msg.id]) { ... resolve/reject pending MCP request ... }
  ...
  if (data && (data.fields || data.records)) initTable(data);   // renders attacker-supplied data
});

// outbound:
window.parent.postMessage({ jsonrpc: '2.0', id: id, method: method, params: params || {} }, '*');
mcpNot: window.parent.postMessage({ jsonrpc:'2.0', method:method, params:params||{} }, '*');

Es existiert weder eine Zulassungsliste für akzeptierte Ursprünge eingehender Nachrichten noch ein fester Zielursprung für ausgehende Nachrichten.

Auswirkungen

  • Inhaltstäuschung (Content Spoofing): Ein Frame, der Nachrichten per postMessage an die Benutzeroberfläche senden kann, kann beliebige fields/records bereitstellen. Dies führt dazu, dass die Tabelle erfundene Zeilen und Links (z. B. eine Phishing-__link_url) anzeigt, die scheinbar aus dem abgefragten Portal stammen. (Werte werden HTML-eskapiert; es handelt sich somit um Anzeigefälschung und keine Skriptinjektion – kein XSS).
  • Störung des Handshakes / der UX: Da eingehende Nachrichten, die mit einer ausstehenden id übereinstimmen, MCP-Anfragen der Benutzeroberfläche auflösen oder ablehnen, kann ein Angreifer-Frame Antworten auf den ui/initialize-Handshake fälschen oder das Panel anderweitig stören.
  • Ausgehende Datenabflüsse: Durch das Senden an '*' werden JSON-RPC-Nachrichten der Benutzeroberfläche an den jeweiligen übergeordneten Ursprung übermittelt. Falls die Ressource jemals in einem anderen Kontext als dem vertrauenswürdigen Host eingebettet wird, werden diese Nachrichten an diesen offengelegt.

Die Ausnutzbarkeit hängt vom Einbettungsmodell des Hosts ab (in einem korrekten MCP-Apps-Host ist das übergeordnete Element der vertrauenswürdige Host, was einschränkt, wer dem Frame Nachrichten senden kann). Es handelt sich daher eher um ein Problem der Härtung bzw. Defense-in-Depth als um eine direkt aus der Ferne auslösbare Schwachstelle – daher die Einstufung als niedrig (Low).

Machbarkeitsnachweis (PoC)

  • poc/verify-no-origin-check.mjs – statische Bestätigung, dass der Listener keine Ursprungsprüfung durchführt und für ausgehende Nachrichten '*' verwendet:

    [x] validates event.origin             : NO
    [x] outgoing postMessage targetOrigin  : '*' (any)
    RESULT: VULNERABLE
  • poc/parent-spoof-poc.html – eine Seite, die die Benutzeroberfläche einbettet und herkunftsübergreifend erfundene Zeilen ohne Handshake einschleust, welche von der Benutzeroberfläche gerendert werden.

Was zu tun ist

  • Validieren Sie event.origin bei jeder eingehenden Nachricht anhand des erwarteten Host-Ursprungs; verwerfen Sie Nachrichten von anderen Ursprüngen.
  • Senden Sie ausgehende postMessage mit einem expliziten Zielursprung (dem beim Initialisieren festgelegten Host-Ursprung) anstelle von '*'.
  • Optional: Binden Sie die Kommunikation an eine Nonce oder einen Kanal, der während ui/initialize vereinbart wurde, sodass nur der ausgehandelte Host das Panel steuern kann.
  • Aktualisieren Sie auf Version 0.4.112 oder höher.

Betroffene Software

Klicken Sie auf eine Technologie, um alle zugehörigen Schwachstellen anzuzeigen.

PlattformPaketAnfällige VersionenBehoben in
npm-Paket @aborruso/ckan-mcp-server < 0.4.112 0.4.112

Verweise

CVSS-Wert 3.1/10
CVSS-Vektor
CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:U/C:L/I:N/A:N
Schwäche (CWE)
CWE-345, CWE-940
Plattform
npm
Paket
@aborruso/ckan-mcp-server
Veröffentlicht
16.10.2026
Aktualisiert
20.10.2026 08:36

Quellen und Lizenzen · Von DockRay bearbeitet oder übersetzt; Rechte und Lizenzen der Quellen bleiben erhalten.

OSV / GitHub Advisory Database - GHSA-vqff-r82h-9crc - CC BY 4.0

Schwachstellenhistorie: @aborruso/ckan-mcp-server

Alle veröffentlichten Schwachstellen dieses Pakets (npm-Paket), neueste zuerst. Zeigt, ob es ein einmaliger Ausrutscher ist oder ein Paket, das man im Auge behalten muss.

Einträge insgesamt
7
Erste → letzte
03.2026 10.2026
Ohne Fix
0
In Angriffen ausgenutzt
0

Verteilung nach Schweregrad

  • Mittel 5
  • Niedrig 2

Veröffentlichungen pro Jahr

  1. 2026: 7
  1. ckan-mcp-server: DataStore Table UI-Ressource validiert postMessage-Ursprung (in) nicht und postet an targetOrigin "*" (out) dieser Eintrag
    Niedrig · 3.1 CVE-2026-76894 < 0.4.112 0.4.112
  2. Niedrig · 3.7 CVE-2026-73844 < 0.4.112 0.4.112

Erkennen Sie Schwachstellen in Ihrer Anwendung

Mit der DockRay-Integration und aktivierter Softwareinventarisierung prüft DockRay gemeldete Komponentenversionen auf bekannte Schwachstellen und benachrichtigt Sie über bestätigte Treffer. Die Abdeckung hängt von der unterstützten Technologie und den verfügbaren Meldungen ab.

Anwendung verbinden
DockRay Newsletter

Anwendungssicherheit in Ihrem Postfach

Wichtige Schwachstellen, konkrete Empfehlungen und praktische Tipps für Ihre Anwendungen. Wählen Sie Ihre Technologien und verfolgen Sie, was für Ihr Projekt relevant ist.

  • Eine tägliche Zusammenfassung neuer Schwachstellen, auch kritischer.
  • Benachrichtigungen über wichtige Updates.
  • Praktische Tipps zur Sicherheit und Überwachung von Anwendungen.

Leer lassen, um Meldungen zu allen Technologien zu erhalten.

Kostenlos anmelden. In jeder E-Mail mit einem Klick abmelden.