Vulnerabilities in pkg:npm/@aborruso/ckan-mcp-server
PACKAGECVE-2026-76894 is a LOW (CVSS 3.1) remote code execution vulnerability (CWE-940: Improper Verification of Source of a Communication Channel) affecting ckan-mcp-server libraries in the npm ecosystem. The issue involves datastore table ui resource does not validate postmessage origin (in) and posts to targetorigin "*" (out). Remediation is available by upgrading affected packages to version 0.4.112.
pkg:npm/@aborruso/ckan-mcp-server
Vulnerability advisories affecting package pkg:npm/@aborruso/ckan-mcp-server. Select an advisory below to view technical details or fixes.
| Advisory ID | CVE / NVD | Severity | Summary |
|---|---|---|---|
| GHSA-vqff-r82h-9crc | CVE-2026-76894 | LOW | ckan-mcp-server: DataStore Table UI resource does not validate postMessage origin (in) and posts to targetOrigin "*" (out) |
| GHSA-798p-78g2-v556 | CVE-2026-61612 | MODERATE | @aborruso/ckan-mcp-server has SSRF via DNS-name → internal IP — incomplete fix of CVE-2026-53509 |
| GHSA-78x9-fhhx-v2g6 | CVE-2026-73846 | MODERATE | CKAN MCP Server: Cache-key canonicalization collision enables cache confusion / poisoning |
| GHSA-6f9w-9hf2-5rg3 | CVE-2026-73844 | LOW | CKAN MCP Server: Information disclosure via verbose error reflection |
| GHSA-83x6-42hr-jc76 | CVE-2026-73845 | MODERATE | CKAN MCP Server: MQA server allowlist bypass via unanchored regex (`isValidMqaServer`) |
| GHSA-g84h-j7jj-x32p | CVE-2026-53509 | MODERATE | @aborruso/ckan-mcp-server: SSRF via base_url allows access to internal networks (Potential fix bypass of CVE-2026-33060) |
| GHSA-3xm7-qw7j-qc8v | CVE-2026-33060 | MODERATE | SSRF in @aborruso/ckan-mcp-server via base_url allows access to internal networks |
CVE-2026-76894 at a Glance
Security Impact
CVSS: 3.1
The security impact metrics below are parsed directly from the CVSS v3.1 vector string (CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:U/C:L/I:N/A:N).
How to Fix CVE-2026-76894
To remediate this vulnerability, upgrade all affected ckan-mcp-server dependencies to a patched release. Both direct and transitive dependencies should be checked, as frameworks or security libraries may pull in vulnerable versions transitively.
npm install @aborruso/ckan-mcp-server@0.4.112
Run the following command in your project directory to verify that all resolved dependencies use the patched release:
npm ls @aborruso/ckan-mcp-server
How to Check if You Are Affected
To determine whether your Node.js application is affected by CVE-2026-76894, inspect your project dependencies using npm:
npm ls @aborruso/ckan-mcp-server
Analyze the terminal output to locate any version of ckan-mcp-server in your dependency tree. If any resolved version matches the vulnerable ranges listed in the table below (for example, versions earlier than 0.4.112), your application is affected.
Note: The npm ls @aborruso/ckan-mcp-server command inspects dependencies declared in your package.json and lockfile; it does not perform automated runtime dynamic scanning.
Technical Details
Vulnerability Mechanism & Technical Analysis
This vulnerability is classified under CWE-940: Improper Verification of Source of a Communication Channel, where the product establishes a communication channel to handle an incoming request that has been initiated by an actor, but it does not properly verify that the request is coming from the expected origin. In ckan-mcp-server, software state validation or input boundaries are circumvented during processing. Review the official source advisory statement below for specific affected components, classes, and reproduction details.
Source Advisory Statement
CVE-2026-76894 Affected ckan-mcp-server Versions
1 component(s)| Product / Package | Ecosystem | Affected Versions | Fixed Version |
|---|---|---|---|
|
@aborruso/ckan-mcp-server
|
npm |
< 0.4.112
|
0.4.112
|
References
Frequently Asked Questions
What is CVE-2026-76894?
Which ckan-mcp-server versions are affected?
What version fixes CVE-2026-76894?
Is @aborruso/ckan-mcp-server affected?
What is the CVSS score of CVE-2026-76894?
What CWE is associated with CVE-2026-76894?
How can I check npm dependencies for CVE-2026-76894?
Machine-readable OSV JSON
OSV v1.5 Schema
{
"schema_version" : "1.4.0",
"id" : "GHSA-vqff-r82h-9crc",
"modified" : "2026-10-16T19:23:48Z",
"published" : "2026-10-16T19:23:48Z",
"aliases" : [ "CVE-2026-76894" ],
"summary" : "ckan-mcp-server: DataStore Table UI resource does not validate postMessage origin (in) and posts to targetOrigin \"*\" (out)",
"details" : "## Summary\n\nThe 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.\n\n## Affected code\n\n`src/resources/datastore-table-ui.ts` (inline HTML):\n\n```js\nwindow.addEventListener('message', function (event) {\n var msg = event.data; // no check of event.origin\n if (!msg || typeof msg !== 'object') return;\n if (msg.id !== undefined && _pending[msg.id]) { ... resolve/reject pending MCP request ... }\n ...\n if (data && (data.fields || data.records)) initTable(data); // renders attacker-supplied data\n});\n\n// outbound:\nwindow.parent.postMessage({ jsonrpc: '2.0', id: id, method: method, params: params || {} }, '*');\nmcpNot: window.parent.postMessage({ jsonrpc:'2.0', method:method, params:params||{} }, '*');\n```\n\nThere is no allowlist of accepted origins for inbound messages and no fixed target origin for outbound messages.\n\n## Impact\n\n- **Content spoofing.** A frame that can `postMessage` to the UI can supply\n arbitrary `fields`/`records`, causing the table to render fabricated rows and\n links (e.g. a phishing `__link_url`) that appear to come from the queried\n portal. (Values are HTML-escaped, so this is display spoofing, not script\n injection — no XSS.)\n- **Handshake/UX interference.** Because inbound messages matching a pending `id`\n resolve/reject the UI's MCP requests, an attacker frame can spoof responses to\n the `ui/initialize` handshake or otherwise disrupt the panel.\n- **Outbound leakage.** Posting to `'*'` means the UI's JSON-RPC messages are\n delivered to whatever the parent origin is; if the resource is ever embedded by\n a context other than the trusted host, those messages leak to it.\n\nExploitability depends on the host embedding model (in a correct MCP Apps host the\nparent is the trusted host, which limits who can message the frame), so this is a\nhardening / defense-in-depth issue rather than a directly remotely-triggerable\none — hence Low.\n\n## Proof of concept\n\n- `poc/verify-no-origin-check.mjs` — static confirmation that the listener has no\n origin check and outbound uses `'*'`:\n\n ```\n [x] validates event.origin : NO\n [x] outgoing postMessage targetOrigin : '*' (any)\n RESULT: VULNERABLE\n ```\n\n- `poc/parent-spoof-poc.html` — a page that embeds the UI and injects fabricated\n rows cross-origin with no handshake; the UI renders them.\n\n## Remediation\n\n- Validate `event.origin` against the expected host origin on every inbound\n message; drop messages from other origins.\n- Send outbound `postMessage` with an explicit target origin (the host origin\n established at initialize time) instead of `'*'`.\n- Optionally, bind to a nonce/channel established during `ui/initialize` so only\n the negotiated host can drive the panel.",
"severity" : [ {
"type" : "CVSS_V3",
"score" : "CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:U/C:L/I:N/A:N"
} ],
"affected" : [ {
"package" : {
"ecosystem" : "npm",
"name" : "@aborruso/ckan-mcp-server"
},
"ranges" : [ {
"type" : "ECOSYSTEM",
"events" : [ {
"introduced" : "0"
}, {
"fixed" : "0.4.112"
} ]
} ]
} ],
"references" : [ {
"type" : "WEB",
"url" : "https://github.com/ondata/ckan-mcp-server/security/advisories/GHSA-vqff-r82h-9crc"
}, {
"type" : "PACKAGE",
"url" : "https://github.com/ondata/ckan-mcp-server"
} ],
"database_specific" : {
"cwe_ids" : [ "CWE-345", "CWE-940" ],
"severity" : "LOW",
"github_reviewed" : true,
"github_reviewed_at" : "2026-10-16T19:23:48Z",
"nvd_published_at" : null
}
}