Skip to content
Heist/ feed
Back to feed
Medium

DiceBear: SVG injection via the unescaped rotate option in @dicebear/core (and fontSize/fontWeight in @dicebear/initials)

Type: advisorySources: OSV

DiceBear is an avatar library for designers and developers. Prior to 9.4.3, @dicebear/core interpolates the rotate option into an SVG transform attribute without XML escaping in addRotate in packages/@dicebear/core/src/utils/svg.ts, while @dicebear/initials similarly emits fontSize and fontWeight without escaping in packages/@dicebear/initials/src/index.ts. Runtime callers can pass strings despite the numeric TypeScript types, break out of the attributes, and inject arbitrary SVG markup. Script can execute in the page origin when the generated avatar is inserted inline or served as image/svg+xml and opened directly, although exploitation requires an application to pass untrusted values into these normally developer-controlled options. This issue is fixed in @dicebear/core and @dicebear/initials version 9.4.3.

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

Source evidence

DiceBear: SVG injection via the unescaped rotate option in @dicebear/core (and fontSize/fontWeight in @dicebear/initials)

core-osv · Original source

Published 20 Aug 2026, 21:08 UTC

DiceBear is an avatar library for designers and developers. Prior to 9.4.3, @dicebear/core interpolates the rotate option into an SVG transform attribute without XML escaping in addRotate in packages/@dicebear/core/src/utils/svg.ts, while @dicebear/initials similarly emits fontSize and fontWeight without escaping in packages/@dicebear/initials/src/index.ts. Runtime callers can pass strings despite the numeric TypeScript types, break out of the attributes, and inject arbitrary SVG markup. Script can execute in the page origin when the generated avatar is inserted inline or served as image/svg+xml and opened directly, although exploitation requires an application to pass untrusted values into these normally developer-controlled options. This issue is fixed in @dicebear/core and @dicebear/initials version 9.4.3.

