CVE-2016-2099
Critical · 9.8CVSS
9.8
EPSS
6.6%
Published
May 13, 2016
CISA due date
—
Cloudanix analysis
An old XML handling component contains a memory bug that lets attackers who send specially crafted documents potentially take control of the affected computer.
- Exploitation
- Remote Unauthenticated
- Attacker needs
- None
- Complexity
- Low
- Impact
- Remote Code Execution
- Component
- Library
- Class
- Use After Free
- Remediation
- Upgrade
- Effort
- Medium
- Patch risk
- Low
What it actually does
Use-after-free condition in DTDScanner.cpp triggered by an invalid character during XML DTD validation, enabling memory corruption that can lead to arbitrary code execution or crashes.
Why it matters to the business
Systems parsing untrusted XML documents face risk of remote code execution and full host compromise; the issue affects legacy deployments of an XML library still present in older distributions and downstream products.
How an attack unfolds
An attacker crafts an XML document containing an invalid character in the DTD section and supplies it to any application using the vulnerable Xerces C++ parser; during DTD scanning the freed memory is accessed, allowing control of execution flow.
How to fix it
Upgrade Apache Xerces C++ to a version newer than 3.1.3; rebuild and redeploy all dependent applications; replace or remove any bundled copies of the vulnerable library in operating-system packages or third-party software.
How to confirm the fix worked
Inventory all installations of Xerces C++ and confirm versions exceed 3.1.3; run regression tests with XML inputs containing invalid DTD characters; monitor application stability under malformed XML loads.
Typical attack path
- Identify an application or service that uses Apache Xerces C++ to parse external XML input
- Craft an XML document containing an invalid character inside a DTD declaration
- Deliver the document via network, file upload, or other input channel accepted by the target
- Trigger DTD validation path in validators/DTD/DTDScanner.cpp to induce the use-after-free
- Leverage resulting memory corruption for code execution or denial of service
How to detect it
Search application and system logs for unexpected crashes or segmentation faults during XML parsing; inspect process memory dumps for patterns consistent with use-after-free in DTD handling; correlate with inbound XML containing malformed DTD sections.
What your security team should do
- Prioritize upgrade of Xerces C++ in all internet-facing or untrusted-input parsers
- Scan software bill-of-materials for any remaining 3.1.3 or earlier instances
- Apply compensating controls such as input sanitization or XML schema enforcement until upgrades complete
- Review logging for XML parsing errors or crashes that could indicate probing attempts
The record
Use-after-free vulnerability in validators/DTD/DTDScanner.cpp in Apache Xerces C++ 3.1.3 and earlier allows context-dependent attackers to have unspecified impact via an invalid character in an XML document.
Affected packages
| Ecosystem | Package | Introduced | Fixed |
|---|---|---|---|
| Debian:11 | xerces-c | 0 | 3.1.3+debian-2 |
| Debian:12 | xerces-c | 0 | 3.1.3+debian-2 |
| Debian:13 | xerces-c | 0 | 3.1.3+debian-2 |
| Debian:7 | xerces-c | 0 | 3.1.1-3+deb7u3 |
| Debian:8 | xerces-c | 0 | 3.1.1-5.1+deb8u2 |
| Mageia:5 | xerces-c | 0 | 3.1.2-1.2.mga5 |
| SUSE:Linux Enterprise Desktop 12 SP1 | xerces-c | 0 | 3.1.1-12.3 |
| SUSE:Linux Enterprise Server 12 SP1 | xerces-c | 0 | 3.1.1-12.3 |
| SUSE:Linux Enterprise Server for SAP Applications 12 SP1 | xerces-c | 0 | 3.1.1-12.3 |
| SUSE:Linux Enterprise Software Development Kit 12 SP1 | xerces-c | 0 | 3.1.1-12.3 |
| Ubuntu:14.04:LTS | xerces-c | 0 | 3.1.1-5.1+deb8u2build0.14.04.1 |
| Ubuntu:Pro:16.04:LTS | xerces-c | 0 | 3.1.3+debian-1ubuntu0.1~esm1 |
| Ubuntu:Pro:18.04:LTS | xerces-c | 0 | 3.2.0+debian-2ubuntu0.1~esm1 |
| openSUSE:Tumbleweed | xerces-c | 0 | 3.1.4-1.3 |
Related vulnerabilities
- CVE-2023-37536 An integer overflow in xerces-c++ 3.2.3 in BigFix Platform allows remote attackers to… Also affects xerces-c
- CVE-2018-1311 The Apache Xerces-C 3.0.0 to 3.2.3 XML parser contains a use-after-free error triggered… Also affects xerces-c
- CVE-2016-4463 Stack-based buffer overflow in Apache Xerces-C++ before 3.1.4 allows context-dependent… Also affects xerces-c
- CVE-2015-0252 internal/XMLReader.cpp in Apache Xerces-C before 3.1.2 allows remote attackers to cause a… Also affects xerces-c