Skip to main content

@hono/node-server EUVDEUVD-2026-112470

| CVE-2026-118663 MEDIUM
Double Decoding of the Same Data (CWE-174)
2026-10-28 GitHub_M GHSA-rmxm-3fg6-px4f
5.3
CVSS 3.1 · Vendor: GitHub_M
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Identify app using serveStatic with middleware on a static sub-prefix
  2. Delivery
    Send request with malformed percent-encoding (e.g. %61dmin)
  3. Exploit
    Router matches encoded path, auth middleware skipped
  4. Execution
    serveStatic second-decodes and resolves protected file
  5. Impact
    Read protected static file unauthenticated

Vulnerability Assessment

Weakness
CWE
Exploitation Conditions

Exploitation requires an application that uses @hono/node-server's serveStatic (versions >= 1.19.10 and < 2.1.3) AND mounts route middleware - such as an authentication check - on only a sub-portion of the directory served by serveStatic (e.g. authMiddleware on /static/admin/* while serveStatic covers /static/*). The attacker sends a path containing a malformed percent-encoded sequence so Hono's single pre-routing decode leaves part of the path encoded (router matches the encoded form and skips the sub-prefix middleware) while serveStatic's second decode resolves the real file. Limiting factors: the target file must already reside inside the configured static root (no traversal outside it, so confidentiality impact is confined to files already served statically); applications that serve only public files, or that apply access control on the same route pattern as serveStatic, are not affected; and in the fixed version the default behavior rejects routed paths still containing '%' unless allowPercentInPath:true is explicitly set.

Impact

This is a genuine but bounded issue, best characterized as medium-real-risk rather than a high-urgency emergency. The CVSS 3.1 base score is 5.3 (Medium) with vector AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N - network-reachable, low complexity, no privileges or user interaction, but confidentiality-only and Low. No EPSS probability was supplied in the input and the CVE is not listed in CISA KEV, so there is no signal of active or widespread exploitation. The supplied references are the GHSA advisory, the fix commit, and the 2.1.3 release - i.e. vendor-confirmed disclosure and patch, not a standalone weaponized exploit; the fix commit does include regression tests that demonstrate the exact bypass payload format (e.g. /static/%61dmin/secret.txt and /static/%%36%31dmin/secret.txt), so the triggering technique is public even though no independent working exploit was provided. The vuln.today priority is this_month, consistent with a real-but-not-critical fix. The most important nuance the raw CVSS hides: impact only materializes in a specific deployment pattern (middleware, such as an auth check, mounted on a sub-prefix of the directory served by serveStatic); applications serving only public files are unaffected, and no traversal outside the static root is possible. Treat PR:N as accurate for the request itself, but note the real-world blast radius is gated by configuration rather than by the base metrics.

Exploit ScenarioDerived

