CVE-2014-3660
NoneCVSS
—
EPSS
3.8%
Published
Nov 4, 2014
CISA due date
—
Cloudanix analysis
A problem in the way certain programs read data files can let someone send a specially made file that makes the program use up all the computer's processing power and stop working properly.
- Exploitation
- Remote Unauthenticated
- Attacker needs
- None
- Complexity
- Trivial
- Impact
- Denial Of Service
- Component
- Library
- Class
- Denial of service
- Remediation
- Upgrade
- Effort
- Medium
- Patch risk
- Low
What it actually does
The parser fails to honor disabled entity substitution, permitting unbounded recursive expansion of nested entities in XML input that exhausts CPU resources.
Why it matters to the business
Systems handling untrusted XML input can be forced offline or slowed to unusability, disrupting any services that rely on those systems until the load is removed.
How an attack unfolds
An attacker supplies a specially crafted XML document containing many nested entity references to any application that parses it with the vulnerable library, triggering repeated expansion and high CPU usage until the process or host becomes unresponsive.
How to fix it
Upgrade the affected packages to the listed fixed versions: openssh (Debian:11) to 1:6.9p1-1 or newer, openssh (Debian:12) to 1:6.9p1-1 or newer, openssh (Debian:13) to 1:6.9p1-1 or newer, and openssh (Ubuntu:14.04:LTS) to 1:6.6p1-2ubuntu2.2 or newer. Where direct upgrades are unavailable, disable XML entity expansion or implement strict input size limits before parsing.
How to confirm the fix worked
Confirm the installed package version matches or exceeds the fixed version for each distribution, then test that a sample billion-laughs XML document is rejected or produces bounded resource usage.
Typical attack path
- Identify a network-accessible service that accepts or processes XML documents
- Craft an XML payload containing a large number of nested entity references
- Deliver the payload to the target service
- Observe resource exhaustion and service degradation or outage
How to detect it
Review application and system logs for sudden spikes in CPU usage correlated with XML parsing activity; examine any captured XML payloads for unusually deep or repetitive entity declarations.
What your security team should do
- Apply the listed package updates immediately on all affected Debian and Ubuntu systems
- Scan for any custom applications that embed or statically link the vulnerable parser and update them
- Add XML input validation and size limits as a defense-in-depth control
- Monitor CPU and process metrics on services that parse XML for anomalous sustained load
The record
parser.c in libxml2 before 2.9.2 does not properly prevent entity expansion even when entity substitution has been disabled, which allows context-dependent attackers to cause a denial of service (CPU consumption) via a crafted XML document containing a large number of nested entity references, a variant of the "billion laughs" attack.
Affected packages
| Ecosystem | Package | Introduced | Fixed |
|---|---|---|---|
| Debian:11 | libxml2 | 0 | 2.9.2+dfsg1-1 |
| Debian:12 | libxml2 | 0 | 2.9.2+dfsg1-1 |
| Debian:13 | libxml2 | 0 | 2.9.2+dfsg1-1 |
| Debian:6.0 | libxml2 | 0 | 2.7.8.dfsg-2+squeeze11 |
| Debian:6.0 | libxml2 | 0 | 2.7.8.dfsg-2+squeeze10 |
| Debian:7 | libxml2 | 0 | 2.8.0+dfsg1-7+wheezy3 |
| Debian:7 | libxml2 | 0 | 2.8.0+dfsg1-7+wheezy2 |
| Mageia:3 | libxml2 | 0 | 2.9.0-5.4.mga3 |
| Mageia:4 | libxml2 | 0 | 2.9.1-2.2.mga4 |
| Red Hat:enterprise_linux:5::client | libxml2 | 0 | 0:2.6.26-2.1.25.el5_11 |
| Red Hat:enterprise_linux:5::client | libxml2-debuginfo | 0 | 0:2.6.26-2.1.25.el5_11 |
| Red Hat:enterprise_linux:5::client | libxml2-devel | 0 | 0:2.6.26-2.1.25.el5_11 |
| Red Hat:enterprise_linux:5::client | libxml2-python | 0 | 0:2.6.26-2.1.25.el5_11 |
| Red Hat:enterprise_linux:5::client_workstation | libxml2 | 0 | 0:2.6.26-2.1.25.el5_11 |
| Red Hat:enterprise_linux:5::client_workstation | libxml2-debuginfo | 0 | 0:2.6.26-2.1.25.el5_11 |
| Red Hat:enterprise_linux:5::client_workstation | libxml2-devel | 0 | 0:2.6.26-2.1.25.el5_11 |
| Red Hat:enterprise_linux:5::client_workstation | libxml2-python | 0 | 0:2.6.26-2.1.25.el5_11 |
| Red Hat:enterprise_linux:5::server | libxml2 | 0 | 0:2.6.26-2.1.25.el5_11 |
| Red Hat:enterprise_linux:5::server | libxml2-debuginfo | 0 | 0:2.6.26-2.1.25.el5_11 |
| Red Hat:enterprise_linux:5::server | libxml2-devel | 0 | 0:2.6.26-2.1.25.el5_11 |
| Red Hat:enterprise_linux:5::server | libxml2-python | 0 | 0:2.6.26-2.1.25.el5_11 |
| Red Hat:enterprise_linux:6::client | libxml2 | 0 | 0:2.7.6-17.el6_6.1 |
| Red Hat:enterprise_linux:6::client | libxml2-debuginfo | 0 | 0:2.7.6-17.el6_6.1 |
| Red Hat:enterprise_linux:6::client | libxml2-devel | 0 | 0:2.7.6-17.el6_6.1 |
| Red Hat:enterprise_linux:6::client | libxml2-python | 0 | 0:2.7.6-17.el6_6.1 |
| Red Hat:enterprise_linux:6::client | libxml2-static | 0 | 0:2.7.6-17.el6_6.1 |
| Red Hat:enterprise_linux:6::computenode | libxml2 | 0 | 0:2.7.6-17.el6_6.1 |
| Red Hat:enterprise_linux:6::computenode | libxml2-debuginfo | 0 | 0:2.7.6-17.el6_6.1 |
| Red Hat:enterprise_linux:6::computenode | libxml2-devel | 0 | 0:2.7.6-17.el6_6.1 |
| Red Hat:enterprise_linux:6::computenode | libxml2-python | 0 | 0:2.7.6-17.el6_6.1 |
| Red Hat:enterprise_linux:6::computenode | libxml2-static | 0 | 0:2.7.6-17.el6_6.1 |
| Red Hat:enterprise_linux:6::server | libxml2 | 0 | 0:2.7.6-17.el6_6.1 |
| Red Hat:enterprise_linux:6::server | libxml2-debuginfo | 0 | 0:2.7.6-17.el6_6.1 |
| Red Hat:enterprise_linux:6::server | libxml2-devel | 0 | 0:2.7.6-17.el6_6.1 |
| Red Hat:enterprise_linux:6::server | libxml2-python | 0 | 0:2.7.6-17.el6_6.1 |
| Red Hat:enterprise_linux:6::server | libxml2-static | 0 | 0:2.7.6-17.el6_6.1 |
| Red Hat:enterprise_linux:6::workstation | libxml2 | 0 | 0:2.7.6-17.el6_6.1 |
| Red Hat:enterprise_linux:6::workstation | libxml2-debuginfo | 0 | 0:2.7.6-17.el6_6.1 |
| Red Hat:enterprise_linux:6::workstation | libxml2-devel | 0 | 0:2.7.6-17.el6_6.1 |
| Red Hat:enterprise_linux:6::workstation | libxml2-python | 0 | 0:2.7.6-17.el6_6.1 |
| Red Hat:enterprise_linux:6::workstation | libxml2-static | 0 | 0:2.7.6-17.el6_6.1 |
| Red Hat:enterprise_linux:7::client | libxml2 | 0 | 0:2.9.1-5.el7_0.1 |
| Red Hat:enterprise_linux:7::client | libxml2-debuginfo | 0 | 0:2.9.1-5.el7_0.1 |
| Red Hat:enterprise_linux:7::client | libxml2-devel | 0 | 0:2.9.1-5.el7_0.1 |
| Red Hat:enterprise_linux:7::client | libxml2-python | 0 | 0:2.9.1-5.el7_0.1 |
| Red Hat:enterprise_linux:7::client | libxml2-static | 0 | 0:2.9.1-5.el7_0.1 |
| Red Hat:enterprise_linux:7::computenode | libxml2 | 0 | 0:2.9.1-5.el7_0.1 |
| Red Hat:enterprise_linux:7::computenode | libxml2-debuginfo | 0 | 0:2.9.1-5.el7_0.1 |
| Red Hat:enterprise_linux:7::computenode | libxml2-devel | 0 | 0:2.9.1-5.el7_0.1 |
| Red Hat:enterprise_linux:7::computenode | libxml2-python | 0 | 0:2.9.1-5.el7_0.1 |
| Red Hat:enterprise_linux:7::computenode | libxml2-static | 0 | 0:2.9.1-5.el7_0.1 |
| Red Hat:enterprise_linux:7::server | libxml2 | 0 | 0:2.9.1-5.el7_0.1 |
| Red Hat:enterprise_linux:7::server | libxml2-debuginfo | 0 | 0:2.9.1-5.el7_0.1 |
| Red Hat:enterprise_linux:7::server | libxml2-devel | 0 | 0:2.9.1-5.el7_0.1 |
| Red Hat:enterprise_linux:7::server | libxml2-python | 0 | 0:2.9.1-5.el7_0.1 |
| Red Hat:enterprise_linux:7::server | libxml2-static | 0 | 0:2.9.1-5.el7_0.1 |
| Red Hat:enterprise_linux:7::workstation | libxml2 | 0 | 0:2.9.1-5.el7_0.1 |
| Red Hat:enterprise_linux:7::workstation | libxml2-debuginfo | 0 | 0:2.9.1-5.el7_0.1 |
| Red Hat:enterprise_linux:7::workstation | libxml2-devel | 0 | 0:2.9.1-5.el7_0.1 |
| Red Hat:enterprise_linux:7::workstation | libxml2-python | 0 | 0:2.9.1-5.el7_0.1 |
| Red Hat:enterprise_linux:7::workstation | libxml2-static | 0 | 0:2.9.1-5.el7_0.1 |
| Ubuntu:14.04:LTS | libxml2 | 0 | 2.9.1+dfsg1-3ubuntu4.4 |
| nuget | libxml2 | 2.0.0 | No fix |
| openSUSE:Tumbleweed | libxml2 | 0 | 2.9.4-1.22 |
Related vulnerabilities
- CVE-2017-16932 parser.c in libxml2 before 2.9.5 does not prevent infinite recursion in parameter… Also affects libxml2
- CVE-2017-0663 A remote code execution vulnerability in libxml2 could enable an attacker using a… Also affects libxml2
- CVE-2017-8872 The htmlParseTryOrFinish function in HTMLparser.c in libxml2 2.9.4 allows attackers to… Also affects libxml2
- CVE-2016-9318 libxml2 2.9.4 and earlier, as used in XMLSec 1.2.23 and earlier and other products, does… Also affects libxml2
- CVE-2016-4448 Format string vulnerability in libxml2 before 2.9.4 allows attackers to have unspecified… Also affects libxml2
- CVE-2016-4447 The xmlParseElementDecl function in parser.c in libxml2 before 2.9.4 allows… Also affects libxml2
- CVE-2015-8806 dict.c in libxml2 allows remote attackers to cause a denial of service (heap-based buffer… Also affects libxml2
- CVE-2015-7499 Heap-based buffer overflow in the xmlGROW function in parser.c in libxml2 before 2.9.3… Also affects libxml2