Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessAuthenticate as low-privilege user
-
DeliveryRequest page with memo()-wrapped context-reading component
-
ExploitServer populates memo cache with first user's rendered HTML
-
ExecutionSecond authenticated user sends request with equal props to same warm instance
-
PersistMemoization comparison passes on props alone, context skipped
-
ImpactSecond user receives first user's HTML containing PII or CSRF token
Vulnerability Assessment
| Weakness |
CWE
ASVS 5.0
V14 - Data Protection Exposure of data element to wrong session
|
| Exploitation Conditions | Exploitation requires four concurrent conditions: (1) the Hono application uses hono/jsx for server-side rendering; (2) at least one component is wrapped with memo() and reads per-user or per-request data via createContext()/useContext(), useRequestContext(), or getContext() rather than through props; (3) two requests with comparator-equal props hit the same warm server instance in sequence - the cache must be populated by the first render before the second request arrives; and (4) per the CVSS PR:L vector, the attacker must be an authenticated low-privilege user. Applications that use memo() only on purely static or prop-driven components are not affected. Client-side-only rendering is explicitly unaffected per the advisory. This is a non-default misconfiguration: the vulnerable pattern (memo() combined with ambient context reads) must be actively present in application code and is not introduced by Hono itself out of the box. |
| Impact | The official CVSS 3.1 score of 4.8 (Medium) accurately reflects realistic exploitation difficulty: AV:N confirms the attack surface is the network, but AC:H flags a timing dependency - both requests must reach the same warm server instance with matching props, which is not reliably controllable by an external attacker. PR:L indicates authenticated low-privilege users are the relevant exploitation context, and UI:R acknowledges that a second user interaction is required to populate the cache. Despite C:H confidentiality impact, the combination of AC:H and PR:L appropriately constrains the effective risk score. There is no CISA KEV listing and no public PoC identified, so real-world exploitation is likely opportunistic on dense shared-instance deployments (e.g., serverless platforms where hot instances serve many users) rather than targeted. EPSS data was not included in the provided intelligence, so probability-based exploitation likelihood cannot be quantified. The highest-risk scenario is a high-traffic application using memo() on authenticated UI components where many users share similar props - in that environment, cross-user leakage of CSRF tokens or PII is practically achievable without sophisticated attack tooling. |
| Exploit ScenarioDerived | User A authenticates and requests a page that renders a memo()-wrapped component displaying their username and a CSRF token, both sourced from hono/context-storage. User B subsequently sends a request to the same endpoint on the same warm server instance with props that match User A's (e.g., a shared layout component with identical static props). Because the memoized render from User A's request remains cached in the component closure, the server returns User A's HTML - including their CSRF token and profile data - to User B. No public PoC is available, but the vulnerability is mechanically straightforward on high-traffic deployments where warm instances serve multiple concurrent users. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Aug 07, 2026
Cross-user HTML disclosure in Hono's server-side rendering affects all applications using hono/jsx with memo()-wrapped components that read request-scoped context. On a warm server instance, when two requests share comparator-equal props, the memoized render from the first request is served to the second user verbatim - bypassing per-request context isolation for values obtained via createContext()/useContext(), useRequestContext(), or getContext(). This can leak another user's profile data, CSRF tokens embedded in HTML, or role-gated content. No public exploit or CISA KEV listing exists at time of analysis; the vendor released a confirmed fix in v4.12.34.
RemediationAI
Upgrade hono to version 4.12.34 or later (npm install hono@4.12.34 or npm install hono@latest). The patch is confirmed at https://github.com/honojs/hono/commit/0c45036d6b0ddf42ab2fa44639dc8710825d5c0f and the release is tagged at https://github.com/honojs/hono/releases/tag/v4.12.34. If an immediate upgrade is not feasible, the most effective compensating control is to refactor any memo()-wrapped components that read request-scoped context: move all per-request values (user identity, CSRF tokens, role data) into props explicitly, ensuring they participate in the memoization comparison - this carries the trade-off of increased prop-drilling and potentially more frequent re-renders. Alternatively, remove memo() entirely from any component that reads ambient context; this eliminates the caching benefit but fully restores correct per-request isolation with no functional side effects. Do not rely on rate limiting or request throttling as mitigation; the race condition can occur between legitimate concurrent users on any busy warm instance.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in npm
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
Hono is a lightweight, multi-runtime JavaScript web framework (CPE: cpe:2.3:a:honojs:hono:*:*:*:*:*:*:*:*) supporting Cloudflare Workers, Bun, Deno, and Node.js. The vulnerability is rooted in CWE-488 (Exposed Data Element to Wrong Session): the memo() higher-order component in hono/jsx was designed to cache SSR output for performance, storing the rendered JSX tree in a closure-captured variable (computed) and invalidating it only when props change via the propsAreEqual comparator. Request-scoped ambient context - provided by createContext()/useContext(), useRequestContext() from hono/jsx-renderer, and getContext() from hono/context-storage - is read during rendering but is invisible to the memoization key. The fix at commit 0c45036 removes SSR-path memoization entirely: the wrapper now calls component(props) on every render, eliminating the cross-request state retention while preserving the propsAreEqual hook solely for the DOM renderer.
Know when Hono 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:H/PR:L/UI:R/S:U/C:H/I:N/A:N
AC:H reflects the timing/instance race requirement; PR:L because exploitation occurs in authenticated user sessions; UI:R because a second user must make a request; C:H only as no writes or availability effects are possible.
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
1DescriptionCVE.org
Hono is a Web application framework that provides support for any JavaScript runtime. From 3.8.0 to 4.12.33, memo() from hono/jsx retains the result of a server side render and reuses it for later renders with comparator equal props, and request scoped values read inside the component take no part in that comparison, so a response can contain HTML rendered for another user's request. Components wrapped with memo() are compared by props alone; values read implicitly during rendering, such as JSX Context through createContext() and useContext(), useRequestContext() from hono/jsx-renderer, and getContext() from hono/context-storage, do not participate, and the retained result lives as long as the wrapped component, so it outlives the request that produced it. A user may receive a response containing HTML rendered for another user when both render the same memoized component with comparator equal props on the same warm instance, which may disclose another user's account or profile data, disclose request scoped secrets embedded in HTML such as CSRF tokens, or expose role specific content to users who should not receive it. This issue is fixed in version 4.12.34.
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
Cross-Site Request Forgery exploits the automatic credential inclusion behavior of web browsers.
Improper authorization in Hono's JWT Auth Middleware (hono/jwt in the npm package 'hono', versions 1.1.0 through 4.10.1)
The adapter @hono/node-server allows you to run your Hono application on Node.js. Rated high severity (CVSS 7.5), this v
Hono, a web framework, prior to version 4.6.5 is vulnerable to bypass of cross-site request forgery (CSRF) middleware by
Quadratic-complexity denial of service in Hono's `languageDetector` middleware (versions 4.12.0-4.12.33) allows unauthen
Path prefix stripping in Hono's app.mount() API exposes mounted sub-applications to incorrect routing due to a raw-vs-de
Hono is a Web application framework that provides support for any JavaScript runtime. Rated medium severity (CVSS 5.3),
@hono/node-server is an adapter that allows users to run Hono applications on Node.js. Rated medium severity (CVSS 5.3),
Hono is a Web application framework that provides support for any JavaScript runtime. Rated medium severity (CVSS 5.0),
Hono is a web framework written in TypeScript. Rated medium severity (CVSS 4.3), this vulnerability is remotely exploita
Hono is a Web application framework that provides support for any JavaScript runtime. [CVSS 8.2 HIGH]
Hono versions before 4.11.4 allow JWT algorithm confusion attacks through improper algorithm validation in the JWK/JWKS
Hono before version 4.11.4 contains a JWT algorithm confusion vulnerability in its JWK/JWKS verification middleware that
EUVD-2026-54580
GHSA-f23p-vx2j-j53r
NVD
CVE.org
EPSS
VulDB
Exploit-DB