Description
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.
Published: 2026-08-07
Score: 4.8 Medium
EPSS: n/a
KEV: No
Impact: n/a
Action: n/a
AI Analysis

Impact

The Hono web framework contains a flaw in its memo() function, which can hold a server‑side rendered output across separate user requests. When memoized components compare only on props but ignore request‑scoped data, a rendered response can be served to a different user than the one that originally produced it. This allows an attacker to read another user’s account or profile information, request‑scoped secrets (such as CSRF tokens) or role‑specific content, thereby breaching confidentiality.

Affected Systems

The vulnerability affects the Hono framework from version 3.8.0 through version 4.12.33. Any application built with these versions that uses memo() around components that read request context or other per‑user data is potentially impacted.

Risk and Exploitability

The issue receives a CVSS score of 4.8, indicating moderate risk. No EPSS score is available and the vulnerability is not yet listed in the CISA KEV catalog. Exploitation requires the application to render a memoized component with identical props for two different user contexts; an attacker can trigger such request patterns by submitting queries to the affected endpoint. Once executed, the attacker gains access to sensitive data belonging to another user. Because the flaw relates to data persistence rather than traditional code execution, the attack vector is limited to information disclosure through normal usage of the application.

Generated by OpenCVE AI on August 7, 2026 at 20:39 UTC.

Remediation

No vendor fix or workaround currently provided.

OpenCVE Recommended Actions

  • Upgrade the Hono framework to version 4.12.34 or later, which removes the memoization retention bug.
  • Review all code that uses memo() to ensure that request‑scoped values (context, CSRF tokens, user identities) are not stored in memoized components; refactor or remove memoization where such data is accessed.
  • Conduct a security review or static analysis to confirm that no protected data can be exposed through memoized components and verify that the patch has effectively eliminated the token leakage.

Generated by OpenCVE AI on August 7, 2026 at 20:39 UTC.

Tracking

Sign in to view the affected projects.

Advisories
Source ID Title
Github GHSA Github GHSA GHSA-f23p-vx2j-j53r Hono: `memo()` retains SSR output across requests, leading to cross-user data disclosure
History

Fri, 07 Aug 2026 19:00:00 +0000

Type Values Removed Values Added
Description 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.
Title Hono: `memo()` retains SSR output across requests, leading to cross-user data disclosure
Weaknesses CWE-488
References
Metrics cvssV3_1

{'score': 4.8, 'vector': 'CVSS:3.1/AV:N/AC:H/PR:L/UI:R/S:U/C:H/I:N/A:N'}


Subscriptions

No data.

cve-icon MITRE

Status: PUBLISHED

Assigner: GitHub_M

Published:

Updated: 2026-08-07T18:41:17.068Z

Reserved: 2026-08-07T18:26:53.523Z

Link: CVE-2026-71850

cve-icon Vulnrichment

No data.

cve-icon NVD

No data.

cve-icon Redhat

No data.

cve-icon OpenCVE Enrichment

Updated: 2026-08-07T20:45:03Z

Weaknesses
  • CWE-488

    Exposure of Data Element to Wrong Session