Skip to main content

Security advisory: CVE-2026-11573 QDomDocument::toByteArray() crashes when parsing svg file

Comments

 An uncontrolled recursion (CWE-674) vulnerability in the Qt QDomDocument serialization path (QDomDocument::toByteArray(), QDomNode::save()) of the Qt XML module (QtXml, qtbase) has been discovered and has been assigned the CVE id CVE-2026-11573. 

Affected versions: from 6.7.0 to 6.8.1
 
Impact: Denial of service only. QDomDocument serializes its node tree recursively, consuming one stack frame per level of element nesting with no depth limit. A crafted document with deeply nested elements — for example an SVG or XML file from an untrusted source — exhausts the call stack and terminates the process when the document is serialized. On Windows/MSVC roughly 300 levels of nesting is sufficient; other toolchains tolerate more nesting but remain affected. Note that parsing succeeds and the crash occurs only on serialization, so the application must re-serialize a QDomDocument it built from untrusted input (load, then toByteArray()/save()).

This issue is limited to availability. It does not result in memory disclosure, data corruption, or privilege escalation, and has no impact on confidentiality or integrity. The sole impact is that a maliciously crafted XML payload can cause the application to crash by exhausting the C++ call stack through unbounded recursive serialization.
 
CVSS 4.0 Score: 7.1 (High)
 
Vector String: CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:P/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N
 
Mitigation: For users who cannot update immediately, validate the nesting depth of untrusted XML/SVG content before loading and serializing it, and reject documents exceeding a sane depth bound. Avoid round-tripping (parse-then-serialize) untrusted documents. Where a full DOM round-trip is not required, QXmlStreamReader/QXmlStreamWriter avoid building and recursively serializing a tree altogether. Running serialization on a thread with a larger stack only raises the trigger threshold and is not a fix, since an attacker controlling nesting depth can exceed any fixed stack size.
 
Solution: Update to Qt 6.8.2 or Qt 6.9.0 or later, which serialize iteratively.
 

 

 

Blog Topics

Comments

Subscribe to our blog

Try Qt 6.11 Now!

Download the latest release here: www.qt.io/download

Qt 6.11 is now available, with new features and improvements for application developers and device creators.

We're Hiring

Check out all our open positions here and follow us on Instagram to see what it's like to be #QtPeople.