security · posture · updated October 4, 2026
MCP ecosystem CVE ledger
Published CVEs in the MCP ecosystem that matter to anyone running MCP servers behind Hangar — what each one is, and whether Hangar's controls relate to it. Including when they do not.
MCP ecosystem CVE ledger
An evergreen record of published CVEs in the Model Context Protocol ecosystem — the protocol SDKs and the servers people run — with one entry per CVE and one anchor per entry, so an advisory can be deep-linked from an issue, a ticket, or a scanner note.
Each entry says three things: what the vulnerability is, what it affects, and how Hangar’s controls relate to it — including the cases where the honest answer is they do not. Hangar is a policy enforcement plane. It enforces deterministic policy on calls that pass through it and records what happened; it does not patch someone else’s code, and it cannot enforce on a connection that never reaches it.
This ledger is a pointer, not a replacement: every entry links to the upstream advisory, and where Hangar published a full write-up, to that too.
Vulnerabilities in Hangar’s own code are a different list: they are published
as GitHub security advisories on mcp-hangar/mcp-hangar, and are listed at
the end of this page and on /security.
CVE-2026-59950
Missing Host and Origin validation in the deprecated websocket_server
transport of the upstream MCP Python SDK. CVSS 7.6 (HIGH), CWE-346
(Origin Validation Error). Because browsers do not apply the same-origin policy
to WebSocket connections, a malicious page could complete a handshake against a
local MCP server and drive it as the user — a cross-site WebSocket hijacking
(CSWSH) path, with DNS rebinding as a variant.
| Affected component | MCP Python SDK (mcp) — the deprecated websocket_server transport |
| Affected versions | mcp before 1.28.1 |
| Fixed in | mcp 1.28.1 |
| Severity | CVSS 7.6 — HIGH |
| In Hangar’s own code | No |
Credit to the MCP Python SDK maintainers, who shipped the fix in mcp 1.28.1.
How Hangar’s controls relate
This was a supply-chain gap in a dependency, not a vulnerability in Hangar’s
own code. Hangar has never used the SDK’s deprecated websocket_server
transport — its own WebSocket endpoints are a separate implementation — so the
vulnerable code path was not reachable through Hangar. What was wrong is that
Hangar’s published dependency floor read mcp>=1.0.0, which meant a fresh
install could still resolve a vulnerable SDK into your environment. MCP Hangar
1.5.1 raised the floor to mcp>=1.28.1, and 1.6.0 added handshake
validation at Hangar’s own ASGI edge as defence in depth. The full advisory has
the detail and the upgrade steps.
Where it does not help. If you run an MCP server that uses the SDK’s
websocket_server transport and something can reach that server directly, a
Hangar policy does not mitigate this CVE. Enforcement applies to calls that pass
through the enforcement plane; a browser-originated handshake that goes straight
to the server never enters that path, so no allow/deny rule, egress policy, or
approval gate is consulted. Neither does default-deny egress in a governed
namespace help here — the attack rides the connection it just opened. Patch the
SDK. There is no Hangar setting that substitutes for mcp>=1.28.1.
Links
- Hangar advisory (full write-up and upgrade guidance): Security advisory: MCP Hangar 1.5.1 requires the CVE-2026-59950 fix
- NVD record: CVE-2026-59950
- Upstream project: modelcontextprotocol/python-sdk
- Hardening the exposed edge: public-edge hardening recipe
Hangar’s own advisories
Not ecosystem CVEs: these are vulnerabilities in Hangar itself, disclosed as GitHub security advisories on mcp-hangar/mcp-hangar. The list is built from the published advisories, which are checked daily; changes reach this page through a reviewed pull request. Each entry links to the full advisory, with affected versions and upgrade guidance.
- lowGHSA-624f-g334-j7x2A standalone gateway with durable storage never deregisters a discovered server, and keeps routing to its old addressFixed in 2.36.4
- highGHSA-cfcx-vrqr-qr84Tool digest pin does not cover title, annotations or _meta, so a rug-pull through those fields passes the pinFixed in 2.30.0
- highGHSA-qrgf-hc7g-w6v6Hot-loaded registry entries can request arbitrary host environment variables and secret filesFixed in 2.30.0
- lowGHSA-3vqv-89q2-8m26A silent stdio upstream that fails tools/list blocks the starting gateway thread indefinitelyFixed in 2.20.0
- mediumGHSA-4wc3-66v8-968jConcurrent appends drop a tool call's events, audit records included, report a successful call as failed, and fail auth-store role and key revocationsFixed in 2.20.0
- mediumGHSA-5gq2-5qfw-23p6SSRF policy bypassed by an IPv4-mapped IPv6 literal endpointAffects <= 2.5.1
- mediumGHSA-6fp8-g5qw-73g7A failed or repeated upstream start leaks the transport client and its child process or connectionFixed in 2.20.0
- highGHSA-9mfg-mfwg-7cvrTool calls skip group- and tenant-scoped governance: member-direct calls bypass group policy, approval lists are not enforced, and a withdrawal during an approval hold is not re-checkedFixed in 2.20.0
- highGHSA-j393-8j4v-v73rCapability enforcement in block and quarantine modes does not stop a drifting server, so undeclared upstream tools still runFixed in 2.20.0
- mediumGHSA-pfrp-gjcw-mxq3Truncated-result continuations are fetchable across tenants, and their ids are logged at INFOFixed in 2.20.0
- highGHSA-48jg-9vqq-gmqvTenant-scoped role grants apply fleet-wide: cross-tenant event and history reads, and cross-tenant or global tool withdrawalFixed in 2.19.0
- mediumGHSA-fhwh-fmq2-7m5cSession suspension is never enforced: a suspended session keeps invoking toolsFixed in 2.19.1
- mediumGHSA-qwq2-7g49-jxc6Tool error text exported in trace status; baggage scrubber trusts a caller-forgeable prefix and is skipped on stdioFixed in 2.19.1
How this ledger is kept
One ## heading per CVE, newest first, with the CVE id as the whole heading —
that is what makes #cve-2026-59950 a stable anchor. Each block is
self-contained: heading, a short factual paragraph, the affected component and
versions, how Hangar’s controls relate, then links. Adding an entry means adding
one block to
src/content/security/cve-ledger.mdx
and nothing else.
Entries are listed when they are relevant to running MCP servers under an enforcement plane. A CVE with no Hangar relationship still gets an entry that says so, because “we do not mitigate this” is the useful sentence.