CVE-2025-24855
NoneCVSS
—
EPSS
0.4%
Published
Mar 14, 2025
CISA due date
—
Cloudanix analysis
A bug in a common XML processing library can let attackers crash programs or take control when handling specially crafted documents, so organizations should update the library everywhere it is used.
- Exploitation
- Requires User Interaction
- Attacker needs
- User Interaction
- Complexity
- Moderate
- Impact
- Full Compromise
- Component
- Library
- Class
- Use After Free
- Remediation
- Upgrade
- Effort
- Medium
- Patch risk
- Low
What it actually does
Use-after-free in libxslt numbers.c during nested XPath evaluations where an XPath context node is modified in xsltNumberFormatGetValue, xsltEvalXPathPredicate, xsltEvalXPathStringNs or xsltComputeSortResultInternal but never restored, allowing memory corruption.
Why it matters to the business
Applications that process untrusted XML or XSLT documents with libxslt may crash or allow arbitrary code execution, potentially disrupting document transformation workflows and requiring emergency updates across dependent systems.
How an attack unfolds
An attacker supplies a malicious XSLT stylesheet or XML input that triggers nested XPath evaluations involving number formatting or sorting; the library fails to restore the context node, resulting in a dangling pointer that can be leveraged to corrupt memory and execute attacker-controlled code.
How to fix it
Upgrade libxslt to the commit 71be7a32637760d769b193d95e0c745ecb86b679 or later release containing the fix; rebuild and redeploy all dependent applications; validate that no older versions remain in build pipelines or container images.
How to confirm the fix worked
Confirm the installed libxslt version or git commit hash matches or exceeds 71be7a32637760d769b193d95e0c745ecb86b679; run regression tests exercising nested XPath number formatting and sorting; scan dependency manifests for the vulnerable version string.
Typical attack path
- Identify application endpoints or workflows accepting XSLT or XML input processed by libxslt
- Craft nested XPath expressions targeting xsltNumberFormatGetValue or sort routines
- Trigger use-after-free via modified context node during evaluation
- Leverage resulting memory corruption for code execution or denial of service
How to detect it
Review application logs for crashes or abnormal behavior during XSLT processing; inspect core dumps or memory analysis for use-after-free patterns in XPath evaluation functions; search package managers and build logs for references to vulnerable libxslt versions prior to the fix commit.
What your security team should do
- Immediately inventory all systems and containers using libxslt and prioritize upgrade to the fixed commit
- Add libxslt version checks to CI/CD pipelines and container scanning tools
- Monitor for any new exploit code given the age of the disclosure and low but rising EPSS
- Review applications that accept user-supplied XSLT for additional input sanitization
The record
numbers.c in libxslt before 1.1.43 has a use-after-free because, in nested XPath evaluations, an XPath context node can be modified but never restored. This is related to xsltNumberFormatGetValue, xsltEvalXPathPredicate, xsltEvalXPathStringNs, and xsltComputeSortResultInternal.
Affected packages
| Ecosystem | Package | Introduced | Fixed |
|---|---|---|---|
| AlmaLinux:10 | libxslt | 0 | 1.1.39-7.el10_0 |
| AlmaLinux:10 | libxslt-devel | 0 | 1.1.39-7.el10_0 |
| AlmaLinux:8 | libxslt | 0 | 1.1.32-6.1.el8_10 |
| AlmaLinux:8 | libxslt-devel | 0 | 1.1.32-6.1.el8_10 |
| AlmaLinux:9 | libxslt | 0 | 1.1.34-9.el9_5.1 |
| AlmaLinux:9 | libxslt-devel | 0 | 1.1.34-9.el9_5.1 |
| Alpine:v3.18 | libxslt | 0 | 1.1.38-r1 |
| Alpine:v3.19 | libxslt | 0 | 1.1.39-r1 |
| Alpine:v3.20 | libxslt | 0 | 1.1.39-r2 |
| Alpine:v3.21 | libxslt | 0 | 1.1.42-r2 |
| Alpine:v3.22 | libxslt | 0 | 1.1.43-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 | libxslt | 0 | No fix |
| Debian:11 | libxslt | 0 | 1.1.34-4+deb11u2 |
| Debian:12 | libxslt | 0 | No fix |
| Debian:12 | libxslt | 0 | 1.1.35-1+deb12u1 |
| Debian:13 | libxslt | 0 | No fix |
| Debian:14 | libxslt | 0 | 1.1.35-1.2 |
| Mageia:9 | libxslt | 0 | 1.1.38-1.1.mga9 |
| SUSE:Enterprise Storage 7.1 | libxslt | 0 | 1.1.32-150000.3.17.1 |
| SUSE:Linux Enterprise High Performance Computing 15 SP3-LTSS | libxslt | 0 | 1.1.32-150000.3.17.1 |
| SUSE:Linux Enterprise High Performance Computing 15 SP4-ESPOS | libxslt | 0 | 1.1.34-150400.3.6.1 |
| SUSE:Linux Enterprise High Performance Computing 15 SP4-LTSS | libxslt | 0 | 1.1.34-150400.3.6.1 |
| SUSE:Linux Enterprise High Performance Computing 15 SP5-ESPOS | libxslt | 0 | 1.1.34-150400.3.6.1 |
| SUSE:Linux Enterprise High Performance Computing 15 SP5-LTSS | libxslt | 0 | 1.1.34-150400.3.6.1 |
| SUSE:Linux Enterprise Micro 5.1 | libxslt | 0 | 1.1.32-150000.3.17.1 |
| SUSE:Linux Enterprise Micro 5.2 | libxslt | 0 | 1.1.32-150000.3.17.1 |
| SUSE:Linux Enterprise Micro 5.3 | libxslt | 0 | 1.1.34-150400.3.6.1 |
| SUSE:Linux Enterprise Micro 5.4 | libxslt | 0 | 1.1.34-150400.3.6.1 |
| SUSE:Linux Enterprise Micro 5.5 | libxslt | 0 | 1.1.34-150400.3.6.1 |
| SUSE:Linux Enterprise Module for Basesystem 15 SP6 | libxslt | 0 | 1.1.34-150400.3.6.1 |
| SUSE:Linux Enterprise Module for Package Hub 15 SP6 | libxslt | 0 | 1.1.34-150400.3.6.1 |
| SUSE:Linux Enterprise Server 15 SP3-LTSS | libxslt | 0 | 1.1.32-150000.3.17.1 |
| SUSE:Linux Enterprise Server 15 SP4-LTSS | libxslt | 0 | 1.1.34-150400.3.6.1 |
| SUSE:Linux Enterprise Server 15 SP5-LTSS | libxslt | 0 | 1.1.34-150400.3.6.1 |
| SUSE:Linux Enterprise Server for SAP Applications 15 SP3 | libxslt | 0 | 1.1.32-150000.3.17.1 |
| SUSE:Linux Enterprise Server for SAP Applications 15 SP4 | libxslt | 0 | 1.1.34-150400.3.6.1 |
| SUSE:Linux Enterprise Server for SAP Applications 15 SP5 | libxslt | 0 | 1.1.34-150400.3.6.1 |
| SUSE:Manager Proxy 4.3 | libxslt | 0 | 1.1.34-150400.3.6.1 |
| SUSE:Manager Server 4.3 | libxslt | 0 | 1.1.34-150400.3.6.1 |
| openSUSE:Leap 15.6 | libxslt | 0 | 1.1.34-150400.3.6.1 |
| openSUSE:Leap 15.6 | libxslt-python | 0 | 1.1.32-150000.3.17.1 |
| openSUSE:Tumbleweed | libqt5-qtwebengine | 0 | 5.15.19-1.1 |
| openSUSE:Tumbleweed | libxslt | 0 | 1.1.43-1.1 |
Related vulnerabilities
- CVE-2024-55549 xsltGetInheritedNsList in libxslt before 1.1.43 has a use-after-free issue related to… Also affects libxslt
- CVE-2023-40403 The issue was addressed with improved memory handling. Also affects libxslt
- CVE-2019-13117 In numbers.c in libxslt 1.1.33, an xsl:number with certain format strings could lead to a… Also affects libxslt
- CVE-2019-11068 libxslt through 1.1.33 allows bypass of a protection mechanism because callers of… Also affects libxslt
- CVE-2017-5029 The xsltAddTextString function in transform.c in libxslt 1.1.29, as used in Blink in… Also affects libxslt
- CVE-2026-21945 Vulnerability in the Oracle Java SE, Oracle GraalVM for JDK, Oracle GraalVM Enterprise… Also affects openjdk-11-openj9
- CVE-2026-21932 Vulnerability in the Oracle Java SE, Oracle GraalVM for JDK, Oracle GraalVM Enterprise… Also affects openjdk-11-openj9
- CVE-2026-21933 Vulnerability in the Oracle Java SE, Oracle GraalVM for JDK, Oracle GraalVM Enterprise… Also affects openjdk-11-openj9