aborruso-ckan-mcp-server

Ecosystem: npm

Downloads: 5.8 K

Vulnerabilities from the last (months)
  • 0CriticalAffects 0 versions
  • 0HighAffects 0 versions
  • 0MediumAffects 0 versions
  • 5ModerateAffects 5 versions
  • 2LowAffects 2 versions
Severity distribution (all time)
7vulnerabilities
  • Critical0 (0.0%)
  • High0 (0.0%)
  • Medium0 (0.0%)
  • Moderate5 (71.4%)
  • Low2 (28.6%)

Monthly breakdown

  • Critical
  • High
  • Medium
  • Moderate
  • Low
  • 1 vulnerabilities
    • Critical: 0
    • High: 0
    • Medium: 0
    • Moderate: 0
    • Low: 1
  • 4 vulnerabilities
    • Critical: 0
    • High: 0
    • Medium: 0
    • Moderate: 3
    • Low: 1
  • 1 vulnerabilities
    • Critical: 0
    • High: 0
    • Medium: 0
    • Moderate: 1
    • Low: 0
  • 1 vulnerabilities
    • Critical: 0
    • High: 0
    • Medium: 0
    • Moderate: 1
    • Low: 0

Vulnerabilities (7)

Known vulnerabilities affecting aborruso-ckan-mcp-server, based on data from OSV.

Vulnerabilities affecting aborruso-ckan-mcp-server
IDSeveritySummaryAffected versionsPublishedSource
GHSA-vqff-r82h-9crcLowckan-mcp-server: DataStore Table UI resource does not validate postMessage origin (in) and posts to targetOrigin "*" (out)## 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', fun
  • < 0.4.112
GitHub (opens in a new tab)
GHSA-798p-78g2-v556Moderate@aborruso/ckan-mcp-server has SSRF via DNS-name → internal IP — incomplete fix of CVE-2026-53509## Summary The SSRF guard `validateServerUrl` (added for CVE-2026-33060, extended for CVE-2026-53509) validates only the **hostname string** and never resolves DNS. Any caller-supplied `server_url` whose hostname *resolves* to an internal address passes the guard, so the server issues requests to **loopback and cloud metadata (`169.254.169.254`)**. This is a third bypass of the same guard, still present in the current latest **0.4.107**, and it reaches IMDS — strictly more than CVE-2026-53509, which only reached loopback. ## Affected / patched - `@aborruso/ckan-mcp-server` (npm) — all version
  • < 0.4.108
GitHub (opens in a new tab)
GHSA-6f9w-9hf2-5rg3LowCKAN MCP Server: Information disclosure via verbose error reflection## Summary Error paths reflect raw upstream response bodies and internal exception messages back to the caller instead of a sanitized, generic message. When the server is pointed at (or redirected/SSRF'd to) a host that returns a non-CKAN response, or when an internal exception occurs, the caller receives verbatim upstream content and internal detail (hostnames, internal IPs, DB errors, stack fragments). ## Affected code `src/utils/http.ts` — the entire decoded upstream body is embedded in the thrown error, which `formatCkanError` returns to the tool result: ```js } else { throw new Ckan
  • < 0.4.112
GitHub (opens in a new tab)
GHSA-78x9-fhhx-v2g6ModerateCKAN MCP Server: Cache-key canonicalization collision enables cache confusion / poisoning## Summary The response cache derives its key from an ambiguous string serialization of the request parameters. `canonicalizeParams` joins sorted `${key}=${value}` pairs with `&` and does not escape `&`, `=`, or the `|` field separators used in `buildCacheKey`. Two **different** logical parameter sets can therefore serialize to the **same** key and share one cache entry. Because the cached value is whatever the upstream returned for whichever request populated the entry first, an attacker can prime a colliding key so a victim's distinct query (same `server_url`) is served the attacker's cache
  • < 0.4.112
GitHub (opens in a new tab)
GHSA-83x6-42hr-jc76ModerateCKAN MCP Server: MQA server allowlist bypass via unanchored regex (`isValidMqaServer`)## Summary The `ckan_get_mqa_quality` and `ckan_get_mqa_quality_details` tools restrict their `server_url` argument to `dati.gov.it` via a regular expression. The regex is anchored only at the start and places no boundary after the host, so any URL whose host merely **begins with** `dati.gov.it` — or that uses `dati.gov.it` as URL *userinfo* before an `@` — passes validation while actually targeting an attacker-controlled host. ## Affected code ```js // src/tools/quality.ts const ALLOWED_SERVER_PATTERNS = [ /^https?:\/\/(www\.)?dati\.gov\.it/i // <-- no end anchor / host boundary ]
  • < 0.4.112
GitHub (opens in a new tab)
GHSA-g84h-j7jj-x32pModerate@aborruso/ckan-mcp-server: SSRF via base_url allows access to internal networks (Potential fix bypass of CVE-2026-33060)### Summary A known vulnerability CVE-2026-33060 indicated tools including ckan_package_search and sparql_query that accept a base_url parameter had the risk of making HTTP requests to arbitrary endpoints without restriction. A fix was applied to filter out ip addresses. However, a method to bypass exists. ### Details CKAN MCP Server validates caller-supplied CKAN server URLs by inspecting only the parsed hostname string before issuing outbound HTTP requests. In `src/utils/http.ts`, hostname aliases such as `ip6-localhost` are not equal to `localhost`, are not dotted IPv4 literals, and are no
  • < 0.4.106