osv:CVE-2026-68921
Complete source record
{
  "id": "8cd75d148b5c6facb7304414c0ffe85d55f454b3931dc4d8bc18d7f799459e66",
  "url": "https://osv.dev/vulnerability/CVE-2026-68921",
  "method": "structured",
  "payload": {
    "kind": "advisory",
    "title": "DiceBear: SVG injection via the unescaped rotate option in @dicebear/core (and fontSize/fontWeight in @dicebear/initials)",
    "summary": "DiceBear is an avatar library for designers and developers. Prior to 9.4.3, @dicebear/core interpolates the rotate option into an SVG transform attribute without XML escaping in addRotate in packages/@dicebear/core/src/utils/svg.ts, while @dicebear/initials similarly emits fontSize and fontWeight without escaping in packages/@dicebear/initials/src/index.ts. Runtime callers can pass strings despite the numeric TypeScript types, break out of the attributes, and inject arbitrary SVG markup. Script can execute in the page origin when the generated avatar is inserted inline or served as image/svg+xml and opened directly, although exploitation requires an application to pass untrusted values into these normally developer-controlled options. This issue is fixed in @dicebear/core and @dicebear/initials version 9.4.3.",
    "evidence": "osv:CVE-2026-68921",
    "products": [],
    "severity": "medium",
    "structured": {
      "id": "CVE-2026-68921",
      "aliases": [
        "CVE-2026-68921",
        "GHSA-gcr2-9v8m-gq45"
      ],
      "metrics": [
        {
          "type": "CVSS_V3",
          "score": "CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:C/C:L/I:L/A:N"
        }
      ],
      "affected": [
        {
          "ranges": [
            {
              "repo": "https://github.com/dicebear/dicebear",
              "type": "GIT",
              "events": [
                {
                  "introduced": "0"
                },
                {
                  "fixed": "dc3dc40438791cd0bec9ef50512f2baeed53a633"
                },
                {
                  "fixed": "922946d738c4e77ab6c412e27ede75941fec4b59"
                }
              ],
              "database_specific": {
                "extracted_events": [
                  {
                    "range": [
                      {
                        "introduced": "0"
                      },
                      {
                        "fixed": "9.4.3"
                      }
                    ],
                    "source": "AFFECTED_FIELD",
                    "strategy": "StringRangeExpression"
                  },
                  {
                    "range": [
                      {
                        "fixed": "922946d738c4e77ab6c412e27ede75941fec4b59"
                      }
                    ],
                    "source": "REFERENCES_COMMIT"
                  },
                  {
                    "range": [
                      {
                        "fixed": "dc3dc40438791cd0bec9ef50512f2baeed53a633"
                      }
                    ],
                    "source": "REFERENCES_TAG",
                    "original_tag": "v9.4.3"
                  }
                ]
              }
            }
          ],
          "versions": [
            "v9.4.2",
            "v9.4.1",
            "v9.4.0",
            "v9.3.2",
            "v9.3.1",
            "v9.3.0",
            "v9.3.0-alpha.3",
            "v9.3.0-alpha.2",
            "v9.3.0-alpha.1",
            "v9.3.0-alpha.0",
            "v9.2.4",
            "v9.2.3",
            "v9.2.2",
            "v9.2.1",
            "v9.2.0",
            "v9.1.0",
            "v9.0.1",
            "v9.0.0",
            "v8.0.2",
            "v8.0.1",
            "v8.0.0",
            "v7.1.1",
            "v7.1.0",
            "v7.0.5",
            "v7.0.4",
            "v7.0.3",
            "v7.0.2",
            "v5.3.4",
            "v7.0.1",
            "v7.0.0",
            "v7.0.0-rc.3",
            "v7.0.0-rc.2",
            "v7.0.0-rc.1",
            "v7.0.0-rc.0",
            "v6.0.3",
            "v6.0.2",
            "v6.0.1",
            "v6.0.0",
            "v6.0.0-beta.3",
            "v6.0.0-beta.2",
            "v6.0.0-beta.1",
            "v6.0.0-beta.0",
            "v6.0.0-alpha.1",
            "v6.0.0-alpha.0",
            "v5.3.3",
            "v5.2.0",
            "v5.1.6",
            "v5.0.4",
            "v5.3.2",
            "v5.3.1",
            "v5.3.0",
            "v5.1.5",
            "v5.1.4",
            "v5.1.3",
            "v5.1.2",
            "v5.1.1",
            "v5.1.0",
            "v5.0.3",
            "v5.0.2",
            "v5.0.1",
            "v5.0.0",
            "v5.0.0-beta.9",
            "v5.0.0-beta.8",
            "v5.0.0-beta.7",
            "v5.0.0-beta.6",
            "v5.0.0-beta.5",
            "v5.0.0-beta.4",
            "v5.0.0-beta.3",
            "v5.0.0-beta.2",
            "v5.0.0-beta.1",
            "v5.0.0-beta.0",
            "v5.0.0-alpha.36",
            "v5.0.0-alpha.35",
            "v5.0.0-alpha.34",
            "v5.0.0-alpha.33",
            "v5.0.0-alpha.32",
            "v5.0.0-alpha.31",
            "v5.0.0-alpha.30",
            "v5.0.0-alpha.29",
            "v5.0.0-alpha.28",
            "v5.0.0-alpha.27",
            "v5.0.0-alpha.26",
            "v5.0.0-alpha.25",
            "v5.0.0-alpha.24",
            "v5.0.0-alpha.23",
            "v5.0.0-alpha.22",
            "v5.0.0-alpha.21",
            "v5.0.0-alpha.20",
            "v5.0.0-alpha.19",
            "v5.0.0-alpha.18",
            "v4.10.2",
            "v4.10.1",
            "v4.10.0",
            "v4.9.1",
            "v4.9.0",
            "v4.8.6",
            "v4.8.5",
            "v4.8.4",
            "v4.8.3",
            "v4.8.2",
            "v4.8.1",
            "v4.8.0",
            "v4.8.0-alpha.1",
            "v4.8.0-alpha.0",
            "v4.7.4",
            "v4.7.3",
            "v4.7.2",
            "v4.7.1",
            "v4.7.0",
            "v4.7.0-rc.1",
            "v4.6.2",
            "v4.7.0-rc.0",
            "v4.6.1",
            "v4.7.0-alpha.1",
            "v4.7.0-alpha.0",
            "v4.6.0",
            "v4.6.0-rc.4",
            "v4.6.0-rc.3",
            "v4.6.0-rc.2",
            "v4.6.0-rc.1",
            "v4.6.0-rc.0",
            "v4.5.4",
            "v4.5.3",
            "v4.5.2",
            "v4.5.1",
            "v4.5.0",
            "v4.4.1",
            "v4.4.0",
            "v4.3.0",
            "v4.2.5",
            "v4.2.4",
            "v4.2.3",
            "v4.2.2",
            "v4.2.1",
            "v4.2.0",
            "v4.1.1",
            "v4.1.0",
            "v4.1.0-alpha.0",
            "v4.0.8",
            "v4.0.7",
            "v4.0.5",
            "v4.0.4",
            "v4.0.3",
            "v4.0.2",
            "v4.0.1",
            "@dicebear/avatars-human-sprites@1.0.1",
            "@dicebear/avatars@3.1.4",
            "@dicebear/avatars-male-sprites@2.1.4",
            "@dicebear/avatars-jdenticon-sprites@1.1.4",
            "@dicebear/avatars-initials-sprites@1.0.9",
            "@dicebear/avatars-identicon-sprites@2.1.4",
            "@dicebear/avatars-human-sprites@1.0.0",
            "@dicebear/avatars-gridy-sprites@1.1.5",
            "@dicebear/avatars-female-sprites@2.1.4",
            "@dicebear/avatars-bottts-sprites@1.1.4",
            "@dicebear/avatars-avataaars-sprites@1.1.5",
            "@dicebear/avatars-initials-sprites@1.0.8",
            "@dicebear/avatars-initials-sprites@1.0.7",
            "@dicebear/avatars-initials-sprites@1.0.6",
            "@dicebear/avatars-initials-sprites@1.0.5",
            "@dicebear/avatars@3.1.3",
            "@dicebear/avatars-male-sprites@2.1.3",
            "@dicebear/avatars-jdenticon-sprites@1.1.3",
            "@dicebear/avatars-initials-sprites@1.0.4",
            "@dicebear/avatars-identicon-sprites@2.1.3",
            "@dicebear/avatars-gridy-sprites@1.1.4",
            "@dicebear/avatars-female-sprites@2.1.3",
            "@dicebear/avatars-bottts-sprites@1.1.3",
            "@dicebear/avatars-avataaars-sprites@1.1.4",
            "@dicebear/avatars@3.1.2",
            "@dicebear/avatars-male-sprites@2.1.2",
            "@dicebear/avatars-jdenticon-sprites@1.1.2",
            "@dicebear/avatars-initials-sprites@1.0.3",
            "@dicebear/avatars-identicon-sprites@2.1.2",
            "@dicebear/avatars-gridy-sprites@1.1.3",
            "@dicebear/avatars-female-sprites@2.1.2",
            "@dicebear/avatars-bottts-sprites@1.1.2",
            "@dicebear/avatars-avataaars-sprites@1.1.3",
            "@dicebear/avatars-gridy-sprites@1.1.2",
            "@dicebear/avatars-initials-sprites@1.0.2",
            "@dicebear/avatars-avataaars-sprites@1.1.2",
            "@dicebear/avatars@3.1.1",
            "@dicebear/avatars-male-sprites@2.1.1",
            "@dicebear/avatars-jdenticon-sprites@1.1.1",
            "@dicebear/avatars-initials-sprites@1.0.1",
            "@dicebear/avatars-identicon-sprites@2.1.1",
            "@dicebear/avatars-gridy-sprites@1.1.1",
            "@dicebear/avatars-female-sprites@2.1.1",
            "@dicebear/avatars-bottts-sprites@1.1.1",
            "@dicebear/avatars-avataaars-sprites@1.1.1",
            "@dicebear/avatars@3.2.0",
            "@dicebear/avatars-male-sprites@2.1.0",
            "@dicebear/avatars-jdenticon-sprites@1.1.0",
            "@dicebear/avatars-initials-sprites@1.0.0",
            "@dicebear/avatars-identicon-sprites@2.1.0",
            "@dicebear/avatars-gridy-sprites@1.1.0",
            "@dicebear/avatars-female-sprites@2.1.0",
            "@dicebear/avatars-bottts-sprites@1.1.0",
            "@dicebear/avatars-avataaars-sprites@1.1.0",
            "@dicebear/avatars@3.0.7",
            "@dicebear/avatars-male-sprites@2.0.7",
            "@dicebear/avatars-jdenticon-sprites@1.0.4",
            "@dicebear/avatars-identicon-sprites@2.0.7",
            "@dicebear/avatars-gridy-sprites@1.0.12",
            "@dicebear/avatars-female-sprites@2.0.7",
            "@dicebear/avatars-bottts-sprites@1.0.0",
            "@dicebear/avatars-avataaars-sprites@1.0.10",
            "@dicebear/avatars@3.0.6",
            "@dicebear/avatars-male-sprites@2.0.6",
            "@dicebear/avatars-jdenticon-sprites@1.0.3",
            "@dicebear/avatars-identicon-sprites@2.0.6",
            "@dicebear/avatars-gridy-sprites@1.0.11",
            "@dicebear/avatars-female-sprites@2.0.6",
            "@dicebear/avatars-avataaars-sprites@1.0.9",
            "@dicebear/avatars@3.0.5",
            "@dicebear/avatars-male-sprites@2.0.5",
            "@dicebear/avatars-jdenticon-sprites@1.0.2",
            "@dicebear/avatars-identicon-sprites@2.0.5",
            "@dicebear/avatars-gridy-sprites@1.0.10",
            "@dicebear/avatars-female-sprites@2.0.5",
            "@dicebear/avatars-avataaars-sprites@1.0.8",
            "@dicebear/avatars@3.0.4",
            "@dicebear/avatars-male-sprites@2.0.4",
            "@dicebear/avatars-jdenticon-sprites@1.0.1",
            "@dicebear/avatars-identicon-sprites@2.0.4",
            "@dicebear/avatars-gridy-sprites@1.0.9",
            "@dicebear/avatars-female-sprites@2.0.4",
            "@dicebear/avatars-avataaars-sprites@1.0.7",
            "@dicebear/avatars-jdenticon-sprites@1.0.0-alpha.0",
            "@dicebear/avatars-gridy-sprites@1.0.8",
            "@dicebear/avatars-avataaars-sprites@1.0.6",
            "@dicebear/avatars-avataaars-sprites@1.0.5",
            "@dicebear/avatars-gridy-sprites@1.0.7",
            "@dicebear/avatars-avataaars-sprites@1.0.4",
            "@dicebear/avatars@3.0.3",
            "@dicebear/avatars-male-sprites@2.0.3",
            "@dicebear/avatars-identicon-sprites@2.0.3",
            "@dicebear/avatars-gridy-sprites@1.0.6",
            "@dicebear/avatars-female-sprites@2.0.3",
            "@dicebear/avatars-avataaars-sprites@1.0.3",
            "@dicebear/avatars@3.0.2",
            "@dicebear/avatars-male-sprites@2.0.2",
            "@dicebear/avatars-identicon-sprites@2.0.2",
            "@dicebear/avatars-gridy-sprites@1.0.5",
            "@dicebear/avatars-female-sprites@2.0.2",
            "@dicebear/avatars-avataaars-sprites@1.0.2",
            "v2.0.4",
            "v2.0.3",
            "v2.0.2",
            "v2.0.1",
            "v2.0.0",
            "1.0.1",
            "1.0.0",
            "v0.2.4",
            "0.2.3",
            "0.2.2",
            "0.2.1",
            "0.2.0"
          ],
          "database_specific": {
            "source": "https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-68921.json"
          }
        }
      ],
      "modified": "2026-10-28T02:30:35.751554168Z",
      "provider": "osv",
      "references": [
        "https://github.com/dicebear/dicebear/releases/tag/v9.4.3",
        "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/68xxx/CVE-2026-68921.json",
        "https://github.com/dicebear/dicebear/security/advisories/GHSA-gcr2-9v8m-gq45",
        "https://nvd.nist.gov/vuln/detail/CVE-2026-68921",
        "https://github.com/dicebear/dicebear/commit/922946d738c4e77ab6c412e27ede75941fec4b59"
      ],
      "provider_metadata": {
        "cwe_ids": [
          "CWE-184",
          "CWE-79"
        ],
        "cna_assigner": "GitHub_M",
        "osv_generated_from": "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/68xxx/CVE-2026-68921.json"
      }
    },
    "related_cves": [
      {
        "value": "CVE-2026-68921",
        "evidence": "/id"
      }
    ],
    "security_relevant": true,
    "severity_evidence": "/severity/0/score"
  },
  "source_id": "core-osv",
  "document_id": 502898,
  "published_at": "2026-08-20T21:08:43.813+00:00"
}