CVE-2026-96889 is a high-severity (CVSS 7.8) Use After Free vulnerability in librsvg. 1 public exploit or proof-of-concept reference is indexed, so weaponization risk is real. A fix is available for librsvg — see the affected versions and patch details below.
Librsvg: Use-after-free when XML includes have duplicated entities
Exploitation Status
Proof-of-concept exploit code exists
- CISA’s SSVC triage found public proof-of-concept exploit code for this CVE, though no confirmed active exploitation.
- A successful exploit gives an attacker total control of the affected component, not partial access.
Exploitation and automatability from CISA’s SSVC triage for CVE-2026-96889.
EPSS Exploitation Probability
Probability of exploitation in the next 30 days, from FIRST.org EPSS.
How urgent is this, really
Where this sits among everything scored
Real-World Exposure
librsvg🦀librsvg🦀librsvg🦀librsvg🦀librsvgReal-time download stats are indexed for npm and PyPI packages. This vulnerability affects crates.io packages — download data is not available via public APIs for these ecosystems.
Description
Librsvg uses libxml2, a C library, to parse XML. When librsvg parses an SVG document which has a nested Xinclude, an XML entity declaration with a duplicate name as an existing one can cause a use-after-free error.
While libxml2 is expanding an internal entity, a recursive XInclude
can parse another document that declares an entity with the same
name. Both parses use the same XmlState entity
map on the librsvg side. entity_insert() replaces the first entry, whose Drop
implementation calls xmlFreeNode(). The outer xmlCtxtParseEntity()
then keeps using the freed 144-byte xmlEntity.
The included parse should not free an entity that the outer parser is still using.
The fix is in commit 8a1b0cd319e9af2d1e9cf878081dd77f227a0504, where librsvg will no longer free xmlEntity pointers that libxml2 is still using.
Affected Packages
| Ecosystem | Package | Vulnerable range | Fix |
|---|---|---|---|
| 🦀crates.io | librsvg | all versions | 2.57.5cargo update -p librsvg --precise 2.57.5 |
| 🦀crates.io | librsvg | ≥ 2.60.0-beta.0&&< 2.60.3 | 2.60.3cargo update -p librsvg --precise 2.60.3 |
| 🦀crates.io | librsvg | ≥ 2.61.0&&< 2.61.5 | 2.61.5cargo update -p librsvg --precise 2.61.5 |
| 🦀crates.io | librsvg | ≥ 2.62.0-beta.0&&< 2.62.4 | 2.62.4cargo update -p librsvg --precise 2.62.4 |
| 🦀crates.io | librsvg | ≥ 2.63.0-beta.0&&< 2.63.2 | 2.63.2cargo update -p librsvg --precise 2.63.2 |
Research use only. For defensive security, authorized penetration testing, and academic research only. Never execute exploit code against systems without explicit written authorization.
Detection & mitigation playbook
Open-source dependencyDetect
Scan your dependency tree (package-lock.json, pnpm-lock.yaml, requirements.txt, go.sum, etc.) for librsvg, including transitive dependencies — a direct dependency you never call can still pull in a vulnerable version.
Fix
Update librsvg to 2.57.5 or later, then make sure no transitive (indirect) dependency still pins the vulnerable range — O3 confirms CVE-2026-96889 is resolved across your whole dependency graph.
Workarounds
Stop feeding it untrusted input: reject or quarantine files and payloads from unverified sources until you can upgrade, restrict accepted formats to the ones you actually need, and run the parsing or decoding step in a least-privileged sandbox or short-lived worker so a crash or corrupted read cannot reach the rest of the process.
Fixing This On Your OS
If you run this on a Linux distribution, patch through your package manager against the distro's own security advisory below — it tracks the exact backported fix for your release, which can ship on a different timeline (and sometimes a different severity) than the upstream project.
This is an Important use-after-free flaw in librsvg, which could lead to arbitrary code execution or denial of service. The vulnerability occurs when processing a specially crafted SVG document containing nested Xincludes with duplicated XML entity declarations. Exploitation requires user interaction, such as opening…
Mitigation for this issue is either not available or the currently available options do not meet the Red Hat Product Security criteria comprising ease of use and deployment, applicability to widespread installation base or stability.Source: Red Hat security advisory for CVE-2026-96889 (CC BY 4.0)
| Product | Fixed in | Advisory |
|---|---|---|
| Red Hat Enterprise Linux 10 | glycin-loaders-0:1.0.1-1.el10_2.2 | RHSA-2026:86331 |
| Red Hat Enterprise Linux 10 | librsvg2-0:2.57.1-9.el10_2.10 | RHSA-2026:86841 |
| Red Hat Enterprise Linux 10.0 Extended Update Support | librsvg2-0:2.57.1-9.el10_0.1 | RHSA-2026:92214 |
| Red Hat Enterprise Linux 10.0 Extended Update Support | glycin-loaders-0:1.0.1-1.el10_0.1 | RHSA-2026:92573 |
| Red Hat Enterprise Linux 7 Extended Lifecycle Support | librsvg2-0:2.40.20-1.el7_9.1 | RHSA-2026:92579 |
| Red Hat Enterprise Linux 8 | librsvg2-0:2.42.7-6.el8_10 | RHSA-2026:86842 |
| Red Hat Enterprise Linux 8.4 Advanced Mission Critical Update Support | librsvg2-0:2.42.7-4.el8_4.1 | RHSA-2026:92353 |
| Red Hat Enterprise Linux 8.6 Advanced Mission Critical Update Support | librsvg2-0:2.42.7-4.el8_6.1 | RHSA-2026:92336 |
Frequently Asked Questions
Is CVE-2026-96889 in your dependencies?
Find it across crates.io, including transitive dependencies.