CVE-2026-54911 UltraJSON: Malformed/Truncated UTF-8 Accepted and Silently Rewritten in ujson.dumps()

Medium 6.5 Published Updated

Attackers can bypass input validation and corrupt data integrity by exploiting silent UTF-8 rewriting in UltraJSON when reject_bytes is disabled.

Exploited in the wild
Not known
Login needed
Not needed
Attackable
Over the internet
Victim action needed
Not needed
Fix
Available

What is CVE-2026-54911?

CVE-2026-54911 is a medium-severity vulnerability in ultrajson, published on 22 Jun 2026. An attacker can exploit it over the internet without logging in, with no action from the victim.

Official description

UltraJSON is a fast JSON encoder and decoder written in pure C with bindings for Python 3.7+. Prior to 5.13.0, ujson.dumps() (or ujson.dump() or ujson.encode()) have a reject_bytes=False option. When set, they may accept malformed or truncated UTF-8 byte sequences, silently rewriting them into different Unicode characters instead of rejecting them. This leads to input validation bypass and data integrity issues. This vulnerability is fixed in 5.13.0.

Weakness: CWE-20

Which versions are affected by CVE-2026-54911?

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

PackageAffectedFixed in
ujson PyPIAll versions5.13.0
ujson PyPIAll versions5.13.0
ujson PyPIAll versions5.13.0

Products include Ultrajson Project Ultrajson.

How do I fix CVE-2026-54911?

Upgrade ujson to 5.13.0 or later.

Is CVE-2026-54911 being exploited?

There is no known exploitation of CVE-2026-54911 in the wild and no public exploit code.

Sources

Also known as DEBIAN-CVE-2026-54911, ECHO-0346-5369-6592, GHSA-3j69-69wj-xqx2, MINI-89q8-3p3r-9gwc, PYSEC-2026-2294, ROOT-APP-PYPI-CVE-2026-54911 and 1 more.

Is CVE-2026-54911 in your software?

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

Check your SBOMs for free