GitHub (opens in a new tab)
GHSA-3xm7-qw7j-qc8vModerateSSRF in @aborruso/ckan-mcp-server via base_url allows access to internal networks## Summary The `@aborruso/ckan-mcp-server` MCP server provides tools including `ckan_package_search` and `sparql_query` that accept a `base_url` parameter, making HTTP requests to arbitrary endpoints without restriction. A CKAN portal client has no legitimate reason to contact cloud metadata or internal network services. ## Severity Attack complexity is HIGH because exploitation requires prompt injection via malicious content (webpage, document) while the victim's AI assistant has this MCP server connected. ## Proof of Concept Tested inside Docker-in-Docker isolated environment with canar
  • < 0.4.85
GitHub (opens in a new tab)
  • GHSA-vqff-r82h-9crcLow
    ckan-mcp-server: DataStore Table UI resource does not validate postMessage origin (in) and posts to targetOrigin "*" (out)
    • < 0.4.112

    ## 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', fun

    CVE: CVE-2026-76894

  • GHSA-798p-78g2-v556Moderate
    @aborruso/ckan-mcp-server has SSRF via DNS-name → internal IP — incomplete fix of CVE-2026-53509
    • < 0.4.108

    ## Summary The SSRF guard `validateServerUrl` (added for CVE-2026-33060, extended for CVE-2026-53509) validates only the **hostname string** and never resolves DNS. Any caller-supplied `server_url` whose hostname *resolves* to an internal address passes the guard, so the server issues requests to **loopback and cloud metadata (`169.254.169.254`)**. This is a third bypass of the same guard, still present in the current latest **0.4.107**, and it reaches IMDS — strictly more than CVE-2026-53509, which only reached loopback. ## Affected / patched - `@aborruso/ckan-mcp-server` (npm) — all version

    CVE: CVE-2026-61612

  • GHSA-6f9w-9hf2-5rg3Low
    CKAN MCP Server: Information disclosure via verbose error reflection
    • < 0.4.112

    ## Summary Error paths reflect raw upstream response bodies and internal exception messages back to the caller instead of a sanitized, generic message. When the server is pointed at (or redirected/SSRF'd to) a host that returns a non-CKAN response, or when an internal exception occurs, the caller receives verbatim upstream content and internal detail (hostnames, internal IPs, DB errors, stack fragments). ## Affected code `src/utils/http.ts` — the entire decoded upstream body is embedded in the thrown error, which `formatCkanError` returns to the tool result: ```js } else { throw new Ckan

    CVE: CVE-2026-73844

  • GHSA-78x9-fhhx-v2g6Moderate
    CKAN MCP Server: Cache-key canonicalization collision enables cache confusion / poisoning
    • < 0.4.112

    ## Summary The response cache derives its key from an ambiguous string serialization of the request parameters. `canonicalizeParams` joins sorted `${key}=${value}` pairs with `&` and does not escape `&`, `=`, or the `|` field separators used in `buildCacheKey`. Two **different** logical parameter sets can therefore serialize to the **same** key and share one cache entry. Because the cached value is whatever the upstream returned for whichever request populated the entry first, an attacker can prime a colliding key so a victim's distinct query (same `server_url`) is served the attacker's cache

    CVE: CVE-2026-73846

  • GHSA-83x6-42hr-jc76Moderate
    CKAN MCP Server: MQA server allowlist bypass via unanchored regex (`isValidMqaServer`)
    • < 0.4.112

    ## Summary The `ckan_get_mqa_quality` and `ckan_get_mqa_quality_details` tools restrict their `server_url` argument to `dati.gov.it` via a regular expression. The regex is anchored only at the start and places no boundary after the host, so any URL whose host merely **begins with** `dati.gov.it` — or that uses `dati.gov.it` as URL *userinfo* before an `@` — passes validation while actually targeting an attacker-controlled host. ## Affected code ```js // src/tools/quality.ts const ALLOWED_SERVER_PATTERNS = [ /^https?:\/\/(www\.)?dati\.gov\.it/i // <-- no end anchor / host boundary ]

    CVE: CVE-2026-73845

  • GHSA-g84h-j7jj-x32pModerate
    @aborruso/ckan-mcp-server: SSRF via base_url allows access to internal networks (Potential fix bypass of CVE-2026-33060)
    • < 0.4.106

    ### Summary A known vulnerability CVE-2026-33060 indicated tools including ckan_package_search and sparql_query that accept a base_url parameter had the risk of making HTTP requests to arbitrary endpoints without restriction. A fix was applied to filter out ip addresses. However, a method to bypass exists. ### Details CKAN MCP Server validates caller-supplied CKAN server URLs by inspecting only the parsed hostname string before issuing outbound HTTP requests. In `src/utils/http.ts`, hostname aliases such as `ip6-localhost` are not equal to `localhost`, are not dotted IPv4 literals, and are no

    CVE: CVE-2026-53509

  • GHSA-3xm7-qw7j-qc8vModerate
    SSRF in @aborruso/ckan-mcp-server via base_url allows access to internal networks
    • < 0.4.85

    ## Summary The `@aborruso/ckan-mcp-server` MCP server provides tools including `ckan_package_search` and `sparql_query` that accept a `base_url` parameter, making HTTP requests to arbitrary endpoints without restriction. A CKAN portal client has no legitimate reason to contact cloud metadata or internal network services. ## Severity Attack complexity is HIGH because exploitation requires prompt injection via malicious content (webpage, document) while the victim's AI assistant has this MCP server connected. ## Proof of Concept Tested inside Docker-in-Docker isolated environment with canar

    CVE: CVE-2026-33060

Showing 1-7 of 7 vulnerabilities