An application mounts serveStatic on /static/* and separately mounts an authentication middleware on a protected subtree such as /static/admin/*. An unauthenticated attacker requests the protected file using a malformed percent-encoded sequence (for example /static/%61dmin/secret.txt or /static/%%36%31dmin/secret.txt) so the router matches the still-encoded path and the auth middleware never runs, while serveStatic's second decode resolves and returns the real protected file from inside the static root. The fix commit's regression tests publicly demonstrate this payload shape, though no separate working exploit was provided in the input.

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.9).
Patch available

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – Oct 28, 2026

In @hono/node-server 1.19.10 through 2.1.2, the serveStatic middleware decodes the request path a second time after Hono has already decoded it for routing, letting remote unauthenticated attackers (CVSS:3.1/AV:N/AC:L/PR:N/UI:N) fetch files under a static prefix whose route middleware - typically an authentication check - never runs, yielding low confidentiality impact confined to the configured static root. Only deployments that mount middleware on a sub-portion of the directory served by serveStatic (for example auth on /static/admin/* while serveStatic covers /static/*) are exposed; applications serving purely public files are unaffected. No public exploit code and no CISA KEV listing were identified at time of analysis, and the vendor-released patch is version 2.1.3, which by default skips routed paths that still contain '%' unless allowPercentInPath:true is explicitly set.

RemediationAI

Vendor-released patch: upgrade @hono/node-server to 2.1.3 or later, per the release at https://github.com/honojs/node-server/releases/tag/v2.1.3 and advisory GHSA-rmxm-3fg6-px4f. After the upgrade the secure default is that serveStatic skips any routed path still containing '%' (returning not-found / falling through to the next handler), so applications whose static file names legitimately contain percent signs must opt back in with allowPercentInPath: true - and the vendor warns that doing so may reintroduce the bypass for sub-prefix restrictions; in that case apply access control to the same route pattern as serveStatic (for example app.use('/static/*', authMiddleware) placed before app.use('/static/*', serveStatic({ root: './static', allowPercentInPath: true }))). If upgrading is not immediately possible, the compensating control implied by the fix is to apply authentication/authorization middleware on the full route pattern passed to serveStatic rather than on a narrower sub-prefix, which closes the mismatch between the routed path and the resolved file path at the cost of protecting files that would otherwise be public; the trade-off of the upstream default is that valid percent-encoded filenames under the static root stop being served until allowPercentInPath is set.

Affected VersionsENISA

node-server > = 1.19.10, < 2.1.3

Affected Packages

npm @hono/node-server fix: 2.1.3
euvd node_server fix: 2.1.3

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 2 packages in npm, euvd

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

CWE-174 (double decoding) is the root cause: Hono's router performs one decode of the request path before matching, and serveStatic then decoded the path again when resolving the file on disk. A malformed percent-encoded sequence (for example /static/%%36%31dmin/secret.txt) survives the first decode partially encoded, so the router matches the encoded form and evaluates middleware mounted on the literal protected prefix as non-matching, while the second decode resolves the real directory and the file is served. The vendor's fix in commits to src/serve-static.ts throws when the routed path still contains '%' unless the new allowPercentInPath option is enabled, and the accompanying tests cover encoded lookalikes such as /static/%2Fadmin/secret.txt and /static/%%36%31dmin/secret.txt. Resolution stays within the configured static root - this is not a traversal outside it - so confidentiality impact is limited to files already published by serveStatic. The GitHub advisory (GHSA-rmxm-3fg6-px4f) is the authoritative source; the affected package is the npm scope cpe:2.3:a:honojs:node-server, i.e. the Node.js adaptor for Hono, not the Hono core framework itself.

Know when Node.js gets its next vulnerability

  • Watch products and get an email when something new is published
  • Check this CVE against your own stack and servers
  • Exploit and PoC references, threat intelligence from 22 sources

No credit card · 7-day full trial

Severity by source

Vendor (GitHub_M) PRIMARY 5.3 MEDIUM
AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N
vuln.today AI 5.3 MEDIUM

Remote unauthenticated request with a simple malformed-encoding payload (AV:N/AC:L/PR:N/UI:N); only confidentiality of files already inside the static root is affected (C:L, I:N, A:N, S:U).

3.1 AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N
4.0 AV:N/AC:L/AT:N/PR:N/UI:N/VC:L/VI:N/VA:N/SC:N/SI:N/SA:N

Primary rating from Vendor (GitHub_M).

CVSS VectorVendor: GitHub_M

Attack Vector
Network
Attack Complexity
Low
Privileges Required
None
User Interaction
None
Scope
Unchanged
Confidentiality
Low
Integrity
None
Availability
None

Lifecycle Timeline

1
Patch available
Oct 28, 2026 - 21:19 EUVD

DescriptionCVE.org

@hono/node-server allows running the Hono application on Node.js. From 1.19.10 until 2.1.3, serveStatic decodes a request path a second time after Hono has already decoded it for routing, so a malformed percent-encoded sequence can make route middleware evaluate an encoded path while static file resolution uses a different directory. An unauthenticated attacker can bypass middleware mounted on a protected static prefix and read a file inside the configured static root, although the flaw does not permit traversal outside that root. This issue is fixed in version 2.1.3.

Blast Radius

ecosystem impact
† from your stack dependencies † transitive graph · vuln.today resolves 4-path depth
  • 5 npm packages depend on @hono/node-server (4 direct, 1 indirect)

Ecosystem-wide dependent count for version 1.19.10.

Threat Intelligence Overview

Prevalence
Medium
popular Hono Node.js adapter, meaningful but not universal npm adoption
Threat Intel
1
1 source
Data Quality
4 sources
Confidence: Medium

How this decision was reached

The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.

SignalValue
Severity MEDIUM
CISA KEV No
Public POC No
EPSS N/A
Patch available Yes
Active threat No
Deciding rule
MEDIUM severity (CVSS 4.0-6.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Scheduled
Exploitation· derived
None
System Exposure· derived
Open
Automatable· derived
Yes
Human Impact· derived
Medium

Priority Score

26
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +26
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Authentication bypass attacks exploit flaws in the verification mechanisms that control access to systems and applications.

CVE-2025-68613 HIGH POC
8.8 Dec 19

Remote code execution in n8n's workflow expression evaluation system allows an authenticated user with workflow creation

CVE-2024-41713 CRITICAL POC
9.1 Oct 21

A vulnerability in the NuPoint Unified Messaging (NPM) component of Mitel MiCollab through 9.8 SP1 FP2 (9.8.1.201) could

CVE-2024-55591 CRITICAL POC
9.8 Jan 14

FortiOS and FortiProxy contain an authentication bypass via the Node.js websocket module allowing unauthenticated remote

CVE-2023-44487 HIGH POC
7.5 Oct 10

Denial of service against HTTP/2 server implementations allows remote unauthenticated attackers to exhaust server resour

CVE-2014-7205 CRITICAL POC
10.0 Oct 08

Eval injection vulnerability in the internals.batch function in lib/batch.js in the bassmaster plugin before 1.5.2 for t

CVE-2025-59528 CRITICAL POC
10.0 Sep 22

Flowise version 3.0.5 contains a remote code execution vulnerability in the CustomMCP node. The mcpServerConfig paramete

CVE-2017-14849 HIGH POC
7.5 Sep 28

Node.js 8.5.0 before 8.6.0 allows remote attackers to access unintended files, because a change to ".." handling was inc

CVE-2017-5941 CRITICAL POC
9.8 Feb 09

An issue was discovered in the node-serialize package 0.0.4 for Node.js. Rated critical severity (CVSS 9.8), this vulner

CVE-2014-0224 HIGH POC
7.4 Jun 05

OpenSSL before 0.9.8za, 1.0.0 before 1.0.0m, and 1.0.1 before 1.0.1h does not properly restrict processing of ChangeCiph

CVE-2014-3744 HIGH POC
7.5 Oct 23

Directory traversal vulnerability in the st module before 0.2.5 for Node.js allows remote attackers to read arbitrary fi

CVE-2014-9566 HIGH POC
7.5 Mar 10

Multiple SQL injection vulnerabilities in the Manage Accounts page in the AccountManagement.asmx service in the Solarwin

CVE-2013-4660 MEDIUM POC
6.8 Jun 28

The JS-YAML module before 2.0.5 for Node.js parses input without properly considering the unsafe !!js/function tag, whic

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy