The MCP Apps UI in @aborruso/ckan-mcp-server (a DataStore table rendered in a host webview/iframe) accepts postMessage events without checking event.origin and sends its own messages to target origin '*'. A frame able to reach the document can inject fabricated rows and links (display spoofing, not XSS, since values are HTML-escaped) or spoof the ui/initialize handshake. Exploitation requires a non-standard embedding model and user interaction, so the advisory itself rates it Low (CVSS 3.1), with no EPSS data, no KEV listing, no public exploit and no scanner template. The package has 506 downstream dependents and 79 other CVEs, so it is worth tracking as a hygiene issue rather than an emergency. Upgrade to 0.4.112 in normal patch cycles and confirm your MCP host embeds the UI only in a trusted parent.
What is the risk?
Low. CVSS 3.1 is 3.1 (AV:N/AC:H/PR:N/UI:R, confidentiality-only impact). It is a defense-in-depth gap rather than a directly remotely triggerable flaw, because in a correct MCP Apps host the parent is trusted. Exploitation needs a hostile frame able to message the UI plus a user acting on spoofed content. No KEV listing, no public exploit, no Nuclei template and no EPSS data. The package's 79 other CVEs and 6.7/10 OpenSSF score suggest an uneven security track record.
How does the attack unfold?
What systems are affected?
| Package | Ecosystem | Vulnerable Range | Patched |
|---|---|---|---|
| Panel | npm | < 0.4.112 | 0.4.112 |
Do you use Panel? You're affected.
How severe is it?
What is the attack surface?
What should I do?
1 stepUpgrade @aborruso/ckan-mcp-server to 0.4.112 or later. Inventory MCP servers that ship interactive UI resources and check how your host embeds them (sandboxed iframe, trusted parent only). Avoid embedding these UI resources alongside untrusted frames or content. Train users not to click links rendered in MCP tool UIs without verifying the destination. Review other MCP UI resources for the same pattern: no event.origin validation and postMessage with '*'.
How is it classified?
Which compliance frameworks are affected?
This CVE is relevant to:
Frequently Asked Questions
What is CVE-2026-76894?
The MCP Apps UI in @aborruso/ckan-mcp-server (a DataStore table rendered in a host webview/iframe) accepts postMessage events without checking event.origin and sends its own messages to target origin '*'. A frame able to reach the document can inject fabricated rows and links (display spoofing, not XSS, since values are HTML-escaped) or spoof the ui/initialize handshake. Exploitation requires a non-standard embedding model and user interaction, so the advisory itself rates it Low (CVSS 3.1), with no EPSS data, no KEV listing, no public exploit and no scanner template. The package has 506 downstream dependents and 79 other CVEs, so it is worth tracking as a hygiene issue rather than an emergency. Upgrade to 0.4.112 in normal patch cycles and confirm your MCP host embeds the UI only in a trusted parent.
Is CVE-2026-76894 actively exploited?
No confirmed active exploitation of CVE-2026-76894 has been reported, but organizations should still patch proactively.
How to fix CVE-2026-76894?
Upgrade @aborruso/ckan-mcp-server to 0.4.112 or later. Inventory MCP servers that ship interactive UI resources and check how your host embeds them (sandboxed iframe, trusted parent only). Avoid embedding these UI resources alongside untrusted frames or content. Train users not to click links rendered in MCP tool UIs without verifying the destination. Review other MCP UI resources for the same pattern: no event.origin validation and postMessage with '*'.
What systems are affected by CVE-2026-76894?
This vulnerability affects the following AI/ML architecture patterns: MCP servers with interactive UI resources, agent frameworks, LLM tool-calling hosts, open data retrieval pipelines.
What is the CVSS score for CVE-2026-76894?
CVE-2026-76894 has a CVSS v3.1 base score of 3.1 (LOW).
What is the AI security impact?
Affected AI Architectures
MITRE ATLAS Techniques
AML.T0011.003Malicious LinkAML.T0073ImpersonationAML.T0099AI Agent Tool Data PoisoningCompliance Controls Affected
What are the technical details?
Original Advisory
## Summary The MCP Apps UI resource (an interactive DataStore table rendered in the host's webview/iframe) communicates with its parent via `postMessage`. Its inbound `message` listener performs no `event.origin` validation, and its outbound messages are sent with target origin `'*'`. Any window/frame able to reach the document can inject data into the table and interfere with the MCP UI handshake, and the UI's own JSON-RPC messages are broadcast without an origin restriction. ## Affected 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||{} }, '*'); ``` There is no allowlist of accepted origins for inbound messages and no fixed target origin for outbound messages. ## Impact - **Content spoofing.** A frame that can `postMessage` to the UI can supply arbitrary `fields`/`records`, causing the table to render fabricated rows and links (e.g. a phishing `__link_url`) that appear to come from the queried portal. (Values are HTML-escaped, so this is display spoofing, not script injection — no XSS.) - **Handshake/UX interference.** Because inbound messages matching a pending `id` resolve/reject the UI's MCP requests, an attacker frame can spoof responses to the `ui/initialize` handshake or otherwise disrupt the panel. - **Outbound leakage.** Posting to `'*'` means the UI's JSON-RPC messages are delivered to whatever the parent origin is; if the resource is ever embedded by a context other than the trusted host, those messages leak to it. Exploitability depends on the host embedding model (in a correct MCP Apps host the parent is the trusted host, which limits who can message the frame), so this is a hardening / defense-in-depth issue rather than a directly remotely-triggerable one — hence Low. ## Proof of concept - `poc/verify-no-origin-check.mjs` — static confirmation that the listener has no origin check and outbound uses `'*'`: ``` [x] validates event.origin : NO [x] outgoing postMessage targetOrigin : '*' (any) RESULT: VULNERABLE ``` - `poc/parent-spoof-poc.html` — a page that embeds the UI and injects fabricated rows cross-origin with no handshake; the UI renders them. ## Remediation - Validate `event.origin` against the expected host origin on every inbound message; drop messages from other origins. - Send outbound `postMessage` with an explicit target origin (the host origin established at initialize time) instead of `'*'`. - Optionally, bind to a nonce/channel established during `ui/initialize` so only the negotiated host can drive the panel.
Exploitation Scenario
An attacker gets a malicious page or frame into the same window hierarchy as an MCP host showing the CKAN DataStore table, for example through a compromised embedded widget. The frame posts a crafted message with fabricated fields and records, including a phishing __link_url. The table renders the rows as if they came from the government open-data portal. An analyst, or an agent-assisted user, clicks the link or trusts the false data, leading to credential phishing or decisions based on poisoned data.
Weaknesses (CWE)
CWE-345Insufficient Verification of Data AuthenticityPrimaryCWE-940Improper Verification of Source of a Communication ChannelPrimaryCWE-345 — Insufficient Verification of Data Authenticity: The product does not sufficiently verify the origin or authenticity of data, in a way that causes it to accept invalid data.
Source: MITRE CWE corpus.
CVSS Vector
CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:U/C:L/I:N/A:NReferences
Timeline
Related Vulnerabilities
CVE-2024-1315210.0Mobuy Panel: SQLi allows unauthenticated DB takeover
Same package: panelCVE-2026-528559.9Pterodactyl Wings: egg template leaks daemon secrets
Same package: panelCVE-2026-541589.9SiYuan: XSS→RCE via workspace sync in Electron app
Same package: panelCVE-2026-477449.9Shopper: RBAC bypass allows full admin takeover
Same package: panelCVE-2026-556349.9Pimcore: DataObject field-name injection → RCE
Same package: panel