CVE-2025-32414
NoneCVSS
—
EPSS
0.4%
Published
Apr 8, 2025
CISA due date
—
Cloudanix analysis
A memory handling mistake in a common XML library used by Python programs can let attackers crash applications or potentially take control of systems until the library is updated.
- Exploitation
- Other
- Attacker needs
- Low Privilege
- Complexity
- Moderate
- Impact
- Other
- Component
- Library
- Class
- Memory Corruption
- Remediation
- Upgrade
- Effort
- Low
- Patch risk
- Low
What it actually does
Out-of-bounds memory access in libxml2 Python bindings triggered by incorrect return value handling in xmlPythonFileRead and xmlPythonFileReadRaw due to bytes-versus-characters mismatch.
Why it matters to the business
Applications using the libxml2 Python API on affected systems may experience crashes, memory corruption, or potential remote code execution, leading to service disruption and increased remediation costs across dependent packages.
How an attack unfolds
An attacker supplies input that exercises the Python file read paths in libxml2, causing the incorrect return value to be used and resulting in out-of-bounds access; no named threat actors or campaigns are associated with this issue.
How to fix it
Upgrade libxml2 to 2.13.8 or 2.14.2 or later; for the listed Red Hat packages apply the updates to openssl 1:1.1.1c-21.el8_2 and for gnome/libxml2 apply commit eb0a2f2b91566384f378d870ffcd69c0a24162cc.
How to confirm the fix worked
Confirm the installed libxml2 version is at or above the fixed releases and test that Python bindings no longer exhibit the return-value mismatch on crafted input.
Typical attack path
- Identify an application that uses libxml2 Python bindings to parse or read XML content
- Craft or supply malicious input that reaches xmlPythonFileRead or xmlPythonFileReadRaw
- Trigger the bytes/characters mismatch to induce out-of-bounds memory access
- Leverage resulting memory corruption for denial of service or code execution
How to detect it
Review application logs and Python traceback entries for errors originating from xmlPythonFileRead or xmlPythonFileReadRaw; inspect process memory dumps for out-of-bounds access patterns after XML parsing operations.
What your security team should do
- Prioritize patching libxml2 in environments with Python bindings in use
- Scan for and update all listed Red Hat openssl and gnome/libxml2 packages to the specified fixed versions
- Monitor EPSS trend and reassess if exploit maturity increases
The record
In libxml2 before 2.13.8 and 2.14.x before 2.14.2, out-of-bounds memory access can occur in the Python API (Python bindings) because of an incorrect return value. This occurs in xmlPythonFileRead and xmlPythonFileReadRaw because of a difference between bytes and characters.
Affected packages
| Ecosystem | Package | Introduced | Fixed |
|---|---|---|---|
| AlmaLinux:10 | libxml2 | 0 | 2.12.5-9.el10_0 |
| AlmaLinux:10 | libxml2-devel | 0 | 2.12.5-9.el10_0 |
| AlmaLinux:10 | libxml2-static | 0 | 2.12.5-9.el10_0 |
| AlmaLinux:10 | python3-libxml2 | 0 | 2.12.5-9.el10_0 |
| AlmaLinux:8 | libxml2 | 0 | 2.9.7-20.el8_10 |
| AlmaLinux:8 | libxml2-devel | 0 | 2.9.7-20.el8_10 |
| AlmaLinux:8 | python3-libxml2 | 0 | 2.9.7-20.el8_10 |
| AlmaLinux:9 | libxml2 | 0 | 2.9.13-12.el9_6 |
| AlmaLinux:9 | libxml2-devel | 0 | 2.9.13-12.el9_6 |
| AlmaLinux:9 | python3-libxml2 | 0 | 2.9.13-12.el9_6 |
| Alpine:v3.18 | libxml2 | 0 | 2.11.8-r3 |
| Alpine:v3.19 | libxml2 | 0 | 2.11.8-r3 |
| Alpine:v3.20 | libxml2 | 0 | 2.12.7-r3 |
| Alpine:v3.21 | libxml2 | 0 | 2.13.4-r6 |
| Alpine:v3.22 | libxml2 | 0 | 2.13.8-r0 |
| Chainguard | openjdk-11-openj9 | 0 | 0.53.0-r0 |
| Chainguard | openjdk-11-openj9-dbg | 0 | 0.53.0-r0 |
| Chainguard | openjdk-11-openj9-default-jdk | 0 | 0.53.0-r0 |
| Chainguard | openjdk-11-openj9-default-jvm | 0 | 0.53.0-r0 |
| Chainguard | openjdk-11-openj9-default-policy | 0 | 0.53.0-r0 |
| Chainguard | openjdk-11-openj9-doc | 0 | 0.53.0-r0 |
| Chainguard | openjdk-11-openj9-jmods | 0 | 0.53.0-r0 |
| Chainguard | openjdk-11-openj9-jre | 0 | 0.53.0-r0 |
| Chainguard | openjdk-17-openj9 | 0 | 0.53.0-r0 |
| Chainguard | openjdk-17-openj9-dbg | 0 | 0.53.0-r0 |
| Chainguard | openjdk-17-openj9-default-jdk | 0 | 0.53.0-r0 |
| Chainguard | openjdk-17-openj9-default-jvm | 0 | 0.53.0-r0 |
| Chainguard | openjdk-17-openj9-default-policy | 0 | 0.53.0-r0 |
| Chainguard | openjdk-17-openj9-doc | 0 | 0.53.0-r0 |
| Chainguard | openjdk-17-openj9-jmods | 0 | 0.53.0-r0 |
| Chainguard | openjdk-17-openj9-jre | 0 | 0.53.0-r0 |
| Chainguard | openjdk-21-openj9 | 0 | 0.53.0-r0 |
| Chainguard | openjdk-21-openj9-dbg | 0 | 0.53.0-r0 |
| Chainguard | openjdk-21-openj9-default-jdk | 0 | 0.53.0-r0 |
| Chainguard | openjdk-21-openj9-default-jvm | 0 | 0.53.0-r0 |
| Chainguard | openjdk-21-openj9-default-policy | 0 | 0.53.0-r0 |
| Chainguard | openjdk-21-openj9-doc | 0 | 0.53.0-r0 |
| Chainguard | openjdk-21-openj9-jmods | 0 | 0.53.0-r0 |
| Chainguard | openjdk-21-openj9-jre | 0 | 0.53.0-r0 |
| Chainguard | openjdk-8-openj9 | 0 | 0.53.0-r1 |
| Chainguard | openjdk-8-openj9-dbg | 0 | 0.53.0-r1 |
| Chainguard | openjdk-8-openj9-default-jdk | 0 | 0.53.0-r1 |
| Chainguard | openjdk-8-openj9-default-jvm | 0 | 0.53.0-r1 |
| Chainguard | openjdk-8-openj9-doc | 0 | 0.53.0-r1 |
| Chainguard | openjdk-8-openj9-jre | 0 | 0.53.0-r1 |
| Debian:11 | libxml2 | 0 | No fix |
| Debian:12 | libxml2 | 0 | No fix |
| Debian:13 | libxml2 | 0 | No fix |
| Debian:13 | libxml2 | 0 | 2.12.7+dfsg+really2.9.14-1 |
| Debian:14 | libxml2 | 0 | 2.12.7+dfsg+really2.9.14-1 |
| Mageia:9 | libxml2 | 0 | 2.10.4-1.7.mga9 |
| SUSE:Linux Enterprise Micro 5.1 | libxml2 | 0 | 2.9.7-150000.3.79.1 |
| SUSE:Linux Enterprise Micro 5.2 | libxml2 | 0 | 2.9.7-150000.3.79.1 |
| SUSE:Linux Enterprise Micro 5.2 | python-libxml2-python | 0 | 2.9.7-150000.3.79.1 |
| SUSE:Linux Enterprise Micro 5.5 | libxml2 | 0 | 2.10.3-150500.5.26.1 |
| SUSE:Linux Enterprise Micro 5.5 | libxml2-python | 0 | 2.10.3-150500.5.26.1 |
| SUSE:Linux Enterprise Module for Basesystem 15 SP6 | libxml2 | 0 | 2.10.3-150500.5.26.1 |
| SUSE:Linux Enterprise Module for Basesystem 15 SP6 | libxml2-python | 0 | 2.10.3-150500.5.26.1 |
| SUSE:Linux Enterprise Module for Python 3 15 SP6 | libxml2-python | 0 | 2.10.3-150500.5.26.1 |
| SUSE:Linux Enterprise Server LTSS Extended Security 12 SP5 | libxml2 | 0 | 2.9.4-46.84.1 |
| SUSE:Linux Enterprise Server LTSS Extended Security 12 SP5 | python-libxml2 | 0 | 2.9.4-46.84.1 |
| openSUSE:Leap 15.6 | libxml2 | 0 | 2.10.3-150500.5.26.1 |
| openSUSE:Leap 15.6 | libxml2-python | 0 | 2.10.3-150500.5.26.1 |
| openSUSE:Leap 15.6 | python-libxml2-python | 0 | 2.9.7-150000.3.79.1 |
| openSUSE:Tumbleweed | libxml2 | 0 | 2.13.8-1.1 |
Related vulnerabilities
- CVE-2025-49796 A vulnerability was found in libxml2. Also affects libxml2
- CVE-2025-49795 A NULL pointer dereference vulnerability was found in libxml2 when processing XPath XML… Also affects libxml2
- CVE-2025-49794 A use-after-free vulnerability was found in libxml2. Also affects libxml2
- CVE-2025-6021 A flaw was found in libxml2's xmlBuildQName function, where integer overflows in buffer… Also affects libxml2
- CVE-2025-32415 In libxml2 before 2.13.8 and 2.14.x before 2.14.2, xmlSchemaIDCFillNodeTables in… Also affects libxml2
- CVE-2025-7425 A flaw was found in libxslt where the attribute type, atype, flags are modified in a way… Also affects libxml2
- CVE-2025-24928 libxml2 before 2.12.10 and 2.13.x before 2.13.6 has a stack-based buffer overflow in… Also affects libxml2
- CVE-2024-56171 libxml2 before 2.12.10 and 2.13.x before 2.13.6 has a use-after-free in… Also affects libxml2