CVE-2023-50710
mediumpriority · track · 17EPSS 0.006 · 50 %ileEUUSEPSS · scored 2026-10-27
Hono is a web framework written in TypeScript. Prior to version 3.11.7, clients may override named path parameter values from previous requests if the application is using TrieRouter. So, there is a risk that a privileged user may use unintended parameters when deleting REST API resources. TrieRouter is used either explicitly or when the application matches a pattern that is not supported by the default RegExpRouter. Version 3.11.7 includes the change to fix this issue. As a workaround, avoid using TrieRouter directly.
cvss
Technical severity, 0–10. One row per scoring source.
base score 0–10 · higher = more severe · hover a vector to decode
weaknesses
The CWE weakness classes this flaw belongs to.
affected products (3)
Products and version ranges known to be affected.
advisories (1)
Vendor and ecosystem advisories describing this.
- GHSA-f6gv-hh8j-q8vqNamed path parameters can be overridden in TrieRouter2023-12-15ghsa · osvUS
### Impact The clients may override named path parameter values from previous requests if the application is using TrieRouter. So, there is a risk that a privileged user may use unintended parameters when deleting REST API resources. TrieRouter is used either explicitly or when the application matches a pattern that is not supported by the default RegExpRouter. The code to reproduce it. The server side application: ```ts import { Hono } from 'hono' import { TrieRouter } from 'hono/router/trie-router' const wait = async (ms: number) => { return new Promise((resolve) => { setTimeout(resolve, ms) }) } const app = new Hono({ router: new TrieRouter() }) app.use('*', async (c, next) => { await wait(Math.random() * 200) return next() }) app.get('/modules/:id/versions/:version', async (c) => { const id = c.req.param('id') const version = c.req.param('version') console.log('path', c.req.path) console.log('version', version) return c.json({ id, version, }) }) export default app ``` The client code which makes requests to the server application: ```ts const examples = [ 'http://localhost:8787/modules/first/versions/first', 'http://localhost:8787/modules/second/versions/second', 'http://localhost:8787/modules/third/versions/third', ] const test = () => { for (const example of examples) { fetch(example) .then((response) => response.json()) .then((data) => { const splitted = example.split('/') const expected = splitted[splitted.length - 1] if (expected !== data.version) { console.error(`Error: exprected ${expected} but got ${data.version} - url was ${example}`) } }) } } test() ``` The results: ```txt Error: exprected second but got third - url was http://localhost:8787/modules/second/versions/second Error: exprected first but got third - url was http://localhost:8787/modules/first/versions/first ``` ### Patches "v3.11.7" includes the change to fix this issue. ### Workarounds Don't use TrieRouter directly. ```ts // DON'T USE TrieRouter import { TrieRouter } from 'hono/router/trie-router' const app = new Hono({ router: new TrieRouter() }) ``` ### References Router options on the Hono website: https://hono.dev/api/hono#router-option
also known as (3)
Other names and identifiers for this entity.
sources
Which sources assert this record, and when.
references (10)
External citations — patches, advisories, analysis.
- https://cxsecurity.com/cveshow/CVE-2023-50710/cnnvd
- https://github.com/honojs/hono/commit/8e2b6b08518998783f66d31db4f21b1b1eecc4c8cnnvd
- https://github.com/honojs/hono/releases/tag/v3.11.7cnnvd
- https://github.com/honojs/hono/security/advisories/GHSA-f6gv-hh8j-q8vqcnnvd
- https://github.com/honojs/hono/commit/8e2b6b08518998783f66d31db4f21b1b1eecc4c8enisa_euvd
- https://github.com/honojs/hono/releases/tag/v3.11.7enisa_euvd
- https://github.com/honojs/hono/security/advisories/GHSA-f6gv-hh8j-q8vqenisa_euvd
- https://github.com/honojs/hono/commit/8e2b6b08518998783f66d31db4f21b1b1eecc4c8Patchnvd
Attackers weaponise vulnerabilities like this against internet-exposed services. See what is exposed on your perimeter with a free passive scan.
Free scan