CVE-2026-59923 Mistune: XSS via percent-encoded javascript URI bypass in safe_url()

Medium 6.1 Published Updated

Attacker can execute arbitrary JavaScript in rendered HTML via percent-encoded URIs in Markdown links or images using the Mistune library.

Exploited in the wild
Not known
Login needed
Not needed
Attackable
Over the internet
Victim action needed
A user has to click or open something
Fix
Available

What is CVE-2026-59923?

CVE-2026-59923 is a medium-severity cross-site scripting vulnerability in lepture mistune, published on 8 Jul 2026. An attacker can exploit it over the internet without logging in, and only if a user opens a file or follows a link.

Official description

Mistune is a Python Markdown parser with renderers and plugins. Prior to 3.3.0, HTMLRenderer.safe_url() does not block percent-encoded javascript URIs, allowing attacker-supplied Markdown links or images to bypass URL protections and execute script in rendered HTML. This issue is fixed in version 3.3.0.

Weakness: CWE-79

Which versions are affected by CVE-2026-59923?

3 open source packages ship an affected version, including mistune. It affects 1 product.

PackageAffectedFixed in
mistune PyPIAll versions3.3.0
mistune PyPIAll versions3.3.0
mistune PyPIAll versions3.3.0

Products include Mistune Project Mistune.

How do I fix CVE-2026-59923?

Upgrade mistune to 3.3.0 or later.

Escape output for the context it lands in and set a strict Content Security Policy. Upgrading the affected component is the real fix. More about Cross-site scripting.

Is CVE-2026-59923 being exploited?

It is not confirmed as exploited in the wild, but public exploit code for CVE-2026-59923 exists.

Sources

Also known as DEBIAN-CVE-2026-59923, ECHO-18b1-043a-4c2c, GHSA-8c25-4j27-2rv3, PYSEC-2026-2211, UBUNTU-CVE-2026-59923.

Is CVE-2026-59923 in your software?

Upload an SBOM and sbomify checks it against every vulnerability here, every day.

Check your SBOMs for free