Summary
@modelcontextprotocol/sdk@1.29.0 depends on @hono/node-server: ^1.19.9. GHSA-frvp-7c67-39w9 affects all < 2.0.5, and there is no patched 1.x line — so no version satisfying ^1.19.9 is unaffected, and the range itself has to widen to clear the advisory.
This is what makes it different from #2036 and #2042, which cover hono and fast-uri. Both of those note that the SDK's existing semver ranges already permit the fixed versions, so a lockfile refresh resolves them. That is not true here: 1.x → 2.x is a major bump, so consumers cannot fix it on their own without an overrides entry that forces a major version of an adapter the SDK was written against.
|
|
| Advisory |
GHSA-frvp-7c67-39w9 — path traversal in serve-static on Windows via encoded backslash (%5C) |
| Severity |
Moderate (CVSS 5.9) |
| Vulnerable |
< 2.0.5 |
| First patched |
2.0.5 (current latest: 2.0.11) |
| SDK range |
^1.19.9 — cannot resolve to a patched version |
Ask
Widen @hono/node-server to ^2.0.5 (or otherwise allow the 2.x line), so consumers can resolve to a patched version.
Reachability (FYI for triage — argues this is low urgency, but not zero)
Worth separating the load graph from the vulnerable surface, since they point in different directions:
serveStatic is never referenced anywhere in the SDK. grep -rn "serveStatic" dist/ returns nothing in 1.29.0. The vulnerable code path needs a running static file server, so no SDK consumer should be exploitable through the SDK itself. That is the main reason we are filing this rather than forcing an override downstream.
But the package is on a genuine runtime path, not just examples. Issue #2036 observes that hono is loaded only by dist/esm/examples/server/honoWebStandardStreamableHttp.js. That holds for hono itself, but @hono/node-server is different:
dist/esm/server/streamableHttp.js:9:import { getRequestListener } from '@hono/node-server';
So it loads for anyone using StreamableHTTPServerTransport — outside the examples/ tree. Only getRequestListener is imported, which is not the affected surface, but it does mean the "could this be a peerDependency / optionalDependency?" suggestion in #2036 doesn't straightforwardly apply to this package the way it might to hono.
Net: not urgent, but it can't be dismissed as examples-only either, and it will keep appearing in every consumer's Security tab until the range moves.
Reporter context
Surfaced as a Dependabot alert on dathere/qsv, whose MCP server uses StdioServerTransport exclusively — so we are not affected in practice and have deliberately not added an overrides workaround, since forcing a major bump of the adapter carries more risk for us than the unreachable vulnerability does. We are waiting on the upstream range instead. Filing so the constraint is visible, as it can't be resolved consumer-side as cleanly as #2036 / #2042 can.
Related: #2036, #2042.
Summary
@modelcontextprotocol/sdk@1.29.0depends on@hono/node-server: ^1.19.9. GHSA-frvp-7c67-39w9 affects all< 2.0.5, and there is no patched1.xline — so no version satisfying^1.19.9is unaffected, and the range itself has to widen to clear the advisory.This is what makes it different from #2036 and #2042, which cover
honoandfast-uri. Both of those note that the SDK's existing semver ranges already permit the fixed versions, so a lockfile refresh resolves them. That is not true here:1.x → 2.xis a major bump, so consumers cannot fix it on their own without anoverridesentry that forces a major version of an adapter the SDK was written against.serve-staticon Windows via encoded backslash (%5C)< 2.0.52.0.5(current latest:2.0.11)^1.19.9— cannot resolve to a patched versionAsk
Widen
@hono/node-serverto^2.0.5(or otherwise allow the 2.x line), so consumers can resolve to a patched version.Reachability (FYI for triage — argues this is low urgency, but not zero)
Worth separating the load graph from the vulnerable surface, since they point in different directions:
serveStaticis never referenced anywhere in the SDK.grep -rn "serveStatic" dist/returns nothing in1.29.0. The vulnerable code path needs a running static file server, so no SDK consumer should be exploitable through the SDK itself. That is the main reason we are filing this rather than forcing an override downstream.But the package is on a genuine runtime path, not just examples. Issue #2036 observes that
honois loaded only bydist/esm/examples/server/honoWebStandardStreamableHttp.js. That holds forhonoitself, but@hono/node-serveris different:So it loads for anyone using
StreamableHTTPServerTransport— outside theexamples/tree. OnlygetRequestListeneris imported, which is not the affected surface, but it does mean the "could this be apeerDependency/optionalDependency?" suggestion in #2036 doesn't straightforwardly apply to this package the way it might tohono.Net: not urgent, but it can't be dismissed as examples-only either, and it will keep appearing in every consumer's Security tab until the range moves.
Reporter context
Surfaced as a Dependabot alert on dathere/qsv, whose MCP server uses
StdioServerTransportexclusively — so we are not affected in practice and have deliberately not added anoverridesworkaround, since forcing a major bump of the adapter carries more risk for us than the unreachable vulnerability does. We are waiting on the upstream range instead. Filing so the constraint is visible, as it can't be resolved consumer-side as cleanly as #2036 / #2042 can.Related: #2036, #2042.