Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
ReconIdentify public upgradeWebSocket route
-
DeliverySend HTTP Upgrade with malformed Sec-WebSocket-Key
-
Exploitws.handleUpgrade rejects handshake without emitting connection event
-
InstallIncomingMessage and pending Promise retained in waiterMap
-
C2Repeat flood at high rate
-
ExecuteHeap memory exhausted
-
ImpactService unavailable
Vulnerability Assessment
| Weakness |
CWE
ASVS 5.0
V15 - Secure Coding and Architecture Resource cleanup, leak prevention
|
| Exploitation Conditions | The vulnerable code path is reached only when all of the following are true: (1) the application uses @hono/node-server version 2.0.0-2.0.9; (2) at least one route is defined with the upgradeWebSocket helper; and (3) that route is reachable without prior authentication middleware rejecting the request. The trigger is an HTTP upgrade request with a missing or malformed Sec-WebSocket-Key header - the malformed variant bypasses proxy-level presence checks. Exploitation is limited by the need to sustain a request flood to achieve meaningful memory pressure; a single request leaks only one entry and one Promise, so isolated requests cause negligible impact. Services that place authentication middleware before the WebSocket route, or that deploy rate-limiting at an upstream proxy performing WebSocket header validation, significantly raise the bar for exploitation. |
| Impact | The CVSS 3.1 vector AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L scores 5.3 (Medium), reflecting that exploitation is trivially accessible from the network with no authentication and no complexity, but the availability impact is rated Low rather than High - consistent with the attack requiring sustained flooding to exhaust memory rather than causing immediate service failure. No EPSS data was provided in the input. KEV status is absent (not in CISA KEV at time of analysis), and no independent POC exploit code has been published beyond the GHSA advisory and associated test case. The combination of PR:N and AV:N means any instance exposing a WebSocket route publicly is reachable by anyone on the internet, making the effective attack surface broad for affected deployments. However, the absence of active exploitation, the low-to-medium severity rating, and the requirement to sustain a request flood to achieve impact keeps real-world urgency moderate. The A:L rating may understate risk for resource-constrained environments where a modest sustained flood could trigger OOM faster than anticipated. |
| Exploit ScenarioDerived | An attacker targeting a Node.js service using @hono/node-server 2.0.0-2.0.9 with a public WebSocket endpoint repeatedly sends HTTP upgrade requests containing a syntactically invalid Sec-WebSocket-Key value (e.g., a string that does not base64-decode to 16 bytes). Each request causes the server to retain an IncomingMessage object and a pending Promise in memory with no cleanup; at sufficient request rates, heap memory grows unboundedly until the Node.js process is killed by the OS OOM killer or crashes, denying service to all clients. No authentication is required and no prior reconnaissance beyond identifying the WebSocket route path is needed. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Aug 13, 2026
Unbounded memory growth in @hono/node-server 2.0.0-2.0.9 allows unauthenticated remote attackers to exhaust server memory and cause denial of service by flooding any public WebSocket upgrade route with requests bearing a missing or malformed Sec-WebSocket-Key header. The root cause is a missing cleanup path in src/websocket.ts: when ws.handleUpgrade rejects the handshake, no connection event fires, leaving the IncomingMessage permanently retained in waiterMap and the waitForWebSocket promise perpetually pending. No public exploit or active exploitation (CISA KEV) has been identified at time of analysis; the fix is available in v2.0.10.
RemediationAI
The primary remediation is to upgrade @hono/node-server to version 2.0.10 or later, which introduces a reject path and a socket close listener that reliably clean up waiterMap entries for aborted handshakes (commit 3a21938c). The release is available at https://github.com/honojs/node-server/releases/tag/v2.0.10. If an immediate upgrade is not possible, a compensating control is to place authentication or rate-limiting middleware on all upgradeWebSocket routes so that unauthenticated flood traffic is rejected before reaching the vulnerable upgrade path - note that the GHSA advisory explicitly states that a proxy which only checks for header presence (without validating key format) does NOT mitigate the malformed-key variant, so middleware must perform protocol-level validation or block the route entirely. Rate limiting at the reverse proxy or load balancer layer (e.g., nginx limit_req or an API gateway quota) reduces flooding effectiveness but does not eliminate the per-request leak.
Affected VersionsENISA
Affected Packages
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
The @hono/node-server package (CPE: cpe:2.3:a:honojs:node-server:*:*:*:*:*:*:*:*) is the Node.js runtime adapter for the Hono web framework, distributed via npm. Its WebSocket support wraps the 'ws' library: when a client sends an HTTP upgrade request, setupWebSocket stores the request's IncomingMessage in an internal waiterMap keyed to the request object and returns a Promise that resolves only when a 'connection' event fires on the underlying ws server. CWE-401 (Missing Release of Memory after Effective Lifetime) manifests because the code prior to v2.0.10 tracked only a resolve callback and cleaned up only on successful handshake or route-guard rejection - the third path, handshake abortion by ws due to a bad Sec-WebSocket-Key, emitted no event the adapter listened to, so neither the map entry nor the pending Promise were ever released. The commit diff shows the fix adds a reject callback to the waiter map entry, a rejectWaiter helper, and a socket 'close' event listener to trigger cleanup on abnormal termination.
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
AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L
Network-reachable pre-auth route, no complexity or interaction; availability only, limited per-request impact requires sustained flood.
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
1DescriptionCVE.org
@hono/node-server allows running the Hono application on Node.js. From 2.0.0 until 2.0.10, a WebSocket upgrade request to an upgradeWebSocket route with a missing or malformed Sec-WebSocket-Key header causes src/websocket.ts to retain the request's IncomingMessage in waiterMap and leave waitForWebSocket pending because ws.handleUpgrade emits no connection event. The aborted handshake therefore has no cleanup path, allowing an unauthenticated attacker to flood a public route, cause unbounded memory growth, and eventually make the service unavailable. This issue is fixed in version 2.0.10.
Blast Radius
ecosystem impact- 7 npm packages depend on @hono/node-server (6 direct, 1 indirect)
Ecosystem-wide dependent count for version 2.0.0.
Threat Intelligence Overview
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.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.
Remote code execution in n8n's workflow expression evaluation system allows an authenticated user with workflow creation
A vulnerability in the NuPoint Unified Messaging (NPM) component of Mitel MiCollab through 9.8 SP1 FP2 (9.8.1.201) could
FortiOS and FortiProxy contain an authentication bypass via the Node.js websocket module allowing unauthenticated remote
Denial of service against HTTP/2 server implementations allows remote unauthenticated attackers to exhaust server resour
Eval injection vulnerability in the internals.batch function in lib/batch.js in the bassmaster plugin before 1.5.2 for t
Flowise version 3.0.5 contains a remote code execution vulnerability in the CustomMCP node. The mcpServerConfig paramete
Node.js 8.5.0 before 8.6.0 allows remote attackers to access unintended files, because a change to ".." handling was inc
An issue was discovered in the node-serialize package 0.0.4 for Node.js. Rated critical severity (CVSS 9.8), this vulner
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
Directory traversal vulnerability in the st module before 0.2.5 for Node.js allows remote attackers to read arbitrary fi
Multiple SQL injection vulnerabilities in the Manage Accounts page in the AccountManagement.asmx service in the Solarwin
The JS-YAML module before 2.0.5 for Node.js parses input without properly considering the unsafe !!js/function tag, whic
EUVD-2026-58180
NVD
CVE.org
EPSS
Vulnrichment
GitHub
VulDB
Exploit-DB