Description
justhtml through 1.9.1 (fixed in 1.10.0) is vulnerable to uncontrolled recursion leading to denial of service. During JustHTML() construction, TreeBuilder.finish() unconditionally calls _populate_selectedcontent(), which recursively traverses the DOM tree via _find_elements()/_find_element() without a depth bound. An attacker who can supply HTML for parsing can provide deeply nested elements (e.g., ~1000 nested <div> tags, roughly 11 KB) to exceed CPython's default recursion limit and trigger an unhandled RecursionError, which may abort parsing, fail requests, or terminate a worker/process depending on the host application's exception handling.
Affected products
| Vendor | Product | Affected | Fixed |
|---|---|---|---|
| EmilStenstrom | justhtml | < 1.10.0 | 1.10.0 |
Affected packages
| Ecosystem | Package | Affected | Fixed | Record |
|---|---|---|---|---|
| PyPI | justhtml | < 1.10.0 | 1.10.0 | GHSA-v7cf-c9rm-wm3j |
References
- GitHub Security Advisory (GHSA-v7cf-c9rm-wm3j) vendor-advisory
- VulnCheck Advisory: justhtml before 1.10.0 Denial of Service via deeply nested HTML third-party-advisory