FE-1324: Override @hono/node-server to 2.0.10 to clear the serve-static path traversal advisory - #410
Conversation
…ic path traversal advisory brunch resolved @hono/node-server 1.19.14 transitively via @modelcontextprotocol/sdk (^1.19.9). That version is flagged by GHSA-frvp-7c67-39w9 (path traversal in serve-static on Windows via an encoded backslash). Upstream backported the fix to 1.19.15 and latest-1 is now 1.19.17, but the advisory range is still <2.0.5 (re-verified 2026-08-06 against the GitHub advisory record and the npm bulk audit endpoint). An in-range 1.19.x bump therefore still fails the required Dependencies / Review check, so pin an overrides entry instead, matching the existing hono and ws pins. 2.0.10 rather than 2.0.5 because GHSA-9mqv-5hh9-4cgg covers >=2.0.0 <=2.0.9. Drop the override once upstream narrows the range.
PR SummaryMedium Risk Overview This closes GHSA-frvp-7c67-39w9 (serve-static path traversal on Windows). 2.0.10 is chosen so the override is also clear of the WebSocket DoS advisory that affects 2.0.0–2.0.9. The lockfile update is limited to swapping that package’s version, engine floor ( Reviewed by Cursor Bugbot for commit fbf3ed7. Bugbot is set up for automated code reviews on this repo. Configure here. |
Requested by Ciaran Morinan · Slack thread
Replaces #383. That PR bundled three security bumps; two of them (seroval 1.5.6 and postcss 8.5.25 / nanoid 3.3.17) have since landed independently on
mainvia #387 and #404, so@hono/node-serveris all that was left. This is that one fix, rebased onto currentmain, with nothing else in it.Before
@modelcontextprotocol/sdkdeclares@hono/node-server: ^1.19.9, and the lockfile resolved that to 1.19.14. That version is covered by GHSA-frvp-7c67-39w9 — path traversal inserve-staticon Windows, where an encoded backslash (%5C) decodes to a Windows path separator and lets a request slip past prefix-mounted middleware. Moderate severity. No other open PR covers it (#408 bumpshono, the framework, which is a different package).After
A pinned
overridesentry forces 2.0.10, in the same style as the existinghonoandwspins:@hono/node-server1.19.14 is gone frompackage-lock.json— one entry, replaced in place, and no other package moved.@hono/node-serverWhy 2.0.10 and not a 1.19.x bump
This is the awkward part, and it hasn't improved since #383.
Upstream did backport the traversal fix into the 1.x line at 1.19.15, and
latest-1is now 1.19.17. So on the merits, an in-range bump to 1.19.17 would fix the bug without a major version change — much cleaner. I re-checked whether the advisory had caught up, on 2026-08-06:< 2.0.5, patched2.0.5. Last reviewed 2026-07-21.1.19.17as vulnerable, range<2.0.5.2.0.10comes back clean.The range has not been narrowed. Because
Dependencies / Reviewis a required status check here via the org-wide ruleset, a 1.19.17 lockfile would still be rejected by the gate — #383 tried exactly that and had to revert it. So the override stays until upstream fixes the range.Why 2.0.10 specifically, and not 2.0.5: GHSA-9mqv-5hh9-4cgg — unauthenticated memory-leak DoS via an aborted WebSocket handshake — covers
>= 2.0.0 <= 2.0.9. Worth being precise about this one: it does not affect the 1.19.14 we're on today, so it isn't a bug we currently have. It's a landmine in the escape route. Any override landing in 2.0.0–2.0.9 would trade the traversal advisory for a DoS advisory; 2.0.10 is the first version clean on both.Worth a reviewer's eye
This force-resolves a major version (1.x → 2.x) underneath
@modelcontextprotocol/sdk, which asked for^1.19.9. The peer requirementhono: ^4is still satisfied by our pinned 4.12.25, and the build passes, but a type-level pass is not the same as a runtime pass. A smoke test of MCP server functionality before merge is the thing I'd most want a second pair of eyes on.Follow-up
When upstream narrows GHSA-frvp-7c67-39w9 to admit the 1.19.x backport, delete this override and let
@modelcontextprotocol/sdkresolve in range again. Tracked on the Linear issue.Verification
npm run verify—checkandbuildpass.testhas 3 failures (sandbox-guard.test.ts×2,petrinaut-events.test.ts×1), all of which reproduce identically on unmodifiedmainin the same container; they are environment-sensitive (bwrap availability) and unrelated to this change.@hono/node-server1.19.14 removed, 2.0.10 added, nothing else touched.Linear: FE-1324