Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessSubmit encoded payload inside <svg><style>
-
Deliverylazy_html parses, decoding char references
-
Exploitallowlist filter sees only a text node
-
Executionserialize emits style text unescaped
-
Persistvictim browser re-parses as live <img onerror>
-
Impactscript executes in victim session
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A05:2025 - Injection
ASVS 5.0
V1 - Encoding and Sanitization Output encoding, context-aware escaping
MITRE ATT&CK
2 techniques across 2 tactics: Initial Access, Execution The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Exploitation requires a consuming application that (1) uses lazy_html 0.1.0-0.1.12 to parse attacker-supplied HTML, (2) filters the resulting document or tree with an element/attribute allowlist, and (3) serializes it back to HTML for display to a victim. The specific technical trigger is a |
| Impact | This is a genuinely low real-world risk despite being a sanitizer-bypass XSS. The CVSS 4.0 base score is only 2.3 (vendor/CNA-assigned via EEF), and the vector AV:N/AC:L/AT:P/PR:N/UI:P/VC:N/VI:N/VA:N/SC:L/SI:L/SA:N tells a coherent story: network-reachable, no privileges, but an Attack Requirement (AT:P) and passive User Interaction (UI:P) both apply, and impact is confined to the subsequent (victim browser) system at Low integrity/confidentiality with no availability effect. The AT:P is well-justified - exploitation only matters when a consuming application specifically uses lazy_html to parse untrusted HTML, sanitize/filter it, and re-serialize it for display; lazy_html is a parsing library, not a server, so it has no attack surface on its own. No EPSS score, no CISA KEV listing, and no public PoC are present in the intelligence provided - consistent with a low-severity library flaw disclosed responsibly through a GitHub Security Advisory (GHSA-8rqp-v692-v82q) with a patch already available. There is no signal conflict: every source (low CVSS, library-only footprint, absence of exploitation data) points the same direction. The one nuance defenders should note is that the true impact depends entirely on the downstream application - in a filtering pipeline that trusts lazy_html's serialized output as 'clean', this mutation XSS fully defeats element/attribute allowlist filters because the payload lives in a text node no filter inspects, which could elevate practical impact above the raw 2.3 in a specific vulnerable consumer. |
| Exploit ScenarioDerived | An Elixir/Phoenix application accepts user-submitted HTML (e.g., a comment or rich-text field), parses it with lazy_html, applies an element/attribute allowlist filter, and serializes the tree back to HTML for display to other users. An attacker submits HTML containing |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Sep 25, 2026
Mutation XSS in the Elixir library LazyHTML 0.1.0 through 0.1.12 lets attacker-supplied markup slip past element and attribute allowlist filters and turn into live HTML when the filtered document is serialized for display. The defect is in LazyHTML.to_html/2 and LazyHTML.Tree.to_html/2, which decide whether to escape an element's text from the tag name alone, so a style or script element inside SVG or MathML foreign content is parsed with character references decoded yet serialized as an unescaped HTML raw-text element; encoded markup such as </style><img src=x onerror=...> inside <svg><style> therefore closes the element on re-parse and executes. Exploitation is unauthenticated and remote but conditional: the consumer application must parse untrusted HTML with lazy_html, filter the document or tree, and serialize the result to a victim who views it (user interaction required), which keeps real-world impact low (scope change, low confidentiality and integrity, no availability impact); no public exploit identified at time of analysis, and the vendor has shipped a fix in 0.1.13.
RemediationAI
Vendor-released patch: upgrade lazy_html to 0.1.13 or later, which supersedes the 0.1.0 through 0.1.12 range; the fixing change is visible in the upstream commit https://github.com/dashbitco/lazy_html/commit/f32c7fd6223225b68bc8691c78b6d4a77972f1d5, with context in GHSA-8rqp-v692-v82q, and dependency updates should be pinned in mix.lock so the patched version is actually resolved. If an immediate bump is not possible, the most direct compensating control is to stop relying on lazy_html alone as the last stage of an untrusted-HTML pipeline: either run a second-pass sanitizer over the final serialized string rather than over the parsed tree, accepting the cost of double parsing, or drop SVG and MathML foreign content entirely before serialization, which removes the <svg><style> and <mathm><style> vectors but breaks legitimate embedded diagrams and math rendering. A narrower option is to disallow style, script and other raw-text or escapable-raw-text elements in foreign content within the allowlist and to reject any document that places them outside the HTML namespace, at the cost of rejecting some benign input, while applications that never parse untrusted HTML, filter it, and re-serialize it for display can treat lazy_html as not exploitable in their pipeline. Re-parsing serialized output with the same vulnerable version and no additional escaping provides no protection, since the flaw is in the round-trip itself rather than in a single pass.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
This is a mutation XSS (mXSS) issue rooted in CWE-79, and its cause is a parser/serializer state mismatch rather than a missing check on any single tag or attribute. HTML parsing is context sensitive: inside SVG or MathML foreign content, the tokenizer treats style and script elements differently from the way it treats the same tag names in the HTML namespace, and character references in their text are decoded on the way in. lazy_html is an Elixir HTML parsing and serialization library that ships precompiled native code (its release workflow is built around elixir_make precompilation across Linux, macOS and Windows), and its serialization path (LazyHTML.to_html/2 and LazyHTML.Tree.to_html/2) selects the escaping strategy by tag name alone. That means a style or script element that arrived as SVG/MathML foreign content is written back out as if it were an ordinary HTML raw-text element, so its child text is emitted verbatim. The payload itself is a benign-looking plain text node at parse time, which is exactly why element and attribute filters in a sanitizing pipeline never see it; the danger only materializes on the second parse, when the previously inert encoded text closes the raw-text element and becomes live markup with event handlers. Affected artifacts are covered by CPE cpe:2.3:a:dashbitco:lazy_html across the 0.1.x range before 0.1.13, with vendor guidance in GHSA-8rqp-v692-v82q.
Know when Elixir 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
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:P/VC:N/VI:N/VA:N/SC:L/SI:L/SA:N
AC:H and UI:R reflect the required foreign-content round-trip and victim viewing; S:C because script runs in the victim browser; C:L/I:L, A:N for typical XSS impact.
Primary rating from Vendor (EEF).
CVSS VectorVendor: EEF
DescriptionCVE.org
Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting') vulnerability in dashbitco lazy_html allows mutation XSS via a parse and serialize round-trip of attacker-supplied HTML.
LazyHTML.to_html/2 and LazyHTML.Tree.to_html/2 decide whether to escape an element's text from its tag name alone. A style or script element inside SVG or MathML foreign content is parsed with character references decoded, but is serialized as an HTML raw-text element, so its text is emitted unescaped. Encoded markup such as </style><img src=x onerror=...> inside <svg><style> therefore closes the element on re-parse and becomes live markup. Applications that parse untrusted HTML with lazy_html, filter the document or tree, and serialize it for display are affected, since the payload is a plain text node that no element or attribute filter sees.
This issue affects lazy_html: from 0.1.0 before 0.1.13.
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 Scripting occurs when an application accepts untrusted data and sends it to a web browser without proper validation or encoding.
Unbounded recursion in the Elixir `protobuf` Hex package (versions >= 0.8.0, < 0.16.1) lets unauthenticated remote attac
Improper JWT signature verification in Dashbit's nimble_zta (0.1.2 up to but not including 0.1.3) lets an unauthenticate
Session-swapping authentication bypass in the Elixir library AshAuthentication (versions 4.10.0 before 4.15.0 and 5.0.0-
Authentication bypass in the Elixir library ash_authentication lets an attacker who operates one federated identity-prov
Account takeover in AshAuthentication (Elixir/Ash) 4.14.0 through 4.14.x and 5.0.0-rc.10 through 5.0.0-rc.13 lets unauth
Server-Side Request Forgery protection bypass in the Elixir safeurl library (versions 0.1.0 and later) allows unauthenti
Unauthenticated remote CPU exhaustion in mtrudel Bandit's HTTP/2 server (versions before 1.14.0) is achievable by holdin
Unbounded per-connection memory and CPU growth in the Elixir Bandit HTTP/2 server (0.3.6 up to 1.14.0) lets an unauthent
Unauthenticated remote denial of service in the Elixir HTTP server Bandit (mtrudel/bandit) from 0.1.0 before 1.14.0 lets
Unauthenticated remote attackers can consume disproportionate server CPU on Bandit (mtrudel/bandit, Elixir/Erlang) by se
Memory-exhaustion denial of service in the elixir-protobuf library (protobuf) from 0.8.0 onward allows an unauthenticate
Atom table exhaustion in the Ash framework (Elixir) allows an unauthenticated remote attacker to crash a BEAM node by su
EUVD-2026-86828
NVD
CVE.org
EPSS
Vulnrichment
GitHub
Exploit-DB