CVE-2017-9233
High · 7.5CVSS
7.5
EPSS
8.7%
Published
Jul 25, 2017
CISA due date
—
Cloudanix analysis
A flaw in a common XML processing library lets attackers crash or freeze applications by sending specially crafted data, causing services to stop working until restarted.
- Exploitation
- Remote Unauthenticated
- Attacker needs
- None
- Complexity
- Low
- Impact
- Denial Of Service
- Component
- Library
- Class
- XXE
- Remediation
- Upgrade
- Effort
- Medium
- Patch risk
- Low
What it actually does
The vulnerability allows an attacker to supply a malformed external entity definition via an external DTD, causing the Expat XML parser to enter an infinite loop and consume CPU resources indefinitely, resulting in denial of service.
Why it matters to the business
Applications relying on the vulnerable XML parser can be rendered unresponsive, leading to service outages, degraded performance, and the need for manual restarts or resource limits; widespread use in libraries and tools increases exposure across many systems despite the age of the issue.
How an attack unfolds
An attacker crafts an XML document containing a specially malformed external entity reference sourced from an external DTD and submits it to any application using the vulnerable Expat parser; the parser processes the definition and enters an unrecoverable infinite loop, denying service without requiring authentication or user interaction.
How to fix it
Upgrade libexpat to a version newer than 2.2.0; for affected packages apply python/cpython (GIT) fix ca079a3ea30098aff3197c559a0e32d42dda6d84, grype (Chainguard) 0.74.4-r1, or grype (Wolfi) 0.74.4-r1; where possible, configure parsers to disable external entity resolution.
How to confirm the fix worked
Verify the installed libexpat version is newer than 2.2.0; attempt to reproduce the infinite-loop condition with a test malformed DTD payload under controlled conditions and confirm the process terminates or rejects the input.
Typical attack path
- Identify an application endpoint or input that accepts XML data processed by Expat
- Craft a malicious XML payload with a malformed external entity definition in an external DTD
- Deliver the payload over the network to the target parser
- Trigger repeated parsing to sustain resource exhaustion
How to detect it
Search application and system logs for XML parsing events coinciding with sudden high CPU utilization on parser processes; examine inbound XML traffic for external entity references; review process dumps or resource monitors for non-terminating loops during XML handling.
What your security team should do
- Prioritize patching all instances of libexpat and dependent packages to the listed fixed versions
- Implement input validation and parser hardening to reject external DTDs by default
- Monitor for high sustained CPU usage in XML-processing services
- Review and restrict network-accessible XML endpoints
The record
XML External Entity vulnerability in libexpat 2.2.0 and earlier (Expat XML Parser Library) allows attackers to put the parser in an infinite loop using a malformed external entity definition from an external DTD.
Affected packages
| Ecosystem | Package | Introduced | Fixed |
|---|---|---|---|
| Alpine:v3.10 | expat | 0 | 2.2.0-r1 |
| Alpine:v3.11 | expat | 0 | 2.2.0-r1 |
| Alpine:v3.12 | expat | 0 | 2.2.0-r1 |
| Alpine:v3.13 | expat | 0 | 2.2.0-r1 |
| Alpine:v3.14 | expat | 0 | 2.2.0-r1 |
| Alpine:v3.15 | expat | 0 | 2.2.0-r1 |
| Alpine:v3.16 | expat | 0 | 2.2.0-r1 |
| Alpine:v3.17 | expat | 0 | 2.2.0-r1 |
| Alpine:v3.18 | expat | 0 | 2.2.0-r1 |
| Alpine:v3.19 | expat | 0 | 2.2.0-r1 |
| Alpine:v3.20 | expat | 0 | 2.2.0-r1 |
| Alpine:v3.21 | expat | 0 | 2.2.0-r1 |
| Alpine:v3.22 | expat | 0 | 2.2.0-r1 |
| Alpine:v3.4 | expat | 0 | 2.2.0-r1 |
| Alpine:v3.5 | expat | 0 | 2.2.0-r1 |
| Alpine:v3.6 | expat | 0 | 2.2.0-r1 |
| Alpine:v3.7 | expat | 0 | 2.2.0-r1 |
| Alpine:v3.8 | expat | 0 | 2.2.0-r1 |
| Alpine:v3.9 | expat | 0 | 2.2.0-r1 |
| Debian:11 | expat | 0 | 2.2.1-1 |
| Debian:11 | libxmltok | 0 | No fix |
| Debian:12 | expat | 0 | 2.2.1-1 |
| Debian:12 | libxmltok | 0 | No fix |
| Debian:13 | expat | 0 | 2.2.1-1 |
| Debian:14 | expat | 0 | 2.2.1-1 |
| Debian:7 | expat | 0 | 2.1.0-1+deb7u5 |
| Debian:8 | expat | 0 | 2.1.0-6+deb8u4 |
| Debian:9 | expat | 0 | 2.2.0-2+deb9u1 |
| Mageia:5 | expat | 0 | 2.1.0-9.5.mga5 |
| SUSE:Enterprise Storage 5 | python3 | 0 | 3.4.10-25.39.3 |
| SUSE:Enterprise Storage 5 | python3-base | 0 | 3.4.10-25.39.2 |
| SUSE:HPE Helion OpenStack 8 | python3 | 0 | 3.4.10-25.39.3 |
| SUSE:HPE Helion OpenStack 8 | python3-base | 0 | 3.4.10-25.39.2 |
| SUSE:Linux Enterprise Desktop 12 SP2 | expat | 0 | 2.1.0-21.3.1 |
| SUSE:Linux Enterprise Desktop 12 SP3 | expat | 0 | 2.1.0-21.3.1 |
| SUSE:Linux Enterprise Desktop 12 SP4 | python3 | 0 | 3.4.10-25.39.3 |
| SUSE:Linux Enterprise Desktop 12 SP4 | python3-base | 0 | 3.4.10-25.39.2 |
| SUSE:Linux Enterprise Module for Web and Scripting 12 | python3 | 0 | 3.4.10-25.39.3 |
| SUSE:Linux Enterprise Module for Web and Scripting 12 | python3-base | 0 | 3.4.10-25.39.2 |
| SUSE:Linux Enterprise Server 11 SP4 | expat | 0 | 2.0.1-88.42.3.2 |
| SUSE:Linux Enterprise Server 12 SP1-LTSS | python3 | 0 | 3.4.10-25.39.3 |
| SUSE:Linux Enterprise Server 12 SP1-LTSS | python3-base | 0 | 3.4.10-25.39.2 |
| SUSE:Linux Enterprise Server 12 SP2 | expat | 0 | 2.1.0-21.3.1 |
| SUSE:Linux Enterprise Server 12 SP2-BCL | python3 | 0 | 3.4.10-25.39.3 |
| SUSE:Linux Enterprise Server 12 SP2-BCL | python3-base | 0 | 3.4.10-25.39.2 |
| SUSE:Linux Enterprise Server 12 SP2-LTSS | python3 | 0 | 3.4.10-25.39.3 |
| SUSE:Linux Enterprise Server 12 SP2-LTSS | python3-base | 0 | 3.4.10-25.39.2 |
| SUSE:Linux Enterprise Server 12 SP3 | expat | 0 | 2.1.0-21.3.1 |
| SUSE:Linux Enterprise Server 12 SP3-BCL | python3 | 0 | 3.4.10-25.39.3 |
| SUSE:Linux Enterprise Server 12 SP3-BCL | python3-base | 0 | 3.4.10-25.39.2 |
| SUSE:Linux Enterprise Server 12 SP3-LTSS | python3 | 0 | 3.4.10-25.39.3 |
| SUSE:Linux Enterprise Server 12 SP3-LTSS | python3-base | 0 | 3.4.10-25.39.2 |
| SUSE:Linux Enterprise Server 12 SP4 | python3 | 0 | 3.4.10-25.39.3 |
| SUSE:Linux Enterprise Server 12 SP4 | python3-base | 0 | 3.4.10-25.39.2 |
| SUSE:Linux Enterprise Server 12 SP5 | python3 | 0 | 3.4.10-25.39.3 |
| SUSE:Linux Enterprise Server 12 SP5 | python3-base | 0 | 3.4.10-25.39.2 |
| SUSE:Linux Enterprise Server for Raspberry Pi 12 SP2 | expat | 0 | 2.1.0-21.3.1 |
| SUSE:Linux Enterprise Server for SAP Applications 11 SP4 | expat | 0 | 2.0.1-88.42.3.2 |
| SUSE:Linux Enterprise Server for SAP Applications 12 SP1 | python3 | 0 | 3.4.10-25.39.3 |
| SUSE:Linux Enterprise Server for SAP Applications 12 SP1 | python3-base | 0 | 3.4.10-25.39.2 |
| SUSE:Linux Enterprise Server for SAP Applications 12 SP2 | expat | 0 | 2.1.0-21.3.1 |
| SUSE:Linux Enterprise Server for SAP Applications 12 SP2 | python3 | 0 | 3.4.10-25.39.3 |
| SUSE:Linux Enterprise Server for SAP Applications 12 SP2 | python3-base | 0 | 3.4.10-25.39.2 |
| SUSE:Linux Enterprise Server for SAP Applications 12 SP3 | expat | 0 | 2.1.0-21.3.1 |
| SUSE:Linux Enterprise Server for SAP Applications 12 SP3 | python3 | 0 | 3.4.10-25.39.3 |
| SUSE:Linux Enterprise Server for SAP Applications 12 SP3 | python3-base | 0 | 3.4.10-25.39.2 |
| SUSE:Linux Enterprise Server for SAP Applications 12 SP4 | python3 | 0 | 3.4.10-25.39.3 |
| SUSE:Linux Enterprise Server for SAP Applications 12 SP4 | python3-base | 0 | 3.4.10-25.39.2 |
| SUSE:Linux Enterprise Server for SAP Applications 12 SP5 | python3 | 0 | 3.4.10-25.39.3 |
| SUSE:Linux Enterprise Server for SAP Applications 12 SP5 | python3-base | 0 | 3.4.10-25.39.2 |
| SUSE:Linux Enterprise Software Development Kit 11 SP4 | expat | 0 | 2.0.1-88.42.3.2 |
| SUSE:Linux Enterprise Software Development Kit 12 SP2 | expat | 0 | 2.1.0-21.3.1 |
| SUSE:Linux Enterprise Software Development Kit 12 SP3 | expat | 0 | 2.1.0-21.3.1 |
| SUSE:Linux Enterprise Software Development Kit 12 SP4 | python3 | 0 | 3.4.10-25.39.3 |
| SUSE:Linux Enterprise Software Development Kit 12 SP4 | python3-base | 0 | 3.4.10-25.39.2 |
| SUSE:Linux Enterprise Software Development Kit 12 SP5 | python3 | 0 | 3.4.10-25.39.3 |
| SUSE:Linux Enterprise Software Development Kit 12 SP5 | python3-base | 0 | 3.4.10-25.39.2 |
| SUSE:OpenStack Cloud 7 | python3 | 0 | 3.4.10-25.39.3 |
| SUSE:OpenStack Cloud 7 | python3-base | 0 | 3.4.10-25.39.2 |
| SUSE:OpenStack Cloud 8 | python3 | 0 | 3.4.10-25.39.3 |
| SUSE:OpenStack Cloud 8 | python3-base | 0 | 3.4.10-25.39.2 |
| SUSE:OpenStack Cloud Crowbar 8 | python3 | 0 | 3.4.10-25.39.3 |
| SUSE:OpenStack Cloud Crowbar 8 | python3-base | 0 | 3.4.10-25.39.2 |
| SUSE:Studio Onsite 1.3 | expat | 0 | 2.0.1-88.42.3.2 |
| Ubuntu:14.04:LTS | expat | 0 | 2.1.0-4ubuntu1.4 |
| Ubuntu:16.04:LTS | cableswig | 0 | No fix |
| Ubuntu:16.04:LTS | expat | 0 | 2.1.0-7ubuntu0.16.04.3 |
| Ubuntu:16.04:LTS | firefox | 0 | 67.0.4+build1-0ubuntu0.16.04.1 |
| Ubuntu:16.04:LTS | insighttoolkit4 | 0 | No fix |
| Ubuntu:16.04:LTS | matanza | 0 | No fix |
| Ubuntu:16.04:LTS | swish-e | 0 | No fix |
| Ubuntu:18.04:LTS | coin3 | 0 | No fix |
| Ubuntu:18.04:LTS | firefox | 0 | 67.0.4+build1-0ubuntu0.18.04.1 |
| Ubuntu:18.04:LTS | matanza | 0 | No fix |
| Ubuntu:18.04:LTS | swish-e | 0 | No fix |
| Ubuntu:18.04:LTS | vnc4 | 0 | No fix |
| Ubuntu:20.04:LTS | matanza | 0 | No fix |
| Ubuntu:20.04:LTS | swish-e | 0 | No fix |
| Ubuntu:22.04:LTS | matanza | 0 | No fix |
| Ubuntu:22.04:LTS | swish-e | 0 | No fix |
| Ubuntu:24.04:LTS | audacity | 0 | No fix |
| Ubuntu:24.04:LTS | matanza | 0 | No fix |
| Ubuntu:24.04:LTS | swish-e | 0 | No fix |
| Ubuntu:24.10 | audacity | 0 | No fix |
| Ubuntu:24.10 | matanza | 0 | No fix |
| Ubuntu:24.10 | sitecopy | 0 | No fix |
| Ubuntu:24.10 | swish-e | 0 | No fix |
| Ubuntu:25.04 | matanza | 0 | No fix |
| Ubuntu:25.04 | sitecopy | 0 | No fix |
| Ubuntu:25.04 | swish-e | 0 | No fix |
| Ubuntu:25.10 | matanza | 0 | No fix |
| Ubuntu:25.10 | sitecopy | 0 | No fix |
| Ubuntu:25.10 | swish-e | 0 | No fix |
| Ubuntu:Pro:14.04:LTS | coin3 | 0 | 3.1.4~abc9f50-4ubuntu2+esm1 |
| Ubuntu:Pro:14.04:LTS | vnc4 | 0 | No fix |
| Ubuntu:Pro:16.04:LTS | cableswig | 0 | No fix |
| Ubuntu:Pro:16.04:LTS | coin3 | 0 | 3.1.4~abc9f50+dfsg1-1ubuntu0.1~esm1 |
| Ubuntu:Pro:16.04:LTS | insighttoolkit4 | 0 | No fix |
| Ubuntu:Pro:16.04:LTS | matanza | 0 | No fix |
| Ubuntu:Pro:16.04:LTS | swish-e | 0 | No fix |
| Ubuntu:Pro:16.04:LTS | vnc4 | 0 | No fix |
| Ubuntu:Pro:18.04:LTS | coin3 | 0 | No fix |
| Ubuntu:Pro:18.04:LTS | matanza | 0 | No fix |
| Ubuntu:Pro:18.04:LTS | swish-e | 0 | No fix |
| Ubuntu:Pro:18.04:LTS | vnc4 | 0 | No fix |
| Ubuntu:Pro:20.04:LTS | matanza | 0 | No fix |
| Ubuntu:Pro:20.04:LTS | swish-e | 0 | No fix |
| openSUSE:Tumbleweed | expat | 0 | 2.4.1-1.2 |
Related vulnerabilities
- CVE-2024-28757 libexpat through 2.6.1 allows an XML Entity Expansion attack when there is isolated use… Also affects expat
- CVE-2024-50602 An issue was discovered in libexpat before 2.6.4. Also affects expat
- CVE-2024-45491 An issue was discovered in libexpat before 2.6.3. Also affects expat
- CVE-2024-45492 An issue was discovered in libexpat before 2.6.3. Also affects expat
- CVE-2024-45490 An issue was discovered in libexpat before 2.6.3. Also affects expat
- CVE-2016-4472 The overflow protection in Expat is removed by compilers with certain optimization… Also affects expat
- CVE-2012-6702 Expat, when used in a parser that has not called XML_SetHashSalt or passed it a seed of… Also affects expat
- CVE-2016-0718 Expat allows context-dependent attackers to cause a denial of service (crash) or possibly… Also affects expat