CVE-2026-41591

Marko: XSS via case-insensitive script/style closing tag bypass in runtime HTML escaping

Published May 8, 2026 CVSS 3.1 · 6.4 Medium EPSS < 1% KEV · Not listed
Description
Marko is a declarative, HTML-based language for building web apps. Prior to marko version 5.38.36 and prior to @marko/runtime-tags 6.0.164, when dynamic text is interpolated into a <script> or <style> tag the Marko runtime failed to prevent tag breakout when the closing tag used non-lowercase casing. An attacker able to place input inside a <script> or <style> block could break out of the tag with </SCRIPT>, </Style>, etc. and inject arbitrary HTML/JavaScript, resulting in cross-site scripting. This issue has been patched in marko version 5.38.36 and @marko/runtime-tags 6.0.164.

Analysis

AI-generated

Technical impact

Marko is a framework for building web applications using an HTML-based template language. The vulnerability resides in the runtime when dynamic content is interpolated into <script> or <style> tags. The escaping logic mistakenly permits a closing tag to be written with mixed or upper‑case letters, such as </SCRIPT> or </Style>, thereby breaking out of the intended tag and allowing the attacker to inject arbitrary HTML or JavaScript. This results in a classic reflected cross‑site scripting flaw that can execute code in the victim’s browser context.

Affected Systems

The issue affects installations of the Marko runtime library prior to version 5.38.36 and the @marko/runtime-tags package prior to version 6.0.164. Any web application that renders user data inside <script> or <style> elements without additional safeguards is vulnerable.

Risk and Exploitability

The CVSS score of 6.4 indicates a moderate severity, and the vulnerability has not been listed in the CISA KEV catalog. Because the flaw is triggered by normal user-supplied content placed inside script or style blocks, an attacker can exploit it via the application’s public interfaces without requiring elevated privileges. The lack of an EPSS score does not negate the risk; the path to exploitation is straightforward and does not rely on special conditions beyond the presence of vulnerable Marko templates.

Remediation

No solution or workaround provided in the CVE record.

OpenCVE Recommended Actions

  • Upgrade Marko to version 5.38.36 or later.
  • Upgrade @marko/runtime-tags to version 6.0.164 or later.
  • Implement a Content Security Policy that blocks inline script execution to mitigate potential XSS exposure while the patch is applied.

Generated by OpenCVE AI on May 8, 2026 at 19:03 UTC.

Tracking

Sign in to view the affected projects.

Advisories

Source ID Title
Github GHSA Github GHSA GHSA-x9fj-57fh-c8wq Marko: XSS via case-insensitive script/style closing tag bypass in runtime HTML escaping
History
Type Values Removed Values Added
First Time appeared Openjsf
Openjsf marko
Openjsf marko\/runtime-tags
CPEs cpe:2.3:a:openjsf:marko:*:*:*:*:*:node.js:*:*
cpe:2.3:a:openjsf:marko\/runtime-tags:*:*:*:*:*:node.js:*:*
Vendors & Products Openjsf
Openjsf marko
Openjsf marko\/runtime-tags
Type Values Removed Values Added
First Time appeared Marko-js
Marko-js marko
Vendors & Products Marko-js
Marko-js marko
Type Values Removed Values Added
Metrics ssvc

{'options': {'Automatable': 'no', 'Exploitation': 'poc', 'Technical Impact': 'partial'}, 'version': '2.0.3'}

Type Values Removed Values Added
Description Marko is a declarative, HTML-based language for building web apps. Prior to marko version 5.38.36 and prior to @marko/runtime-tags 6.0.164, when dynamic text is interpolated into a <script> or <style> tag the Marko runtime failed to prevent tag breakout when the closing tag used non-lowercase casing. An attacker able to place input inside a <script> or <style> block could break out of the tag with </SCRIPT>, </Style>, etc. and inject arbitrary HTML/JavaScript, resulting in cross-site scripting. This issue has been patched in marko version 5.38.36 and @marko/runtime-tags 6.0.164.
Title Marko: XSS via case-insensitive script/style closing tag bypass in runtime HTML escaping
Weaknesses CWE-79
References
Metrics cvssV3_1

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

Weaknesses
  • CWE-79

    Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting')

Sources

Status
PUBLISHED
Assigner
GitHub_M
Published
Updated
May 8, 2026, 9:26 PM
Reserved
Apr 21, 2026, 2:15 PM
Status
Analyzed
Published
May 8, 2026, 4:16 PM
Modified
Aug 26, 2026, 7:16 PM