Mixed-case xlink:HrEf bypasses use nesting limit in svg-sanitizer
Key facts
- Attack vector
- Network
- Privileges required
- None
- User interaction
- Required
- Attack complexity
- Low
- Impact type
- Denial of service
- Confidentiality · integrity · availability
- None · None · High
- Fix status
- Fixed
Attack profile from CVSS 3.1 · CNA. Fix status from CNA and GitHub. Impact type from CWE-400.
Summary
svg-sanitizer before 1.0.0 by darylldoyle, and the Packagist package enshrined/svg-sanitize before 1.0.0, matches the href attribute case-sensitively when it builds the use element reference graph. A mixed-case xlink:HrEf attribute on nested use elements is therefore skipped (CWE-178), and the sanitizer returns the nesting without applying its nesting limit. An unauthenticated remote attacker can supply an SVG that exhausts resources in an application that renders the sanitized output.
Written with Claude Haiku 5.5 from the sources below · 2026-10-28
Description from the CNA
svg-sanitizer is a PHP SVG/XML sanitizer. Prior to 1.0.0, Resolver::processReferences() in src/ElementReference/Resolver.php builds the SVG <use> reference graph with a case-sensitive href attribute predicate before cleanHrefAttributes() normalizes mixed-case names. An attacker can provide xlink:HrEf on nested <use> elements so the graph omits those references, after which the sanitizer converts the attribute to canonical xlink:href and returns the live nesting structure without applying the useNestingLimit protection. A consuming application that renders the sanitized SVG can therefore be exposed to the resource exhaustion that control is designed to prevent. This issue is fixed in version 1.0.0.
Why it matters now
SSVC decision points
CISA ADP · SSVC 2.0.3
- Exploitation
- Poc
- Automatable
- No
- Technical impact
- Partial
The decision (Track, Attend, Act) also depends on your mission and well-being impact; see CISA's SSVC guide.
Affected products
| Vendor | Product | Affected versions | Fixed in | Status | Source |
|---|---|---|---|---|---|
| darylldoyle | svg-sanitizer | before 1.0.0 | 1.0.0 | Patch available | CNA |
| — | enshrined/svg-sanitize (Packagist) | before 1.0.0 | 1.0.0 | Patch available | GHSA-m9xh-6747-9r6f |
- svg-sanitizer Vendordarylldoyle Affected before 1.0.0 Fixed in 1.0.0 Patch available CNA
- enshrined/svg-sanitize (Packagist) Vendor— Affected before 1.0.0 Fixed in 1.0.0 Patch available GHSA-m9xh-6747-9r6f
Remediation
The Packagist package enshrined/svg-sanitize is fixed in 1.0.0, and the source description states that version 1.0.0 fixes this issue. The sources list no fixed version for svg-sanitizer.
Written with Claude Haiku 5.5 from the sources below · 2026-10-28
- Fix · CNA svg-sanitizer (darylldoyle) Fixed in 1.0.0
- Fix · GHSA-m9xh-6747-9r6f enshrined/svg-sanitize (Packagist) Fixed in 1.0.0 Advisory →
Timeline
- 2026-10-14 Threatist record created from CVE-2026-107381
- 2026-10-16 Priority changed: MEDIUM → LOW
- 2026-10-18 CISA SSVC decision points changed
- 2026-10-18 Priority changed: LOW → MEDIUM
References
More darylldoyle vulnerabilities
- TI-2026-81116 Quadratic CPU exhaustion in svg-sanitizer PHP tag stripping CVSS 4.0HIGH 8.7
- TI-2026-84327 svg-sanitizer ReDoS and Fail-Open via image-set CSS Stripping CVSS 4.0HIGH 8.2
- TI-2026-69645 Denial of service in enshrined/svg-sanitize via crafted SVG DTD CVSS 3.1MEDIUM 6.5
- TI-2026-84328 Incomplete url() filtering in svg-sanitizer allows remote URL requests CVSS 4.0MEDIUM 5.3
- TI-2026-81115 darylldoyle svg-sanitizer CSS Injection and Remote Reference Bypass CVSS 4.0MEDIUM 5.1
- TI-2025-34848 svg-sanitizer By-Passing Attribute Sanitization CVSS 4.0MEDIUM 5.1
Sources
This product uses the NVD API but is not endorsed or certified by the NVD. Sources and licences