Skip to content
Heist/ feed
Back to feed
Medium

svg-sanitizer: Mixed-case xlink:HrEf skips the `` nesting-DoS check in Resolver::processReferences

Type: advisorySources: OSV

svg-sanitizer is a PHP SVG/XML sanitizer. Prior to 1.0.0, Resolver::processReferences() in src/ElementReference/Resolver.php builds the SVG reference graph with a case-sensitive href attribute predicate before cleanHrefAttributes() normalizes mixed-case names. An attacker can provide xlink:HrEf on nested 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.

Products
Not specified
Affected versions
Not specified
Fixed versions
Not specified
CVEs
CVE-2026-107381
Confirmed fixed CVEs
Not specified
Updated in this feed
7 Nov 2026, 13:15 UTC · Revision 1

Source evidence

svg-sanitizer: Mixed-case xlink:HrEf skips the `` nesting-DoS check in Resolver::processReferences

core-osv · Original source

Published 14 Oct 2026, 14:53 UTC

svg-sanitizer is a PHP SVG/XML sanitizer. Prior to 1.0.0, Resolver::processReferences() in src/ElementReference/Resolver.php builds the SVG reference graph with a case-sensitive href attribute predicate before cleanHrefAttributes() normalizes mixed-case names. An attacker can provide xlink:HrEf on nested 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.

osv:CVE-2026-107381
Complete source record
{
  "id": "4b4d33b2edb52fbc3b57ad75c7f4d593d3ee6debb7f5363902f9d1d84ebd64ba",
  "url": "https://osv.dev/vulnerability/CVE-2026-107381",
  "method": "structured",
  "payload": {
    "kind": "advisory",
    "title": "svg-sanitizer: Mixed-case xlink:HrEf skips the `` nesting-DoS check in Resolver::processReferences",
    "summary": "svg-sanitizer is a PHP SVG/XML sanitizer. Prior to 1.0.0, Resolver::processReferences() in src/ElementReference/Resolver.php builds the SVG reference graph with a case-sensitive href attribute predicate before cleanHrefAttributes() normalizes mixed-case names. An attacker can provide xlink:HrEf on nested 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.",
    "evidence": "osv:CVE-2026-107381",
    "products": [],
    "severity": "medium",
    "structured": {
      "id": "CVE-2026-107381",
      "aliases": [
        "CVE-2026-107381",
        "GHSA-m9xh-6747-9r6f"
      ],
      "metrics": [
        {
          "type": "CVSS_V3",
          "score": "CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:N/A:H"
        }
      ],
      "affected": [
        {
          "ranges": [
            {
              "repo": "https://github.com/darylldoyle/svg-sanitizer",
              "type": "GIT",
              "events": [
                {
                  "introduced": "0"
                },
                {
                  "fixed": "f3300fcd1bbf67d205b52217c75d0f7d6a8c47ff"
                },
                {
                  "fixed": "2dff6628314de8519155b7feb218bbe132785757"
                }
              ],
              "database_specific": {
                "extracted_events": [
                  {
                    "range": [
                      {
                        "introduced": "0"
                      },
                      {
                        "fixed": "1.0.0"
                      }
                    ],
                    "source": "AFFECTED_FIELD",
                    "strategy": "StringRangeExpression"
                  },
                  {
                    "range": [
                      {
                        "fixed": "2dff6628314de8519155b7feb218bbe132785757"
                      }
                    ],
                    "source": "REFERENCES_COMMIT"
                  },
                  {
                    "range": [
                      {
                        "fixed": "f3300fcd1bbf67d205b52217c75d0f7d6a8c47ff"
                      }
                    ],
                    "source": "REFERENCES_TAG",
                    "original_tag": "1.0.0"
                  }
                ]
              }
            }
          ],
          "versions": [
            "0.22.0",
            "0.21.0",
            "0.20.0",
            "0.19.0",
            "0.18.0",
            "0.17.0",
            "0.16.0",
            "0.15.4",
            "0.15.3",
            "0.15.2",
            "0.15.1",
            "0.15.0",
            "0.14.1",
            "0.14.0",
            "0.13.3",
            "0.13.2",
            "0.10.0",
            "0.9.2",
            "0.9.1",
            "0.9.0",
            "0.8.2",
            "0.8.1",
            "0.8.0",
            "0.7.2",
            "0.7.1",
            "0.7.0",
            "0.6.0",
            "0.5.3.1",
            "0.5.3",
            "0.5.2",
            "0.5.1",
            "0.5.0",
            "0.4.1",
            "0.4.0",
            "0.3.0",
            "0.2.1",
            "0.2.0",
            "0.1.6",
            "0.1.5",
            "0.1.4",
            "0.1.3",
            "0.1.2",
            "0.1.1",
            "0.1.0"
          ],
          "database_specific": {
            "source": "https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-107381.json"
          }
        }
      ],
      "modified": "2026-10-28T02:30:50.638775800Z",
      "provider": "osv",
      "references": [
        "https://github.com/darylldoyle/svg-sanitizer/releases/tag/1.0.0",
        "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/107xxx/CVE-2026-107381.json",
        "https://github.com/darylldoyle/svg-sanitizer/security/advisories/GHSA-m9xh-6747-9r6f",
        "https://nvd.nist.gov/vuln/detail/CVE-2026-107381",
        "https://github.com/darylldoyle/svg-sanitizer/commit/2dff6628314de8519155b7feb218bbe132785757"
      ],
      "provider_metadata": {
        "cwe_ids": [
          "CWE-178",
          "CWE-400"
        ],
        "cna_assigner": "GitHub_M",
        "osv_generated_from": "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/107xxx/CVE-2026-107381.json"
      }
    },
    "related_cves": [
      {
        "value": "CVE-2026-107381",
        "evidence": "/id"
      }
    ],
    "security_relevant": true,
    "severity_evidence": "/severity/0/score"
  },
  "source_id": "core-osv",
  "document_id": 519417,
  "published_at": "2026-10-14T14:53:40.415+00:00"
}