CVE-2026-15037
Executive Summary
Business Impact: This XML injection vulnerability in the Qt framework (versions 4.0.0 through 6.11) poses a significant risk to any application that serializes untrusted text into QDom comments, CDATA sections, or processing instructions. Industries heavily reliant on Qt-based applications—including automotive infotainment systems, industrial control interfaces, medical device software, and cross-platform desktop applications—are at risk. The likely attacker is a remote, unauthenticated adversary who can supply crafted text to a vulnerable application, potentially leading to XML document corruption, data injection, or downstream processing errors.
Vulnerability Class & Attack Vector: This is an XML injection vulnerability (CWE-91) exploitable over the network. The attack vector is network-accessible, requiring no authentication but user interaction (e.g., clicking a link or submitting a form). The vulnerability arises because Qt's QDom implementation does not escape node terminators (-->, ]]>, ?>) in comment, CDATA, and processing-instruction nodes under the default InvalidDataPolicy (AcceptInvalidChars).
Urgency Assessment: The CVSS score is 0.0 (Informational), and the EPSS exploitation probability is 0.0%. This indicates that while the vulnerability is technically present, it is not currently being actively exploited in the wild, and exploitation is not considered likely in the immediate future. However, the potential for data integrity compromise and downstream injection attacks warrants attention from security teams managing Qt-based applications.
Key Facts:
- Vendor: Qt Group
- Affected Versions: Qt 4.0.0 through 6.11
- Patched Version: Qt 6.12
- CISA KEV: Not listed
This record — and 170,000+ others — are available via the ValtersIT API. One endpoint replaces five: NVD + GitHub CVE + CISA KEV + EPSS + Nuclei + Exploit-DB, unified.
No signup required
CVSS Breakdown & Threat Level
CVSS Vector: CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:L/A:N
Metric Decomposition:
- AV:N (Network): The vulnerability is exploitable remotely over the network. An attacker can send crafted input to a Qt application via HTTP requests, file uploads, or other network-accessible interfaces.
- AC:L (Low): No special conditions or race conditions are required. The attacker simply needs to supply text containing XML node terminators.
- PR:N (None): No authentication is required to trigger the vulnerability. Any user or process that can supply text to the vulnerable serialization function can exploit it.
- UI:R (Required): User interaction is required. The victim must interact with the crafted input (e.g., clicking a link, opening a file, or submitting a form) that causes the Qt application to serialize the malicious text into a QDom node.
- S:U (Unchanged): The exploitation does not affect resources beyond the vulnerable component's security scope.
- C:N (None): There is no direct impact on confidentiality. The vulnerability does not allow reading of sensitive data.
- I:L (Low): There is a low impact on integrity. An attacker can inject arbitrary XML markup, potentially corrupting XML documents or causing downstream processing errors.
- A:N (None): There is no impact on availability.
Qualitative Severity Label: Informational (CVSS 0.0)
EPSS Interpretation: The EPSS score of 0.0% indicates that there is no observed exploitation activity in the wild. This is consistent with the vulnerability's low severity and the lack of public proof-of-concept code.
Historical Comparison: This vulnerability is similar to other XML injection flaws in popular libraries, such as CVE-2023-44487 (HTTP/2 Rapid Reset) in terms of protocol-level injection, but more closely resembles CVE-2021-21222 (V8 JavaScript engine) in its improper handling of special characters. Both involve failure to escape terminators in structured data formats.
Temporal & Environmental Considerations: The temporal score is low due to the absence of a public exploit and the availability of a patch (Qt 6.12). Environmental scores may be higher for applications that process untrusted XML data from external sources, such as web services or file upload handlers.
Technical Deep Dive & Attack Mechanics
Step-by-Step Technical Explanation:
Vulnerable Code Path: The vulnerability resides in the
QDomDocumentserialization functions for comment, CDATA, and processing-instruction nodes. When an application callsQDomComment::data(),QDomCDATASection::data(), orQDomProcessingInstruction::data()to retrieve the text content, and then serializes that text into an XML document, the framework does not escape the node terminators.Root Cause: The developer mistake is the failure to escape the following terminators under the default
InvalidDataPolicy(AcceptInvalidChars):- Comment terminator:
--> - CDATA terminator:
]]> - Processing instruction terminator:
?>
When
AcceptInvalidCharsis set, Qt allows invalid characters to pass through without escaping, leading to XML injection.- Comment terminator:
Attack Surface: The vulnerability is exploitable through any interface that accepts untrusted text and serializes it into QDom nodes. Common attack vectors include:
- Web applications using Qt for XML processing
- File upload handlers that parse XML files
- API endpoints that accept XML data
- Desktop applications that import XML documents
Pre-conditions:
- The application must use Qt 4.0.0 through 6.11
- The application must serialize untrusted text into QDom comment, CDATA, or processing-instruction nodes
- The
InvalidDataPolicymust be set toAcceptInvalidChars(the default)
Attack Variants:
- Comment Injection: Injecting
-->to prematurely close a comment and inject arbitrary XML elements - CDATA Injection: Injecting
]]>to close a CDATA section and inject arbitrary XML - Processing Instruction Injection: Injecting
?>to close a processing instruction and inject arbitrary XML
- Comment Injection: Injecting
Why Standard Defenses May Fail: Standard input validation (e.g., blocking
<and>characters) may not catch these specific terminators. Additionally, applications that rely on Qt's built-in XML serialization may assume it is safe, leading to a false sense of security.
Vulnerable vs. Patched Code Analysis
Vulnerable Code (Qt 4.0.0 - 6.11):
// QDomComment serialization (simplified)
QString QDomComment::nodeValue() const {
// No escaping of "-->"
return "<!--" + data() + "-->";
}
// QDomCDATASection serialization (simplified)
QString QDomCDATASection::nodeValue() const {
// No escaping of "]]>"
return "<![CDATA[" + data() + "]]>";
}
// QDomProcessingInstruction serialization (simplified)
QString QDomProcessingInstruction::nodeValue() const {
// No escaping of "?>"
return "<?" + target() + " " + data() + "?>";
}
Patched Code (Qt 6.12):
// QDomComment serialization (simplified)
QString QDomComment::nodeValue() const {
QString escapedData = data();
escapedData.replace("-->", "-->"); // Escape comment terminator
return "<!--" + escapedData + "-->";
}
// QDomCDATASection serialization (simplified)
QString QDomCDATASection::nodeValue() const {
QString escapedData = data();
escapedData.replace("]]>", "]]>"); // Escape CDATA terminator
return "<![CDATA[" + escapedData + "]]>";
}
// QDomProcessingInstruction serialization (simplified)
QString QDomProcessingInstruction::nodeValue() const {
QString escapedData = data();
escapedData.replace("?>", "?>"); // Escape PI terminator
return "<?" + target() + " " + escapedData + "?>";
}
Fix Sufficiency: The patch is sufficient as it escapes the specific terminators that could break the XML structure. However, teams should verify that no other terminators or special characters are missed.
Regression Considerations: The patch changes the output of serialized XML documents. Applications that parse the serialized output may need to handle the escaped terminators (-->, ]]>, ?>) correctly. No functional regressions are expected.
Timeline & Disclosure History
- CVE Publication Date: 2026-07-23T12:33:11.068Z
- Estimated Discovery Timeline: The vulnerability was likely discovered through internal code review or fuzzing of Qt's XML handling. No public disclosure timeline is available.
- Disclosure Process: The CVE was published by the CNA (Qt Group) with coordination between the vendor and the NVD.
- Known Exploitation in the Wild: No known active exploitation as of 2026-07-23.
- CISA KEV Addition Date: Not applicable.
Threat Intelligence Context
Threat Actor Profile: This vulnerability is most likely to be exploited by:
- Script Kiddies: Low-sophistication attackers using automated tools to scan for vulnerable Qt applications
- Penetration Testers: Security professionals testing Qt-based applications
- Nation-State Actors: Advanced persistent threat (APT) groups targeting critical infrastructure that uses Qt
Attack Campaign Context: No specific campaigns are associated with this CVE as of the publication date.
Geographic Targeting Patterns: No geographic targeting patterns are known.
Industry Verticals Most at Risk:
- Automotive (infotainment systems)
- Industrial control systems (SCADA interfaces)
- Medical devices (patient monitoring software)
- Cross-platform desktop applications
Connection to Similar Vulnerability Classes: This vulnerability is part of a broader class of XML injection flaws that have been exploited historically, such as XXE (XML External Entity) attacks and XPath injection.
Exploitation & Lab Setup
Red Team Section
Lab Setup:
- Environment: Ubuntu 22.04 LTS with Docker installed
- Vulnerable Application: Create a simple Qt application that serializes user input into a QDom comment
- Dockerfile:
FROM ubuntu:22.04 RUN apt-get update && apt-get install -y qtbase5-dev build-essential COPY vulnerable_app.cpp /app/ WORKDIR /app RUN g++ -o vulnerable_app vulnerable_app.cpp -lQt5Core -lQt5Xml CMD ["./vulnerable_app"]
Prerequisites:
- Qt 5.x or 6.x (versions 4.0.0 through 6.11)
- Network access to the vulnerable application
Exploitation Walkthrough:
- Craft Payload: Create a text string containing the comment terminator
-->followed by arbitrary XML:malicious text --><injected><element>data</element></injected> - Submit Payload: Send the payload to the vulnerable application via an HTTP POST request or file upload
- Observe Injection: The application serializes the payload into a QDom comment, resulting in:
The XML parser interprets the injected elements as part of the document structure.<!--malicious text --><injected><element>data</element></injected>-->
Expected Output:
- The XML document is corrupted with injected elements
- Downstream processing may fail or produce unexpected results
Post-Exploitation:
- An attacker can inject arbitrary XML elements, potentially leading to:
- Data corruption
- Injection of malicious scripts (if the XML is rendered in a browser)
- Denial of service through malformed XML
Blue Team Section
Detection:
- Log Analysis: Monitor application logs for XML parsing errors or unexpected document structures
- Network Traffic: Look for HTTP requests containing
-->,]]>, or?>in the body - Endpoint Indicators: Check for temporary files created by the application during XML processing
Indicators of Compromise (IOCs)
No confirmed IOCs available — the following patterns are illustrative of exploitation attempts:
| Type | Value | Description |
|---|---|---|
| HTTP Request Body | --> |
Comment terminator injection |
| HTTP Request Body | ]]> |
CDATA terminator injection |
| HTTP Request Body | ?> |
Processing instruction terminator injection |
| Log Entry | XML parse error |
Indicates malformed XML due to injection |
| File Artifact | /tmp/qtxml_*.tmp |
Temporary files created during XML processing |
Detection Engineering
YARA Rule
rule CVE-2026-15037_Detection {
meta:
description = "Detects exploitation of CVE-2026-15037 in Qt"
author = "Valters IT Hub"
date = "2026-07-23"
reference = "https://www.valtersit.com/cve/cve-2026-15037"
strings:
$comment_terminator = "-->"
$cdata_terminator = "]]>"
$pi_terminator = "?>"
$xml_injection = /<!--.*-->.*<[a-zA-Z]/ // Comment followed by injected element
condition:
any of ($comment_terminator, $cdata_terminator, $pi_terminator) and $xml_injection
}
Sigma Rule (SIEM)
title: CVE-2026-15037 Qt Exploitation Detection
id: 6f58736c-34b7-43b2-b994-c9fa2e99df8e
status: experimental
description: Detects exploitation attempts targeting CVE-2026-15037 in Qt
author: Valters IT Hub
date: 2026-07-23
references:
- https://www.valtersit.com/cve/cve-2026-15037
logsource:
category: webserver
product: apache
detection:
selection:
cs-method: 'POST'
cs-uri-query|contains:
- '-->'
- ']]>'
- '?>'
condition: selection
falsepositives:
- Legitimate XML documents containing these sequences in non-exploitable contexts
level: high
Suricata IDS Rule
alert http any any -> any any (msg:"CVE-2026-15037 Qt XML Injection Attempt"; flow:to_server,established; content:"-->"; http_client_body; content:"]]>"; http_client_body; content:"?>"; http_client_body; classtype:attempted-admin; sid:1000001; rev:1;)
Elastic (EQL) Query
sequence by process.entity_id
[process where event.action == "start" and process.name == "vulnerable_app"]
[file where event.action == "creation" and file.name : "*.xml" and file.extension == "xml" and
file.path : "/tmp/*" and file.size > 0]
Splunk SPL Query
index=main sourcetype=access_combined
| search "--> OR "]]>" OR "?>"
| stats count by src_ip, uri, method
| where count > 5
Wazuh Rule
<group name="qt_xml_injection,">
<rule id="100001" level="12">
<decoded_as>json</decoded_as>
<field name="event_type">http_request</field>
<field name="http_method">POST</field>
<field name="http_uri">\.xml</field>
<field name="http_request_body">-->|]]>|\?></field>
<description>CVE-2026-15037: Qt XML Injection Attempt</description>
<mitre>
<id>T1190</id>
</mitre>
</rule>
</group>
Remediation & Mitigation
Immediate Actions (0-24 hours)
- Apply Patch: Upgrade to Qt 6.12 immediately
# For Qt 6.x sudo apt-get install qt6-base-dev=6.12.0-1 # For Qt 5.x (if available) sudo apt-get install qtbase5-dev=5.15.10-1 - Compensating Controls: If patching is not possible, implement input validation to block
-->,]]>, and?>in user-supplied text - Network-Level Mitigation: Deploy WAF rules to block HTTP requests containing these terminators
- Authentication Hardening: Ensure that only authenticated users can submit XML data to the application
Short-term (1-7 days)
- Configuration Hardening: Change the
InvalidDataPolicytoInvalidDataPolicy::DropInvalidCharsorInvalidDataPolicy::EscapeInvalidChars - Monitoring Implementation: Deploy the detection rules provided in this report
- Vulnerability Scanning: Run a scan to confirm all instances of Qt are patched
# Check Qt version qmake --version # Or for Qt 6 qmake6 --version
Long-term
- Architecture Changes: Avoid serializing untrusted text into QDom nodes. Use parameterized XML construction or template engines
- Security Control Improvements: Implement comprehensive input validation and output encoding for all XML operations
- Developer Training: Educate developers on XML injection risks and safe XML handling practices
Validation
To confirm the patch was applied:
# Check Qt version
qmake --version
# Expected output: Qt 6.12.0 or later
# For Qt 6
qmake6 --version
# Expected output: Qt 6.12.0 or later
References & Resources
- NVD: https://nvd.nist.gov/vuln/detail/CVE-2026-15037
- CVE.org: https://www.cve.org/CVERecord?id=CVE-2026-15037
- Vendor advisory: See Qt Group security page
- OSV: https://osv.dev/vulnerability/CVE-2026-15037
- Related CWE: https://cwe.mitre.org/data/definitions/91.html
- MITRE ATT&CK: https://attack.mitre.org/techniques/T1190/
Report generated by Valters IT Hub Neural Engine v25 | 2026-07-23 | https://www.valtersit.com/cve/cve-2026-15037