CVE-2025-32415
NoneCVSS
—
EPSS
0.6%
Published
Apr 17, 2025
CISA due date
—
Cloudanix analysis
A flaw in a common library used to check XML files against rules can let attackers crash programs or peek at internal memory when specially crafted files are processed.
- Exploitation
- Requires User Interaction
- Attacker needs
- User Interaction
- Complexity
- Moderate
- Impact
- Data Exposure
- Component
- Library
- Class
- Memory Corruption
- Remediation
- Upgrade
- Effort
- Low
- Patch risk
- Low
What it actually does
Heap-based buffer under-read in xmlSchemaIDCFillNodeTables during XML schema validation with identity constraints, allowing out-of-bounds memory access when processing crafted XML documents or schemas.
Why it matters to the business
Applications processing untrusted XML schemas or documents may crash or leak sensitive memory contents, leading to service disruption and potential exposure of internal data; high ecosystem prevalence increases patching urgency across dependent systems.
How an attack unfolds
An attacker crafts a malicious XML document or schema containing specific identity constraints and supplies it to an application that performs schema validation with libxml2; the vulnerable function then performs an under-read on the heap during node table population.
How to fix it
Upgrade libxml2 to 2.13.8 or 2.14.2 or later; for affected Red Hat Enterprise Linux 8 packages apply mpg123 1.32.9-1.el8_10 or newer; apply the libxml2 commit eb0a2f2b91566384f378d870ffcd69c0a24162cc where source builds are used.
How to confirm the fix worked
Confirm installed libxml2 version meets or exceeds 2.13.8/2.14.2; re-run schema validation test cases with previously crashing inputs; monitor for absence of under-read crashes in validation paths.
Typical attack path
- Identify target application accepting XML input with schema validation
- Craft XML document or schema triggering identity constraint path in xmlschemas.c
- Submit input to trigger xmlSchemaIDCFillNodeTables under-read
- Observe crash for denial of service or inspect leaked heap memory for sensitive data
How to detect it
Review application logs for unexpected crashes or errors during XML schema validation; search process memory dumps or core files for patterns consistent with heap under-reads after XML processing; no public exploitation artifacts are known.
What your security team should do
- Prioritize patching libxml2 in all environments handling XML schema validation due to 559 days since publication
- Inventory and update all dependent packages including mpg123 on Red Hat Enterprise Linux 8
- Disable schema validation for untrusted inputs until patches are applied
- Add XML input sanitization and size limits as defense-in-depth
The record
In libxml2 before 2.13.8 and 2.14.x before 2.14.2, xmlSchemaIDCFillNodeTables in xmlschemas.c has a heap-based buffer under-read. To exploit this, a crafted XML document must be validated against an XML schema with certain identity constraints, or a crafted XML schema must be used.
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-21.el8_10.3 |
| AlmaLinux:8 | libxml2-devel | 0 | 2.9.7-21.el8_10.3 |
| AlmaLinux:8 | python3-libxml2 | 0 | 2.9.7-21.el8_10.3 |
| 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-32414 In libxml2 before 2.13.8 and 2.14.x before 2.14.2, out-of-bounds memory access can occur… 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