GitHub Advisoryadvisory · PyPI
GHSA-vrx2-77f2-ww34 justhtml has sanitization bypass in custom policies and programmatic DOM
MEDIUM
Official page ↗
- Ecosystem
- PyPI
- Packages
- justhtml
- Severity
- Moderate
- CVSS vector
- CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:P/VC:N/VI:H/VA:N/SC:N/SI:L/SA:N
- Weaknesses
- CWE-436, CWE-471, CWE-79, CWE-835
- Reviewed
- 2026-04-22
Affected packages
• PyPI justhtml: < 1.17.0 → fixed in 1.17.0
Description
Summary
`justhtml` `1.17.0` fixes multiple security issues in sanitization, serialization, and programmatic DOM handling.
Most of these issues affected advanced or custom configurations rather than the default safe path.
Affected versions
• `justhtml` ``, MathML ``, SVG `` / ``, and MathML text integration points
• mutation-XSS parser-differential payloads that looked inert in memory but became active HTML after reparse
• SVG `filter="url(...)"` attributes that could trigger external fetches
These issues affected:
• `JustHTML(..., sanitize=True)` with custom foreign-namespace policies
• `sanitize()` / `sanitize_dom()`
• low-level terminal `Sanitize(...)` transform execution
Preserved `` handling
Constructor-time sanitization and explicit `Sanitize(...)` transforms did not fully match `sanitize()` / `sanitize_dom()` when custom policies preserved ``.
That could leave resource-loading CSS such as `@import` or `background-image:url(...)` in sanitized output from HTML string input.
Programmatic DOM serialization
Programmatic `script`, `style`, and `Comment(...)` nodes could still serialize into active markup in some edge cases.
This could affect applications that build or mutate DOM trees directly before calling `to_html()` or `to_markdown(html_passthrough=True)`.
Cache mutation and DOM cycle handling
Two lower-severity hardening fixes were included:
• compiled sanitize-pipeline caches could be mutated after warming and weaken later sanitization
• parent/child cycles in programmatic DOM trees could cause infinite loops in operations such as `to_html()` and `sanitize_dom()`
Default configuration
Most of the issues above did not affect ordinary parsed HTML with the default `JustHTML(..., sanitize=True)` configuration.
The main risk areas were:
• custom policies that preserve SVG or MathML
• custom policies that preserve ``
• programmatic DOM construction or mutation
• low-level direct sanitizer/transform APIs
Recommended action
Upgrade to `justhtml` `1.17.0`.
If users cannot upgrade immediately:
• avoid preserving SVG or MathML for untrusted input
• avoid preserving `` for untrusted input
• avoid mutating programmatic DOM trees with untrusted `script`, `style`, or comment content
• avoid mutating warmed policy internals or sanitizer caches
Credit
Discovered during an internal security review of `justhtml`.