chore(deps): update dependency h3-next to v2.0.1-rc.15 [security]#1626
Open
renovate[bot] wants to merge 1 commit intomainfrom
Open
chore(deps): update dependency h3-next to v2.0.1-rc.15 [security]#1626renovate[bot] wants to merge 1 commit intomainfrom
renovate[bot] wants to merge 1 commit intomainfrom
Conversation
commit: |
OrbisK
reviewed
Mar 19, 2026
| "get-port-please": "^3.2.0", | ||
| "h3": "^1.15.5", | ||
| "h3-next": "npm:h3@2.0.1-rc.14", | ||
| "h3-next": "npm:h3@2.0.1-rc.15", |
Member
There was a problem hiding this comment.
Suggested change
| "h3-next": "npm:h3@2.0.1-rc.15", | |
| "h3-next": "npm:h3@^2.0.1-rc.15", |
is it possible to have ^ so that it is not pinned?
cc @danielroe
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR contains the following updates:
2.0.1-rc.14→2.0.1-rc.15GitHub Vulnerability Alerts
CVE-2026-33128
Summary
createEventStreamin h3 is vulnerable to Server-Sent Events (SSE) injection due to missing newline sanitization informatEventStreamMessage()andformatEventStreamComment(). An attacker who controls any part of an SSE message field (id,event,data, or comment) can inject arbitrary SSE events to connected clients.Details
The vulnerability exists in
src/utils/internal/event-stream.ts, lines 170-187:The SSE protocol (defined in the WHATWG HTML spec) uses newline characters (
\n) as field delimiters and double newlines (\n\n) as event separators.None of the fields (
id,event,data, comment) are sanitized for newline characters before being interpolated into the SSE wire format. If any field value contains\n, the SSE framing is broken, allowing an attacker to:event:,data:,id:, orretry:directives\n\nto terminate the current event and start a new oneretry: 1to force aggressive reconnection (DoS)id:to manipulate which events are replayed on reconnectionInjection via the
eventfieldThe browser's
EventSourceAPI parses these as two separate events: onemessageevent and oneadminevent.Injection via the
datafieldBefore exploit:

PoC
Vulnerable server (
sse-server.ts)A realistic chat/notification server that broadcasts user input via SSE:
Exploit
Raw wire format proving injection
The browser's
EventSourcefires this as anadminevent with dataALL_USERS_COMPROMISED— entirely controlled by the attacker.Proof:
Impact
An attacker who can influence any field of an SSE message (common in chat applications, notification systems, live dashboards, AI streaming responses, and collaborative tools) can inject arbitrary SSE events that all connected clients will process as legitimate.
Attack scenarios:
admin,system)retry: 1to force all clients to reconnect every 1msThis is a framework-level vulnerability, not a developer misconfiguration — the framework's API accepts arbitrary strings but does not enforce the SSE protocol's invariant that field values must not contain newlines.
GHSA-wr4h-v87w-p3r7
Summary
serveStatic()in h3 is vulnerable to path traversal via percent-encoded dot segments (%2e%2e), allowing an unauthenticated attacker to read arbitrary files outside the intended static directory on Node.js deployments.Details
The vulnerability exists in
src/utils/static.tsat line 86:On Node.js, h3 uses srvx's
FastURLclass to parse request URLs. Unlike the standard WHATWGURLparser,FastURLextracts the pathname via raw string slicing for performance — it does not normalize dot segments (./..) or resolve percent-encoded equivalents (%2e).This means a request to
/%2e%2e/will haveevent.url.pathnamereturn/%2e%2e/verbatim, whereas the standardURLparser would normalize it to/(resolving..upward).The
serveStatic()function then callsdecodeURI()on this raw pathname, which decodes%2eto., producing/../. The resulting path containing../traversal sequences is passed directly to the user-providedgetMeta()andgetContents()callbacks with no sanitization or traversal validation.When these callbacks perform filesystem operations (the intended and documented usage), the
../sequences resolve against the filesystem, escaping the static root directory.Before exploit:
Vulnerability chain
PoC
Vulnerable server (
server.ts)Exploit
Result
Proof:
Pwned by 0xkakashi
Impact
An unauthenticated remote attacker can read arbitrary files from the server's filesystem by sending a crafted HTTP request with
%2e%2e(percent-encoded..) path segments to any endpoint served byserveStatic().This affects any h3 v2.x application using
serveStatic()running on Node.js (where theFastURLfast path is used). Applications running on runtimes that provide a pre-parsedURLobject (e.g., Cloudflare Workers, Deno) may not be affected, asFastURL's raw string slicing is bypassed.Exploitable files include but are not limited to:
/etc/passwd,/etc/shadow(if readable).envfiles containing secrets, API keys, database credentialsCVE-2026-33131
H3 NodeRequestUrl bugs
Vulnerable pieces of code :
The middleware is super safe now with just a logger and a middleware to block internal access.
But there's one problems here at the logger .
When it log out the
event.urlorevent.url.hostnameorevent.url._urlIt will lead to trigger one specials method
The
NodeRequestUrlis extends fromFastURLso when we just access.urlor trying to dump all data of this class . This function will be triggered !!And as debugging , the
this.#urlis null and will reach to this code :Where is the
this.hrefcomes from ?Because the
this.#urlis still null sothis.#hrefis built up by :Yeah and this is untrusted data go . An attacker can pollute the
Hostheader from requests lead overwrite theevent.url.Middleware bypass
What can be done with overwriting the
event.url?Audit the code we can easily realize that the
routeHanlderis found before running any middlewaresSo the handleRoute is fixed but when checking with middleware it check with the spoofed one lead to MIDDLEWARE BYPASS
We have this poc :
This is really dangerous if some one just try to dump all the
event.urlor something that trigger_url()from class FastURL and need a fix immediately.Release Notes
h3js/h3 (h3-next)
v2.0.1-rc.15Compare Source
compare changes
🚀 Enhancements
defineJsonRpcHandleranddefineJsonRpcWebSocketHandler(#1180)🔥 Performance
🩹 Fixes
📖 Documentation
unjwtcommunity library entry (#1309)📦 Build
h3 docs(#1311)🏡 Chore
ESNextto tsconfig'slib(#1297)❤️ Contributors
Configuration
📅 Schedule: Branch creation - "" (UTC), Automerge - At any time (no schedule defined).
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
This PR was generated by Mend Renovate. View the repository job log.