{"schema":"threatline.record/2","record":{"id":"CVE-2026-93981","aliases":["GHSA-hxh3-vqpv-xpqv"],"summary":"hono/jsx renders plain strings unescaped in boundary components, leading to XSS","details":"### Summary\n\n`hono/jsx` does not HTML-escape a plain string placed directly as a child or `fallback` of `Suspense` or `ErrorBoundary`, as the only child of a `Context.Provider`, or as the root value of `renderToString()` / `renderToReadableStream()` from `hono/jsx/dom/server`. Such a string is emitted as markup instead of text.\n\n### Details\n\nThese paths stringify their input and treat the result as already-escaped HTML, so a plain string passes through unchanged. Notable cases:\n\n- `Suspense`: a string child, or a string `fallback` while a child suspends. With streaming, the fallback reaches the browser in the initial chunk.\n- `ErrorBoundary`: a string child alongside an asynchronous sibling. The all-synchronous case was fixed in 4.11.7 (GHSA-9r54-q6cx-xmh5).\n- `Context.Provider`: a single string child. Multiple children are escaped.\n- `hono/jsx/dom/server`: a string, or an array containing strings, passed as the root.\n\nA lone `{children}` forwarded by a wrapper component is enough to reach these paths. Strings wrapped in an element, values from `raw()` or the `html` helper, and client-side rendering with `hono/jsx/dom` are not affected.\n\n### Impact\n\nAn attacker who controls a string rendered in an affected position can inject arbitrary HTML into the server-rendered page, leading to cross-site scripting under the application's origin.\n\nThis issue affects applications that render untrusted strings directly in one of the positions above during server-side rendering.","categories":["Libraries & packages"],"product":"hono","vendor":"honojs","ecosystem":"npm","affected_ranges":[{"source":"GitHub Advisory Database","source_url":"https://github.com/advisories/GHSA-hxh3-vqpv-xpqv","source_modified_at":"2026-09-30T23:46:17Z","fetched_at":"2026-10-23T18:42:43.628194Z","package":{"ecosystem":"npm","name":"hono"},"range":"< 4.13.7"},{"source":"CVE List","source_url":"https://www.cve.org/CVERecord?id=CVE-2026-93981","source_modified_at":"2026-09-21T20:47:06.182Z","fetched_at":"2026-10-23T18:45:31.882637Z","product":"hono","vendor":"honojs","versions":[{"version":"0","status":"affected","versionType":"semver","lessThan":"4.13.7"},{"version":"4.13.7","status":"unaffected","versionType":"semver"}],"defaultStatus":"unaffected"},{"source":"OSV","source_url":"https://osv.dev/vulnerability/GHSA-hxh3-vqpv-xpqv","source_modified_at":"2026-10-01T00:00:05.750907953Z","fetched_at":"2026-10-23T18:45:31.882637Z","package":{"name":"hono","ecosystem":"npm","purl":"pkg:npm/hono"},"ranges":[{"type":"SEMVER","events":[{"introduced":"0"},{"fixed":"4.13.7"}]}],"versions":[]}],"fixed_versions":[{"source":"GitHub Advisory Database","source_url":"https://github.com/advisories/GHSA-hxh3-vqpv-xpqv","source_modified_at":"2026-09-30T23:46:17Z","fetched_at":"2026-10-23T18:42:43.628194Z","package":{"ecosystem":"npm","name":"hono"},"version":"4.13.7"},{"source":"CVE List","source_url":"https://www.cve.org/CVERecord?id=CVE-2026-93981","source_modified_at":"2026-09-21T20:47:06.182Z","fetched_at":"2026-10-23T18:45:31.882637Z","package":{"name":"hono","ecosystem":null},"version":"4.13.7","basis":"first unaffected version stated in the CVE record"},{"source":"OSV","source_url":"https://osv.dev/vulnerability/GHSA-hxh3-vqpv-xpqv","source_modified_at":"2026-10-01T00:00:05.750907953Z","fetched_at":"2026-10-23T18:45:31.882637Z","package":{"name":"hono","ecosystem":"npm","purl":"pkg:npm/hono"},"version":"4.13.7"}],"cvss":4.7,"severity":"Medium","kev":{"listed":false},"epss":{"probability":0.00227,"percentile":0.1277,"score_date":"2026-10-23"},"published_at":"2026-09-19T11:53:34.294Z","modified_at":"2026-10-01T00:00:05.750907953Z","provenance":[{"source":"GitHub Advisory Database","url":"https://github.com/advisories/GHSA-hxh3-vqpv-xpqv","fetched_at":"2026-10-23T18:42:43.628194Z","source_modified_at":"2026-09-30T23:46:17Z"},{"source":"CVE List","url":"https://www.cve.org/CVERecord?id=CVE-2026-93981","fetched_at":"2026-10-23T18:45:31.882637Z","source_modified_at":"2026-09-21T20:47:06.182Z"},{"source":"OSV","url":"https://osv.dev/vulnerability/GHSA-hxh3-vqpv-xpqv","fetched_at":"2026-10-23T18:45:31.882637Z","source_modified_at":"2026-10-01T00:00:05.750907953Z"},{"source":"EPSS","url":"https://api.first.org/data/v1/epss?cve=CVE-2026-93981","fetched_at":"2026-10-23T18:42:43.628194Z","source_modified_at":"2026-10-23"}],"sources":["GitHub Advisory Database","CVE List","OSV","EPSS"],"references":[{"source":"CVE List","url":"https://github.com/honojs/hono/security/advisories/GHSA-hxh3-vqpv-xpqv","tags":["vendor-advisory"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2026-93981","source":"GitHub Advisory Database"},{"url":"https://github.com/honojs/hono/commit/2b8ed402cdab6dfc5e829b480806dcd8db94161e","source":"GitHub Advisory Database"},{"url":"https://github.com/honojs/hono/releases/tag/v4.13.7","source":"GitHub Advisory Database"},{"source":"CVE List","url":"https://www.vulncheck.com/advisories/hono-jsx-before-4.13.7-cross-site-scripting-via-unescaped-strings","tags":["third-party-advisory"]},{"url":"https://github.com/advisories/GHSA-hxh3-vqpv-xpqv","source":"GitHub Advisory Database"}],"locations":[],"motoko_assessment":{"status":"requires_architecture_review","automatic_remediation":false},"cve_state":"PUBLISHED","ssvc":{"exploitation":"none","automatable":"no","technical_impact":"partial","assessed_at":"2026-09-21T16:22:56.367930Z"},"classification":{"method":"product-first software-layer rules","rules_version":"2.1","matched_on":"ecosystem","confidence":"heuristic","reviewed":false},"change_timestamp":"2026-10-01T00:00:05.750907953Z","content_hash":"48dcae7c76663e711c29dc7ee9989f5a9f2290e2872e88b27a55945dad7480d4"}}
