ckan-mcp-server: DataStore Table UI-Ressource validiert postMessage-Ursprung (in) nicht und postet an targetOrigin "*" (out)
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):
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
postMessagean die Benutzeroberfläche senden kann, kann beliebigefields/recordsbereitstellen. 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 denui/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.originbei jeder eingehenden Nachricht anhand des erwarteten Host-Ursprungs; verwerfen Sie Nachrichten von anderen Ursprüngen. - Senden Sie ausgehende
postMessagemit 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/initializevereinbart 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.
| Plattform | Paket | Anfällige Versionen | Behoben in |
|---|---|---|---|
| npm-Paket | @aborruso/ckan-mcp-server | < 0.4.112 | 0.4.112 |
Verweise
- 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
- 2026: 7
-
ckan-mcp-server: DataStore Table UI-Ressource validiert postMessage-Ursprung (in) nicht und postet an targetOrigin "*" (out) dieser Eintrag
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.