Skip to main content
CVE-2026-126359VulnerabilityPublished

Hono: `css` helper does not escape a closing tag split between the template and an interpolated value, allowing HTML

Affects honoSource GCVE Database

0
Compare
Authoritative record:CVE-2026-126359· Low 3.4

Not known to be exploited · CVSS 3.4 Low : upgrade to 4.13.16 when convenient.

Data as of 13 Nov 2026, 00:06 UTC

CVSS 3.1 base score
3.4Low
How severe the flaw is on the 0–10 CVSS scale.

Thin evidence

One scorer or none
CVSS scores by source
CNA (GitHub_M)CVSS 3.13.4
Patch
Available – fixed in 4.13.16
CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:C/C:L/I:N/A:N

Exploitation evidence

  1. Disclosed: evidence found.

    CVE published 12 Nov 2026

  2. Detectable: no evidence on record.

    No public nuclei template indexed

  3. Weaponized: no evidence on record.

    No public exploit code indexed in Metasploit or Exploit-DB

  4. Exploited in the wild: no evidence on record.

    Not in CISA KEV and no source reports exploitation

  5. Observed by OffSeq Mirage: no evidence on record.

    No attack traffic recorded by OffSeq Mirage sensors

A missing step is not evidence of safety. Sources: cve.org (opens in a new tab), the Metasploit, Exploit-DB and nuclei-templates index as of 12 Nov 2026.

What to do

Upgrade hono to 4.13.16.

Affected software

ProductAffectedFixed in
npmhonoAffected
  • >=3.12.0 <4.13.16
Fixed in
  • 4.13.16

Check your own hosts for these packages with threat-finder (opens in a new tab), our free open-source scanner.

Description

### Summary The `css` helper in `hono/css` escapes a `/` that follows `<` inside an interpolated value so that a value cannot close the `<style>` element. The check only looks inside each value. When the text before a value ends with `<`, whether that is the template itself or an earlier interpolated value, and the next value starts with `/`, the `/` is not escaped and the combined output contains an unescaped closing tag. ### Details Interpolated string values are escaped one at a time before they are joined with the surrounding template text. The rule that neutralizes `</` therefore cannot see a `<` that belongs to the template. A template such as a `content` declaration that opens with a literal `<` and interpolates a string right after it produces a raw `</style>` when that string starts with `/style>`. During server-side rendering the `<Style />` element is closed early and the rest of the value is interpreted as HTML. This issue arises only when `<` is the last character before an interpolation in a `css` template, either written in the template or supplied by a preceding value, and the interpolated value is controlled by a client. ### Impact A client that controls such a value can inject HTML, including script, into the page rendered on the server. This may lead to: - Execution of attacker-controlled script in the browser of a user who views the page - Exposure of information available to that page This issue affects applications that interpolate untrusted strings into a `css` template immediately after a `<`, including two adjacent interpolations such as `${prefix}${name}` where both are untrusted. Other uses of the `css` helper are not affected. ### Workarounds Do not interpolate untrusted values into `css` templates, or make sure the text before an interpolated value does not end with `<`.

References

Community reviews

Loading reviews…