CVE-2024-45491
Critical · 9.8CVSS
9.8
EPSS
1.1%
Published
Aug 30, 2024
CISA due date
—
Cloudanix analysis
A flaw in a widely used library for reading XML data can let attackers crash or take control of programs on older 32-bit computers.
- Exploitation
- Remote Unauthenticated
- Attacker needs
- None
- Complexity
- Low
- Impact
- Remote Code Execution
- Component
- Library
- Class
- Memory Corruption
- Remediation
- Upgrade
- Effort
- Medium
- Patch risk
- Low
What it actually does
Integer overflow in dtdCopy function within xmlparse.c on 32-bit platforms where UINT_MAX equals SIZE_MAX, leading to potential memory corruption when handling nDefaultAtts during DTD copying.
Why it matters to the business
Applications relying on libexpat for XML processing on 32-bit systems face elevated risk of crashes or remote code execution, potentially disrupting services and exposing data across ecosystems with high library prevalence.
How an attack unfolds
An attacker crafts XML input containing a large number of default attributes to trigger the integer overflow during DTD processing in dtdCopy on vulnerable 32-bit builds, resulting in memory corruption that may be leveraged for code execution or denial of service.
How to fix it
Upgrade libexpat to version 2.6.3 or newer by applying the fix from commit 88b3ed553d8ad335559254863a33360d55b9f1d6; rebuild and redeploy all dependent applications after the update.
How to confirm the fix worked
Verify installed libexpat version is 2.6.3 or later; perform regression testing with XML inputs containing large default attribute sets on 32-bit platforms to confirm absence of overflow behavior.
Typical attack path
- Identify target applications using vulnerable libexpat versions for XML parsing
- Craft malicious XML document with excessive default attributes to exceed integer limits
- Deliver the XML payload via network input, file upload, or API request
- Trigger dtdCopy execution path leading to overflow and memory corruption
- Exploit resulting corruption for arbitrary code execution or service disruption
How to detect it
Review application logs for unexpected crashes or memory errors during XML parsing; inspect process dumps or core files for signs of corruption in xmlparse.c paths; correlate with inbound XML traffic containing high attribute counts.
What your security team should do
- Prioritize upgrade of libexpat across all 32-bit deployments within 30 days
- Inventory all software dependencies on libexpat and schedule rebuilds
- Implement input validation or size limits on XML attribute processing as temporary control
- Monitor vendor advisories for downstream packages incorporating the fixed library
The record
An issue was discovered in libexpat before 2.6.3. dtdCopy in xmlparse.c can have an integer overflow for nDefaultAtts on 32-bit platforms (where UINT_MAX equals SIZE_MAX).
Affected packages
| Ecosystem | Package | Introduced | Fixed |
|---|---|---|---|
| AlmaLinux:8 | expat | 0 | 2.2.5-15.el8_10 |
| AlmaLinux:8 | expat-devel | 0 | 2.2.5-15.el8_10 |
| AlmaLinux:8 | xmlrpc-c | 0 | 1.51.0-10.el8_10 |
| AlmaLinux:8 | xmlrpc-c-c++ | 0 | 1.51.0-10.el8_10 |
| AlmaLinux:8 | xmlrpc-c-client | 0 | 1.51.0-10.el8_10 |
| AlmaLinux:8 | xmlrpc-c-client++ | 0 | 1.51.0-10.el8_10 |
| AlmaLinux:8 | xmlrpc-c-devel | 0 | 1.51.0-10.el8_10 |
| AlmaLinux:9 | expat | 0 | 2.5.0-2.el9_4.1 |
| AlmaLinux:9 | expat-devel | 0 | 2.5.0-2.el9_4.1 |
| Alpine:v3.17 | expat | 0 | 2.6.3-r0 |
| Alpine:v3.18 | expat | 0 | 2.6.3-r0 |
| Alpine:v3.19 | expat | 0 | 2.6.3-r0 |
| Alpine:v3.20 | expat | 0 | 2.6.3-r0 |
| Alpine:v3.21 | expat | 0 | 2.6.3-r0 |
| Alpine:v3.22 | expat | 0 | 2.6.3-r0 |
| Debian:11 | expat | 0 | 2.2.10-2+deb11u6 |
| Debian:11 | libxmltok | 0 | No fix |
| Debian:12 | expat | 0 | 2.5.0-1+deb12u1 |
| Debian:12 | libxmltok | 0 | No fix |
| Debian:13 | expat | 0 | 2.6.2-2 |
| Mageia:9 | expat | 0 | 2.6.3-1.mga9 |
| Mageia:9 | mozjs78 | 0 | 78.15.0-7.1.mga9 |
| Red Hat:enterprise_linux:8::baseos | expat | 0 | 0:2.2.5-15.el8_10 |
| Red Hat:enterprise_linux:8::baseos | expat-debuginfo | 0 | 0:2.2.5-15.el8_10 |
| Red Hat:enterprise_linux:8::baseos | expat-debugsource | 0 | 0:2.2.5-15.el8_10 |
| Red Hat:enterprise_linux:8::baseos | expat-devel | 0 | 0:2.2.5-15.el8_10 |
| Red Hat:enterprise_linux:8::baseos | xmlrpc-c | 0 | 0:1.51.0-10.el8_10 |
| Red Hat:enterprise_linux:8::baseos | xmlrpc-c-apps-debuginfo | 0 | 0:1.51.0-10.el8_10 |
| Red Hat:enterprise_linux:8::baseos | xmlrpc-c-c++ | 0 | 0:1.51.0-10.el8_10 |
| Red Hat:enterprise_linux:8::baseos | xmlrpc-c-c++-debuginfo | 0 | 0:1.51.0-10.el8_10 |
| Red Hat:enterprise_linux:8::baseos | xmlrpc-c-client | 0 | 0:1.51.0-10.el8_10 |
| Red Hat:enterprise_linux:8::baseos | xmlrpc-c-client++ | 0 | 0:1.51.0-10.el8_10 |
| Red Hat:enterprise_linux:8::baseos | xmlrpc-c-client++-debuginfo | 0 | 0:1.51.0-10.el8_10 |
| Red Hat:enterprise_linux:8::baseos | xmlrpc-c-client-debuginfo | 0 | 0:1.51.0-10.el8_10 |
| Red Hat:enterprise_linux:8::baseos | xmlrpc-c-debuginfo | 0 | 0:1.51.0-10.el8_10 |
| Red Hat:enterprise_linux:8::baseos | xmlrpc-c-debugsource | 0 | 0:1.51.0-10.el8_10 |
| Red Hat:enterprise_linux:8::baseos | xmlrpc-c-devel | 0 | 0:1.51.0-10.el8_10 |
| Red Hat:enterprise_linux:8::crb | xmlrpc-c | 0 | 0:1.51.0-10.el8_10 |
| Red Hat:enterprise_linux:8::crb | xmlrpc-c-apps-debuginfo | 0 | 0:1.51.0-10.el8_10 |
| Red Hat:enterprise_linux:8::crb | xmlrpc-c-c++ | 0 | 0:1.51.0-10.el8_10 |
| Red Hat:enterprise_linux:8::crb | xmlrpc-c-c++-debuginfo | 0 | 0:1.51.0-10.el8_10 |
| Red Hat:enterprise_linux:8::crb | xmlrpc-c-client | 0 | 0:1.51.0-10.el8_10 |
| Red Hat:enterprise_linux:8::crb | xmlrpc-c-client++ | 0 | 0:1.51.0-10.el8_10 |
| Red Hat:enterprise_linux:8::crb | xmlrpc-c-client++-debuginfo | 0 | 0:1.51.0-10.el8_10 |
| Red Hat:enterprise_linux:8::crb | xmlrpc-c-client-debuginfo | 0 | 0:1.51.0-10.el8_10 |
| Red Hat:enterprise_linux:8::crb | xmlrpc-c-debuginfo | 0 | 0:1.51.0-10.el8_10 |
| Red Hat:enterprise_linux:8::crb | xmlrpc-c-debugsource | 0 | 0:1.51.0-10.el8_10 |
| Red Hat:enterprise_linux:8::crb | xmlrpc-c-devel | 0 | 0:1.51.0-10.el8_10 |
| Red Hat:enterprise_linux:9::appstream | expat | 0 | 0:2.5.0-2.el9_4.1 |
| Red Hat:enterprise_linux:9::appstream | expat-debuginfo | 0 | 0:2.5.0-2.el9_4.1 |
| Red Hat:enterprise_linux:9::appstream | expat-debugsource | 0 | 0:2.5.0-2.el9_4.1 |
| Red Hat:enterprise_linux:9::appstream | expat-devel | 0 | 0:2.5.0-2.el9_4.1 |
| Red Hat:enterprise_linux:9::baseos | expat | 0 | 0:2.5.0-2.el9_4.1 |
| Red Hat:enterprise_linux:9::baseos | expat-debuginfo | 0 | 0:2.5.0-2.el9_4.1 |
| Red Hat:enterprise_linux:9::baseos | expat-debugsource | 0 | 0:2.5.0-2.el9_4.1 |
| Red Hat:enterprise_linux:9::baseos | expat-devel | 0 | 0:2.5.0-2.el9_4.1 |
| Rocky Linux:8 | expat | 0 | 0:2.2.5-15.el8_10 |
| Rocky Linux:8 | xmlrpc-c | 0 | 0:1.51.0-10.el8_10 |
| Rocky Linux:9 | expat | 0 | 0:2.5.0-2.el9_4.1 |
| SUSE:Linux Enterprise Micro 5.1 | expat | 0 | 2.2.5-150000.3.30.1 |
| SUSE:Linux Enterprise Micro 5.2 | expat | 0 | 2.2.5-150000.3.30.1 |
| SUSE:Linux Enterprise Micro 5.2 | mozjs60 | 0 | 60.9.0-150200.6.8.1 |
| SUSE:Linux Enterprise Micro 5.3 | expat | 0 | 2.4.4-150400.3.22.1 |
| SUSE:Linux Enterprise Micro 5.3 | mozjs60 | 0 | 60.9.0-150200.6.8.1 |
| SUSE:Linux Enterprise Micro 5.4 | expat | 0 | 2.4.4-150400.3.22.1 |
| SUSE:Linux Enterprise Micro 5.4 | mozjs60 | 0 | 60.9.0-150200.6.8.1 |
| SUSE:Linux Enterprise Micro 5.5 | expat | 0 | 2.4.4-150400.3.22.1 |
| SUSE:Linux Enterprise Module for Basesystem 15 SP5 | expat | 0 | 2.4.4-150400.3.22.1 |
| SUSE:Linux Enterprise Module for Basesystem 15 SP6 | expat | 0 | 2.4.4-150400.3.22.1 |
| SUSE:Linux Enterprise Module for Basesystem 15 SP7 | mozjs60 | 0 | 60.9.0-150200.6.8.1 |
| SUSE:Linux Enterprise Module for Desktop Applications 15 SP5 | mozjs78 | 0 | 78.15.0-150400.3.6.2 |
| SUSE:Linux Enterprise Module for Desktop Applications 15 SP6 | mozjs115 | 0 | 115.4.0-150600.3.3.1 |
| SUSE:Linux Enterprise Module for Desktop Applications 15 SP7 | mozjs60 | 0 | 60.9.0-150200.6.8.1 |
| SUSE:Linux Enterprise Module for Package Hub 15 SP5 | mozjs78 | 0 | 78.15.0-150400.3.6.2 |
| SUSE:Linux Enterprise Module for Package Hub 15 SP6 | mozjs78 | 0 | 78.15.0-150400.3.6.2 |
| SUSE:Linux Enterprise Module for Package Hub 15 SP7 | mozjs52 | 0 | 52.6.0-150000.3.9.1 |
| SUSE:Linux Enterprise Server 12 SP5 | expat | 0 | 2.1.0-21.37.1 |
| SUSE:Linux Enterprise Server for SAP Applications 12 SP5 | expat | 0 | 2.1.0-21.37.1 |
| SUSE:Linux Enterprise Software Development Kit 12 SP5 | expat | 0 | 2.1.0-21.37.1 |
| Ubuntu:14.04:LTS | xmlrpc-c | 0 | No fix |
| Ubuntu:16.04:LTS | ayttm | 0 | No fix |
| Ubuntu:16.04:LTS | cableswig | 0 | No fix |
| Ubuntu:16.04:LTS | cadaver | 0 | No fix |
| Ubuntu:16.04:LTS | gdcm | 0 | No fix |
| Ubuntu:16.04:LTS | insighttoolkit4 | 0 | No fix |
| Ubuntu:16.04:LTS | matanza | 0 | No fix |
| Ubuntu:16.04:LTS | smart | 0 | No fix |
| Ubuntu:16.04:LTS | swish-e | 0 | No fix |
| Ubuntu:16.04:LTS | tdom | 0 | No fix |
| Ubuntu:16.04:LTS | wbxml2 | 0 | No fix |
| Ubuntu:16.04:LTS | xmlrpc-c | 0 | No fix |
| Ubuntu:18.04:LTS | cadaver | 0 | No fix |
| Ubuntu:18.04:LTS | coin3 | 0 | No fix |
| Ubuntu:18.04:LTS | gdcm | 0 | No fix |
| Ubuntu:18.04:LTS | insighttoolkit4 | 0 | No fix |
| Ubuntu:18.04:LTS | matanza | 0 | No fix |
| Ubuntu:18.04:LTS | smart | 0 | No fix |
| Ubuntu:18.04:LTS | swish-e | 0 | No fix |
| Ubuntu:18.04:LTS | tdom | 0 | No fix |
| Ubuntu:18.04:LTS | vnc4 | 0 | No fix |
| Ubuntu:18.04:LTS | wbxml2 | 0 | No fix |
| Ubuntu:18.04:LTS | xmlrpc-c | 0 | No fix |
| Ubuntu:20.04:LTS | cadaver | 0 | No fix |
| Ubuntu:20.04:LTS | expat | 0 | 2.2.9-1ubuntu0.7 |
| Ubuntu:20.04:LTS | insighttoolkit4 | 0 | No fix |
| Ubuntu:20.04:LTS | libxmltok | 0 | No fix |
| Ubuntu:20.04:LTS | matanza | 0 | No fix |
| Ubuntu:20.04:LTS | swish-e | 0 | No fix |
| Ubuntu:20.04:LTS | tdom | 0 | No fix |
| Ubuntu:20.04:LTS | wbxml2 | 0 | No fix |
| Ubuntu:20.04:LTS | xmlrpc-c | 0 | No fix |
| Ubuntu:22.04:LTS | cadaver | 0 | No fix |
| Ubuntu:22.04:LTS | expat | 0 | 2.4.7-1ubuntu0.4 |
| Ubuntu:22.04:LTS | insighttoolkit4 | 0 | No fix |
| Ubuntu:22.04:LTS | libxmltok | 0 | No fix |
| Ubuntu:22.04:LTS | matanza | 0 | No fix |
| Ubuntu:22.04:LTS | swish-e | 0 | No fix |
| Ubuntu:22.04:LTS | tdom | 0 | No fix |
| Ubuntu:22.04:LTS | wbxml2 | 0 | No fix |
| Ubuntu:22.04:LTS | xmlrpc-c | 0 | No fix |
| Ubuntu:24.04:LTS | cadaver | 0 | No fix |
| Ubuntu:24.04:LTS | expat | 0 | 2.6.1-2ubuntu0.1 |
| Ubuntu:24.04:LTS | libxmltok | 0 | No fix |
| Ubuntu:24.04:LTS | matanza | 0 | No fix |
| Ubuntu:24.04:LTS | swish-e | 0 | No fix |
| Ubuntu:24.04:LTS | tdom | 0 | No fix |
| Ubuntu:24.04:LTS | wbxml2 | 0 | No fix |
| Ubuntu:24.04:LTS | xmlrpc-c | 0 | No fix |
| Ubuntu:24.10 | cadaver | 0 | No fix |
| Ubuntu:24.10 | expat | 0 | 2.6.2-2 |
| Ubuntu:24.10 | libxmltok | 0 | 1.2-4.1ubuntu3 |
| Ubuntu:24.10 | matanza | 0 | No fix |
| Ubuntu:24.10 | swish-e | 0 | No fix |
| Ubuntu:24.10 | tdom | 0 | No fix |
| Ubuntu:24.10 | wbxml2 | 0 | No fix |
| Ubuntu:24.10 | xmlrpc-c | 0 | No fix |
| Ubuntu:25.04 | cadaver | 0 | No fix |
| Ubuntu:25.04 | libxmltok | 0 | 1.2-4.1ubuntu3 |
| Ubuntu:25.04 | matanza | 0 | No fix |
| Ubuntu:25.04 | swish-e | 0 | No fix |
| Ubuntu:25.04 | tdom | 0 | No fix |
| Ubuntu:25.04 | wbxml2 | 0 | No fix |
| Ubuntu:25.04 | xmlrpc-c | 0 | No fix |
| Ubuntu:25.10 | cadaver | 0 | No fix |
| Ubuntu:25.10 | matanza | 0 | No fix |
| Ubuntu:25.10 | swish-e | 0 | No fix |
| Ubuntu:25.10 | tdom | 0 | No fix |
| Ubuntu:25.10 | wbxml2 | 0 | No fix |
| Ubuntu:25.10 | xmlrpc-c | 0 | No fix |
| Ubuntu:Pro:14.04:LTS | coin3 | 0 | No fix |
| Ubuntu:Pro:14.04:LTS | expat | 0 | 2.1.0-4ubuntu1.4+esm9 |
| Ubuntu:Pro:14.04:LTS | vnc4 | 0 | No fix |
| Ubuntu:Pro:14.04:LTS | vtk | 0 | No fix |
| Ubuntu:Pro:14.04:LTS | xmlrpc-c | 0 | No fix |
| Ubuntu:Pro:16.04:LTS | ayttm | 0 | No fix |
| Ubuntu:Pro:16.04:LTS | cableswig | 0 | No fix |
| Ubuntu:Pro:16.04:LTS | cadaver | 0 | No fix |
| Ubuntu:Pro:16.04:LTS | coin3 | 0 | No fix |
| Ubuntu:Pro:16.04:LTS | expat | 0 | 2.1.0-7ubuntu0.16.04.5+esm9 |
| Ubuntu:Pro:16.04:LTS | gdcm | 0 | No fix |
| Ubuntu:Pro:16.04:LTS | insighttoolkit4 | 0 | No fix |
| Ubuntu:Pro:16.04:LTS | libxmltok | 0 | 1.2-3ubuntu0.16.04.1~esm4 |
| Ubuntu:Pro:16.04:LTS | matanza | 0 | No fix |
| Ubuntu:Pro:16.04:LTS | smart | 0 | No fix |
| Ubuntu:Pro:16.04:LTS | swish-e | 0 | No fix |
| Ubuntu:Pro:16.04:LTS | tdom | 0 | No fix |
| Ubuntu:Pro:16.04:LTS | vnc4 | 0 | No fix |
| Ubuntu:Pro:16.04:LTS | vtk | 0 | No fix |
| Ubuntu:Pro:16.04:LTS | wbxml2 | 0 | No fix |
| Ubuntu:Pro:16.04:LTS | xmlrpc-c | 0 | No fix |
| Ubuntu:Pro:18.04:LTS | cadaver | 0 | No fix |
| Ubuntu:Pro:18.04:LTS | coin3 | 0 | No fix |
| Ubuntu:Pro:18.04:LTS | expat | 0 | 2.2.5-3ubuntu0.9+esm1 |
| Ubuntu:Pro:18.04:LTS | gdcm | 0 | No fix |
| Ubuntu:Pro:18.04:LTS | insighttoolkit4 | 0 | No fix |
| Ubuntu:Pro:18.04:LTS | libxmltok | 0 | 1.2-4ubuntu0.18.04.1~esm3 |
| Ubuntu:Pro:18.04:LTS | matanza | 0 | No fix |
| Ubuntu:Pro:18.04:LTS | smart | 0 | No fix |
| Ubuntu:Pro:18.04:LTS | swish-e | 0 | No fix |
| Ubuntu:Pro:18.04:LTS | tdom | 0 | No fix |
| Ubuntu:Pro:18.04:LTS | vnc4 | 0 | No fix |
| Ubuntu:Pro:18.04:LTS | wbxml2 | 0 | No fix |
| Ubuntu:Pro:18.04:LTS | xmlrpc-c | 0 | No fix |
| Ubuntu:Pro:20.04:LTS | cadaver | 0 | No fix |
| Ubuntu:Pro:20.04:LTS | insighttoolkit4 | 0 | No fix |
| Ubuntu:Pro:20.04:LTS | libxmltok | 0 | 1.2-4ubuntu0.20.04.1~esm3 |
| Ubuntu:Pro:20.04:LTS | matanza | 0 | No fix |
| Ubuntu:Pro:20.04:LTS | swish-e | 0 | No fix |
| Ubuntu:Pro:20.04:LTS | tdom | 0 | No fix |
| Ubuntu:Pro:20.04:LTS | wbxml2 | 0 | No fix |
| Ubuntu:Pro:20.04:LTS | xmlrpc-c | 0 | No fix |
| Ubuntu:Pro:22.04:LTS | libxmltok | 0 | 1.2-4ubuntu0.22.04.1~esm3 |
| Ubuntu:Pro:24.04:LTS | libxmltok | 0 | 1.2-4.1ubuntu2.24.0.4.1+esm1 |
| openSUSE:Leap 15.5 | expat | 0 | 2.4.4-150400.3.22.1 |
| openSUSE:Leap 15.5 | mozjs78 | 0 | 78.15.0-150400.3.6.2 |
| openSUSE:Leap 15.6 | expat | 0 | 2.4.4-150400.3.22.1 |
| openSUSE:Leap 15.6 | mozjs115 | 0 | 115.4.0-150600.3.3.1 |
| openSUSE:Leap 15.6 | mozjs52 | 0 | 52.6.0-150000.3.9.1 |
| openSUSE:Leap 15.6 | mozjs60 | 0 | 60.9.0-150200.6.8.1 |
| openSUSE:Leap 15.6 | mozjs78 | 0 | 78.15.0-150400.3.6.2 |
Related vulnerabilities
- CVE-2024-50602 An issue was discovered in libexpat before 2.6.4. 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-2024-28757 libexpat through 2.6.1 allows an XML Entity Expansion attack when there is isolated use… Also affects expat
- CVE-2017-9233 XML External Entity vulnerability in libexpat 2.2.0 and earlier (Expat XML Parser… 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