CVE-2026-54889 (GCVE-0-2026-54889)

Vulnerability from cvelistv5 – Published: 2026-06-29 19:10 – Updated: 2026-06-30 04:38
VLAI
Title
Unsanitized URL schemes in MDEx Quill Delta output allow javascript: injection (XSS)
Summary
Improper Neutralization of Input During Web Page Generation (XSS) vulnerability in leandrocp mdex allows cross-site scripting via unsanitized URL schemes in Quill Delta output. 'Elixir.MDEx':to_delta/2 converts Markdown into a Quill Delta. 'Elixir.MDEx.DeltaConverter':default_convert_node/3 in lib/mdex/delta_converter.ex copies the URL of a link, wikilink, or image node directly from the parsed Markdown into the Delta "link" or "image" attribute without applying a scheme allowlist or any normalization. An attacker who controls the Markdown text can supply a javascript: URL (for example [click](javascript:alert(document.cookie))) that survives verbatim into the Delta attribute. When the Delta is rendered to HTML by a downstream renderer (such as quill-delta-to-html or the Quill client), the attribute becomes an <a href> or <img src>, and the javascript: scheme executes in the browser of anyone who views the rendered content. The link and wikilink cases are the strongest vectors because javascript: in an href executes on click; the image case is lower impact because javascript: in <img src> generally does not execute in modern browsers. This issue affects mdex: from 0.8.3 before 0.13.2.
SSVC
Exploitation: poc Automatable: no Technical Impact: partial
CISA Coordinator · CISA-ADP (v2.0.3)
Decision recorded 2026-06-29 20:48 UTC
CWE
  • CWE-79 - Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting')
Impacted products
Vendor Product Version CPE status
leandrocp mdex Affected: 0.8.3 , < 0.13.2 (semver)
    cpe:2.3:a:leandrocp:mdex:*:*:*:*:*:*:*:*
Create a notification for this product.
leandrocp mdex Affected: 9852db2456fdc9d856eb636603a7f608e22e3793 , < 2817147f5b87ce7186aa604c9ee72499485b8f2f (git)
    cpe:2.3:a:leandrocp:mdex:*:*:*:*:*:*:*:*
Create a notification for this product.
Show details on NVD website

{
  "containers": {
    "adp": [
      {
        "metrics": [
          {
            "other": {
              "content": {
                "id": "CVE-2026-54889",
                "options": [
                  {
                    "Exploitation": "poc"
                  },
                  {
                    "Automatable": "no"
                  },
                  {
                    "Technical Impact": "partial"
                  }
                ],
                "role": "CISA Coordinator",
                "timestamp": "2026-06-29T20:48:34.044130Z",
                "version": "2.0.3"
              },
              "type": "ssvc"
            }
          }
        ],
        "providerMetadata": {
          "dateUpdated": "2026-06-29T20:48:52.206Z",
          "orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
          "shortName": "CISA-ADP"
        },
        "references": [
          {
            "tags": [
              "exploit"
            ],
            "url": "https://github.com/leandrocp/mdex/security/advisories/GHSA-4383-7xfp-gpph"
          }
        ],
        "title": "CISA ADP Vulnrichment"
      }
    ],
    "cna": {
      "affected": [
        {
          "collectionURL": "https://repo.hex.pm",
          "cpes": [
            "cpe:2.3:a:leandrocp:mdex:*:*:*:*:*:*:*:*"
          ],
          "defaultStatus": "unaffected",
          "modules": [
            "\u0027Elixir.MDEx\u0027",
            "\u0027Elixir.MDEx.DeltaConverter\u0027"
          ],
          "packageName": "mdex",
          "packageURL": "pkg:hex/mdex",
          "product": "mdex",
          "programFiles": [
            "lib/mdex.ex",
            "lib/mdex/delta_converter.ex"
          ],
          "programRoutines": [
            {
              "name": "\u0027Elixir.MDEx\u0027:to_delta/2"
            },
            {
              "name": "\u0027Elixir.MDEx.DeltaConverter\u0027:convert/2"
            },
            {
              "name": "\u0027Elixir.MDEx.DeltaConverter\u0027:default_convert_node/3"
            }
          ],
          "repo": "https://github.com/leandrocp/mdex",
          "vendor": "leandrocp",
          "versions": [
            {
              "lessThan": "0.13.2",
              "status": "affected",
              "version": "0.8.3",
              "versionType": "semver"
            }
          ]
        },
        {
          "collectionURL": "https://github.com",
          "cpes": [
            "cpe:2.3:a:leandrocp:mdex:*:*:*:*:*:*:*:*"
          ],
          "defaultStatus": "unaffected",
          "modules": [
            "\u0027Elixir.MDEx\u0027",
            "\u0027Elixir.MDEx.DeltaConverter\u0027"
          ],
          "packageName": "leandrocp/mdex",
          "packageURL": "pkg:github/leandrocp/mdex",
          "product": "mdex",
          "programFiles": [
            "lib/mdex.ex",
            "lib/mdex/delta_converter.ex"
          ],
          "programRoutines": [
            {
              "name": "\u0027Elixir.MDEx\u0027:to_delta/2"
            },
            {
              "name": "\u0027Elixir.MDEx.DeltaConverter\u0027:convert/2"
            },
            {
              "name": "\u0027Elixir.MDEx.DeltaConverter\u0027:default_convert_node/3"
            }
          ],
          "repo": "https://github.com/leandrocp/mdex",
          "vendor": "leandrocp",
          "versions": [
            {
              "lessThan": "2817147f5b87ce7186aa604c9ee72499485b8f2f",
              "status": "affected",
              "version": "9852db2456fdc9d856eb636603a7f608e22e3793",
              "versionType": "git"
            }
          ]
        }
      ],
      "configurations": [
        {
          "lang": "en",
          "supportingMedia": [
            {
              "base64": false,
              "type": "text/html",
              "value": "\u003cp\u003eThe application must pass untrusted Markdown to \u003ctt\u003e\u0027Elixir.MDEx\u0027:to_delta/2\u003c/tt\u003e and then render the resulting Quill Delta to HTML with a renderer that maps the \u003ctt\u003e\"link\"\u003c/tt\u003e and \u003ctt\u003e\"image\"\u003c/tt\u003e attributes to \u003ctt\u003ehref\u003c/tt\u003e and \u003ctt\u003esrc\u003c/tt\u003e without applying its own URL scheme sanitization (for example \u003ctt\u003equill-delta-to-html\u003c/tt\u003e or the Quill client).\u003c/p\u003e"
            }
          ],
          "value": "The application must pass untrusted Markdown to \u0027Elixir.MDEx\u0027:to_delta/2 and then render the resulting Quill Delta to HTML with a renderer that maps the \"link\" and \"image\" attributes to href and src without applying its own URL scheme sanitization (for example quill-delta-to-html or the Quill client)."
        }
      ],
      "cpeApplicability": [
        {
          "nodes": [
            {
              "cpeMatch": [
                {
                  "criteria": "cpe:2.3:a:leandrocp:mdex:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "0.13.2",
                  "versionStartIncluding": "0.8.3",
                  "vulnerable": true
                }
              ],
              "negate": false,
              "operator": "OR"
            }
          ],
          "operator": "AND"
        }
      ],
      "credits": [
        {
          "lang": "en",
          "type": "finder",
          "value": "Peter Ullrich"
        },
        {
          "lang": "en",
          "type": "remediation developer",
          "value": "Leandro Pereira"
        },
        {
          "lang": "en",
          "type": "analyst",
          "value": "Jonatan M\u00e4nnchen / EEF"
        }
      ],
      "descriptions": [
        {
          "lang": "en",
          "supportingMedia": [
            {
              "base64": false,
              "type": "text/html",
              "value": "Improper Neutralization of Input During Web Page Generation (XSS) vulnerability in leandrocp mdex allows cross-site scripting via unsanitized URL schemes in Quill Delta output.\u003cp\u003e\u003ctt\u003e\u0027Elixir.MDEx\u0027:to_delta/2\u003c/tt\u003e converts Markdown into a Quill Delta. \u003ctt\u003e\u0027Elixir.MDEx.DeltaConverter\u0027:default_convert_node/3\u003c/tt\u003e in \u003ctt\u003elib/mdex/delta_converter.ex\u003c/tt\u003e copies the URL of a link, wikilink, or image node directly from the parsed Markdown into the Delta \u003ctt\u003e\"link\"\u003c/tt\u003e or \u003ctt\u003e\"image\"\u003c/tt\u003e attribute without applying a scheme allowlist or any normalization.\u003c/p\u003e\u003cp\u003eAn attacker who controls the Markdown text can supply a \u003ctt\u003ejavascript:\u003c/tt\u003e URL (for example \u003ctt\u003e[click](javascript:alert(document.cookie))\u003c/tt\u003e) that survives verbatim into the Delta attribute. When the Delta is rendered to HTML by a downstream renderer (such as \u003ctt\u003equill-delta-to-html\u003c/tt\u003e or the Quill client), the attribute becomes an \u003ctt\u003e\u0026lt;a href\u0026gt;\u003c/tt\u003e or \u003ctt\u003e\u0026lt;img src\u0026gt;\u003c/tt\u003e, and the \u003ctt\u003ejavascript:\u003c/tt\u003e scheme executes in the browser of anyone who views the rendered content. The link and wikilink cases are the strongest vectors because \u003ctt\u003ejavascript:\u003c/tt\u003e in an \u003ctt\u003ehref\u003c/tt\u003e executes on click; the image case is lower impact because \u003ctt\u003ejavascript:\u003c/tt\u003e in \u003ctt\u003e\u0026lt;img src\u0026gt;\u003c/tt\u003e generally does not execute in modern browsers.\u003c/p\u003e\u003cp\u003eThis issue affects mdex: from 0.8.3 before 0.13.2.\u003c/p\u003e"
            }
          ],
          "value": "Improper Neutralization of Input During Web Page Generation (XSS) vulnerability in leandrocp mdex allows cross-site scripting via unsanitized URL schemes in Quill Delta output.\n\n\u0027Elixir.MDEx\u0027:to_delta/2 converts Markdown into a Quill Delta. \u0027Elixir.MDEx.DeltaConverter\u0027:default_convert_node/3 in lib/mdex/delta_converter.ex copies the URL of a link, wikilink, or image node directly from the parsed Markdown into the Delta \"link\" or \"image\" attribute without applying a scheme allowlist or any normalization.\n\nAn attacker who controls the Markdown text can supply a javascript: URL (for example [click](javascript:alert(document.cookie))) that survives verbatim into the Delta attribute. When the Delta is rendered to HTML by a downstream renderer (such as quill-delta-to-html or the Quill client), the attribute becomes an \u003ca href\u003e or \u003cimg src\u003e, and the javascript: scheme executes in the browser of anyone who views the rendered content. The link and wikilink cases are the strongest vectors because javascript: in an href executes on click; the image case is lower impact because javascript: in \u003cimg src\u003e generally does not execute in modern browsers.\n\nThis issue affects mdex: from 0.8.3 before 0.13.2."
        }
      ],
      "impacts": [
        {
          "capecId": "CAPEC-244",
          "descriptions": [
            {
              "lang": "en",
              "value": "CAPEC-244 XSS Targeting URI Placeholders"
            }
          ]
        }
      ],
      "metrics": [
        {
          "cvssV4_0": {
            "attackComplexity": "LOW",
            "attackRequirements": "NONE",
            "attackVector": "NETWORK",
            "baseScore": 5.1,
            "baseSeverity": "MEDIUM",
            "privilegesRequired": "NONE",
            "subAvailabilityImpact": "NONE",
            "subConfidentialityImpact": "LOW",
            "subIntegrityImpact": "LOW",
            "userInteraction": "ACTIVE",
            "vectorString": "CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:A/VC:L/VI:L/VA:N/SC:L/SI:L/SA:N",
            "version": "4.0",
            "vulnAvailabilityImpact": "NONE",
            "vulnConfidentialityImpact": "LOW",
            "vulnIntegrityImpact": "LOW"
          },
          "format": "CVSS",
          "scenarios": [
            {
              "lang": "en",
              "value": "GENERAL"
            }
          ]
        }
      ],
      "problemTypes": [
        {
          "descriptions": [
            {
              "cweId": "CWE-79",
              "description": "CWE-79 Improper Neutralization of Input During Web Page Generation (\u0027Cross-site Scripting\u0027)",
              "lang": "en",
              "type": "CWE"
            }
          ]
        }
      ],
      "providerMetadata": {
        "dateUpdated": "2026-06-30T04:38:42.158Z",
        "orgId": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db",
        "shortName": "EEF"
      },
      "references": [
        {
          "tags": [
            "vendor-advisory",
            "related"
          ],
          "url": "https://github.com/leandrocp/mdex/security/advisories/GHSA-4383-7xfp-gpph"
        },
        {
          "tags": [
            "related"
          ],
          "url": "https://cna.erlef.org/cves/CVE-2026-54889.html"
        },
        {
          "tags": [
            "related"
          ],
          "url": "https://osv.dev/vulnerability/EEF-CVE-2026-54889"
        },
        {
          "tags": [
            "patch"
          ],
          "url": "https://github.com/leandrocp/mdex/commit/2817147f5b87ce7186aa604c9ee72499485b8f2f"
        }
      ],
      "source": {
        "discovery": "EXTERNAL"
      },
      "title": "Unsanitized URL schemes in MDEx Quill Delta output allow javascript: injection (XSS)",
      "workarounds": [
        {
          "lang": "en",
          "supportingMedia": [
            {
              "base64": false,
              "type": "text/html",
              "value": "\u003cp\u003eSanitize the Quill Delta produced by \u003ctt\u003e\u0027Elixir.MDEx\u0027:to_delta/2\u003c/tt\u003e before rendering it: drop or blank any \u003ctt\u003e\"link\"\u003c/tt\u003e or \u003ctt\u003e\"image\"\u003c/tt\u003e value whose URL scheme is not in a safe allowlist (\u003ctt\u003ehttp\u003c/tt\u003e, \u003ctt\u003ehttps\u003c/tt\u003e, \u003ctt\u003emailto\u003c/tt\u003e, \u003ctt\u003etel\u003c/tt\u003e).\u003c/p\u003e"
            }
          ],
          "value": "Sanitize the Quill Delta produced by \u0027Elixir.MDEx\u0027:to_delta/2 before rendering it: drop or blank any \"link\" or \"image\" value whose URL scheme is not in a safe allowlist (http, https, mailto, tel)."
        }
      ],
      "x_generator": {
        "engine": "cvelib 1.8.0"
      }
    }
  },
  "cveMetadata": {
    "assignerOrgId": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db",
    "assignerShortName": "EEF",
    "cveId": "CVE-2026-54889",
    "datePublished": "2026-06-29T19:10:49.841Z",
    "dateReserved": "2026-06-16T10:47:13.915Z",
    "dateUpdated": "2026-06-30T04:38:42.158Z",
    "state": "PUBLISHED"
  },
  "dataType": "CVE_RECORD",
  "dataVersion": "5.2",
  "vulnerability-lookup:meta": {
    "epss": {
      "cve": "CVE-2026-54889",
      "date": "2026-10-04",
      "epss": "0.00538",
      "percentile": "0.43333"
    },
    "nvd": {
      "cve": {
        "affected": [
          {
            "affectedData": [
              {
                "collectionURL": "https://repo.hex.pm",
                "cpes": [
                  "cpe:2.3:a:leandrocp:mdex:*:*:*:*:*:*:*:*"
                ],
                "defaultStatus": "unaffected",
                "modules": [
                  "\u0027Elixir.MDEx\u0027",
                  "\u0027Elixir.MDEx.DeltaConverter\u0027"
                ],
                "packageName": "mdex",
                "packageURL": "pkg:hex/mdex",
                "product": "mdex",
                "programFiles": [
                  "lib/mdex.ex",
                  "lib/mdex/delta_converter.ex"
                ],
                "programRoutines": [
                  {
                    "name": "\u0027Elixir.MDEx\u0027:to_delta/2"
                  },
                  {
                    "name": "\u0027Elixir.MDEx.DeltaConverter\u0027:convert/2"
                  },
                  {
                    "name": "\u0027Elixir.MDEx.DeltaConverter\u0027:default_convert_node/3"
                  }
                ],
                "repo": "https://github.com/leandrocp/mdex",
                "vendor": "leandrocp",
                "versions": [
                  {
                    "lessThan": "0.13.2",
                    "status": "affected",
                    "version": "0.8.3",
                    "versionType": "semver"
                  }
                ]
              },
              {
                "collectionURL": "https://github.com",
                "cpes": [
                  "cpe:2.3:a:leandrocp:mdex:*:*:*:*:*:*:*:*"
                ],
                "defaultStatus": "unaffected",
                "modules": [
                  "\u0027Elixir.MDEx\u0027",
                  "\u0027Elixir.MDEx.DeltaConverter\u0027"
                ],
                "packageName": "leandrocp/mdex",
                "packageURL": "pkg:github/leandrocp/mdex",
                "product": "mdex",
                "programFiles": [
                  "lib/mdex.ex",
                  "lib/mdex/delta_converter.ex"
                ],
                "programRoutines": [
                  {
                    "name": "\u0027Elixir.MDEx\u0027:to_delta/2"
                  },
                  {
                    "name": "\u0027Elixir.MDEx.DeltaConverter\u0027:convert/2"
                  },
                  {
                    "name": "\u0027Elixir.MDEx.DeltaConverter\u0027:default_convert_node/3"
                  }
                ],
                "repo": "https://github.com/leandrocp/mdex",
                "vendor": "leandrocp",
                "versions": [
                  {
                    "lessThan": "2817147f5b87ce7186aa604c9ee72499485b8f2f",
                    "status": "affected",
                    "version": "9852db2456fdc9d856eb636603a7f608e22e3793",
                    "versionType": "git"
                  }
                ]
              }
            ],
            "source": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db"
          }
        ],
        "cveTags": [],
        "descriptions": [
          {
            "lang": "en",
            "value": "Improper Neutralization of Input During Web Page Generation (XSS) vulnerability in leandrocp mdex allows cross-site scripting via unsanitized URL schemes in Quill Delta output.\n\n\u0027Elixir.MDEx\u0027:to_delta/2 converts Markdown into a Quill Delta. \u0027Elixir.MDEx.DeltaConverter\u0027:default_convert_node/3 in lib/mdex/delta_converter.ex copies the URL of a link, wikilink, or image node directly from the parsed Markdown into the Delta \"link\" or \"image\" attribute without applying a scheme allowlist or any normalization.\n\nAn attacker who controls the Markdown text can supply a javascript: URL (for example [click](javascript:alert(document.cookie))) that survives verbatim into the Delta attribute. When the Delta is rendered to HTML by a downstream renderer (such as quill-delta-to-html or the Quill client), the attribute becomes an \u003ca href\u003e or \u003cimg src\u003e, and the javascript: scheme executes in the browser of anyone who views the rendered content. The link and wikilink cases are the strongest vectors because javascript: in an href executes on click; the image case is lower impact because javascript: in \u003cimg src\u003e generally does not execute in modern browsers.\n\nThis issue affects mdex: from 0.8.3 before 0.13.2."
          }
        ],
        "id": "CVE-2026-54889",
        "lastModified": "2026-06-30T14:14:35.520",
        "metrics": {
          "cvssMetricV40": [
            {
              "cvssData": {
                "Automatable": "NOT_DEFINED",
                "Recovery": "NOT_DEFINED",
                "Safety": "NOT_DEFINED",
                "attackComplexity": "LOW",
                "attackRequirements": "NONE",
                "attackVector": "NETWORK",
                "availabilityRequirement": "NOT_DEFINED",
                "baseScore": 5.1,
                "baseSeverity": "MEDIUM",
                "confidentialityRequirement": "NOT_DEFINED",
                "exploitMaturity": "NOT_DEFINED",
                "integrityRequirement": "NOT_DEFINED",
                "modifiedAttackComplexity": "NOT_DEFINED",
                "modifiedAttackRequirements": "NOT_DEFINED",
                "modifiedAttackVector": "NOT_DEFINED",
                "modifiedPrivilegesRequired": "NOT_DEFINED",
                "modifiedSubAvailabilityImpact": "NOT_DEFINED",
                "modifiedSubConfidentialityImpact": "NOT_DEFINED",
                "modifiedSubIntegrityImpact": "NOT_DEFINED",
                "modifiedUserInteraction": "NOT_DEFINED",
                "modifiedVulnAvailabilityImpact": "NOT_DEFINED",
                "modifiedVulnConfidentialityImpact": "NOT_DEFINED",
                "modifiedVulnIntegrityImpact": "NOT_DEFINED",
                "privilegesRequired": "NONE",
                "providerUrgency": "NOT_DEFINED",
                "subAvailabilityImpact": "NONE",
                "subConfidentialityImpact": "LOW",
                "subIntegrityImpact": "LOW",
                "userInteraction": "ACTIVE",
                "valueDensity": "NOT_DEFINED",
                "vectorString": "CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:A/VC:L/VI:L/VA:N/SC:L/SI:L/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X",
                "version": "4.0",
                "vulnAvailabilityImpact": "NONE",
                "vulnConfidentialityImpact": "LOW",
                "vulnIntegrityImpact": "LOW",
                "vulnerabilityResponseEffort": "NOT_DEFINED"
              },
              "source": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db",
              "type": "Secondary"
            }
          ],
          "ssvcV203": [
            {
              "source": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
              "ssvcData": {
                "id": "CVE-2026-54889",
                "options": [
                  {
                    "exploitation": "poc"
                  },
                  {
                    "automatable": "no"
                  },
                  {
                    "technicalImpact": "partial"
                  }
                ],
                "role": "CISA Coordinator",
                "timestamp": "2026-06-29T20:48:34.044130Z",
                "version": "2.0.3"
              }
            }
          ]
        },
        "published": "2026-06-29T20:17:39.407",
        "references": [
          {
            "source": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db",
            "url": "https://cna.erlef.org/cves/CVE-2026-54889.html"
          },
          {
            "source": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db",
            "url": "https://github.com/leandrocp/mdex/commit/2817147f5b87ce7186aa604c9ee72499485b8f2f"
          },
          {
            "source": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db",
            "url": "https://github.com/leandrocp/mdex/security/advisories/GHSA-4383-7xfp-gpph"
          },
          {
            "source": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db",
            "url": "https://osv.dev/vulnerability/EEF-CVE-2026-54889"
          },
          {
            "source": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
            "url": "https://github.com/leandrocp/mdex/security/advisories/GHSA-4383-7xfp-gpph"
          }
        ],
        "sourceIdentifier": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db",
        "vulnStatus": "Deferred",
        "weaknesses": [
          {
            "description": [
              {
                "lang": "en",
                "value": "CWE-79"
              }
            ],
            "source": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db",
            "type": "Secondary"
          }
        ]
      }
    },
    "vulnrichment": {
      "containers": {
        "adp": [
          {
            "metrics": [
              {
                "other": {
                  "content": {
                    "id": "CVE-2026-54889",
                    "options": [
                      {
                        "Exploitation": "poc"
                      },
                      {
                        "Automatable": "no"
                      },
                      {
                        "Technical Impact": "partial"
                      }
                    ],
                    "role": "CISA Coordinator",
                    "timestamp": "2026-06-29T20:48:34.044130Z",
                    "version": "2.0.3"
                  },
                  "type": "ssvc"
                }
              }
            ],
            "providerMetadata": {
              "dateUpdated": "2026-06-29T20:48:47.453Z",
              "orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
              "shortName": "CISA-ADP"
            },
            "references": [
              {
                "tags": [
                  "exploit"
                ],
                "url": "https://github.com/leandrocp/mdex/security/advisories/GHSA-4383-7xfp-gpph"
              }
            ],
            "title": "CISA ADP Vulnrichment"
          }
        ],
        "cna": {
          "affected": [
            {
              "collectionURL": "https://repo.hex.pm",
              "cpes": [
                "cpe:2.3:a:leandrocp:mdex:*:*:*:*:*:*:*:*"
              ],
              "defaultStatus": "unaffected",
              "modules": [
                "\u0027Elixir.MDEx\u0027",
                "\u0027Elixir.MDEx.DeltaConverter\u0027"
              ],
              "packageName": "mdex",
              "packageURL": "pkg:hex/mdex",
              "product": "mdex",
              "programFiles": [
                "lib/mdex.ex",
                "lib/mdex/delta_converter.ex"
              ],
              "programRoutines": [
                {
                  "name": "\u0027Elixir.MDEx\u0027:to_delta/2"
                },
                {
                  "name": "\u0027Elixir.MDEx.DeltaConverter\u0027:convert/2"
                },
                {
                  "name": "\u0027Elixir.MDEx.DeltaConverter\u0027:default_convert_node/3"
                }
              ],
              "repo": "https://github.com/leandrocp/mdex",
              "vendor": "leandrocp",
              "versions": [
                {
                  "lessThan": "0.13.2",
                  "status": "affected",
                  "version": "0.8.3",
                  "versionType": "semver"
                }
              ]
            },
            {
              "collectionURL": "https://github.com",
              "cpes": [
                "cpe:2.3:a:leandrocp:mdex:*:*:*:*:*:*:*:*"
              ],
              "defaultStatus": "unaffected",
              "modules": [
                "\u0027Elixir.MDEx\u0027",
                "\u0027Elixir.MDEx.DeltaConverter\u0027"
              ],
              "packageName": "leandrocp/mdex",
              "packageURL": "pkg:github/leandrocp/mdex",
              "product": "mdex",
              "programFiles": [
                "lib/mdex.ex",
                "lib/mdex/delta_converter.ex"
              ],
              "programRoutines": [
                {
                  "name": "\u0027Elixir.MDEx\u0027:to_delta/2"
                },
                {
                  "name": "\u0027Elixir.MDEx.DeltaConverter\u0027:convert/2"
                },
                {
                  "name": "\u0027Elixir.MDEx.DeltaConverter\u0027:default_convert_node/3"
                }
              ],
              "repo": "https://github.com/leandrocp/mdex",
              "vendor": "leandrocp",
              "versions": [
                {
                  "lessThan": "2817147f5b87ce7186aa604c9ee72499485b8f2f",
                  "status": "affected",
                  "version": "9852db2456fdc9d856eb636603a7f608e22e3793",
                  "versionType": "git"
                }
              ]
            }
          ],
          "configurations": [
            {
              "lang": "en",
              "supportingMedia": [
                {
                  "base64": false,
                  "type": "text/html",
                  "value": "\u003cp\u003eThe application must pass untrusted Markdown to \u003ctt\u003e\u0027Elixir.MDEx\u0027:to_delta/2\u003c/tt\u003e and then render the resulting Quill Delta to HTML with a renderer that maps the \u003ctt\u003e\"link\"\u003c/tt\u003e and \u003ctt\u003e\"image\"\u003c/tt\u003e attributes to \u003ctt\u003ehref\u003c/tt\u003e and \u003ctt\u003esrc\u003c/tt\u003e without applying its own URL scheme sanitization (for example \u003ctt\u003equill-delta-to-html\u003c/tt\u003e or the Quill client).\u003c/p\u003e"
                }
              ],
              "value": "The application must pass untrusted Markdown to \u0027Elixir.MDEx\u0027:to_delta/2 and then render the resulting Quill Delta to HTML with a renderer that maps the \"link\" and \"image\" attributes to href and src without applying its own URL scheme sanitization (for example quill-delta-to-html or the Quill client)."
            }
          ],
          "cpeApplicability": [
            {
              "nodes": [
                {
                  "cpeMatch": [
                    {
                      "criteria": "cpe:2.3:a:leandrocp:mdex:*:*:*:*:*:*:*:*",
                      "versionEndExcluding": "0.13.2",
                      "versionStartIncluding": "0.8.3",
                      "vulnerable": true
                    }
                  ],
                  "negate": false,
                  "operator": "OR"
                }
              ],
              "operator": "AND"
            }
          ],
          "credits": [
            {
              "lang": "en",
              "type": "finder",
              "value": "Peter Ullrich"
            },
            {
              "lang": "en",
              "type": "remediation developer",
              "value": "Leandro Pereira"
            },
            {
              "lang": "en",
              "type": "analyst",
              "value": "Jonatan M\u00e4nnchen / EEF"
            }
          ],
          "descriptions": [
            {
              "lang": "en",
              "supportingMedia": [
                {
                  "base64": false,
                  "type": "text/html",
                  "value": "Improper Neutralization of Input During Web Page Generation (XSS) vulnerability in leandrocp mdex allows cross-site scripting via unsanitized URL schemes in Quill Delta output.\u003cp\u003e\u003ctt\u003e\u0027Elixir.MDEx\u0027:to_delta/2\u003c/tt\u003e converts Markdown into a Quill Delta. \u003ctt\u003e\u0027Elixir.MDEx.DeltaConverter\u0027:default_convert_node/3\u003c/tt\u003e in \u003ctt\u003elib/mdex/delta_converter.ex\u003c/tt\u003e copies the URL of a link, wikilink, or image node directly from the parsed Markdown into the Delta \u003ctt\u003e\"link\"\u003c/tt\u003e or \u003ctt\u003e\"image\"\u003c/tt\u003e attribute without applying a scheme allowlist or any normalization.\u003c/p\u003e\u003cp\u003eAn attacker who controls the Markdown text can supply a \u003ctt\u003ejavascript:\u003c/tt\u003e URL (for example \u003ctt\u003e[click](javascript:alert(document.cookie))\u003c/tt\u003e) that survives verbatim into the Delta attribute. When the Delta is rendered to HTML by a downstream renderer (such as \u003ctt\u003equill-delta-to-html\u003c/tt\u003e or the Quill client), the attribute becomes an \u003ctt\u003e\u0026lt;a href\u0026gt;\u003c/tt\u003e or \u003ctt\u003e\u0026lt;img src\u0026gt;\u003c/tt\u003e, and the \u003ctt\u003ejavascript:\u003c/tt\u003e scheme executes in the browser of anyone who views the rendered content. The link and wikilink cases are the strongest vectors because \u003ctt\u003ejavascript:\u003c/tt\u003e in an \u003ctt\u003ehref\u003c/tt\u003e executes on click; the image case is lower impact because \u003ctt\u003ejavascript:\u003c/tt\u003e in \u003ctt\u003e\u0026lt;img src\u0026gt;\u003c/tt\u003e generally does not execute in modern browsers.\u003c/p\u003e\u003cp\u003eThis issue affects mdex: from 0.8.3 before 0.13.2.\u003c/p\u003e"
                }
              ],
              "value": "Improper Neutralization of Input During Web Page Generation (XSS) vulnerability in leandrocp mdex allows cross-site scripting via unsanitized URL schemes in Quill Delta output.\n\n\u0027Elixir.MDEx\u0027:to_delta/2 converts Markdown into a Quill Delta. \u0027Elixir.MDEx.DeltaConverter\u0027:default_convert_node/3 in lib/mdex/delta_converter.ex copies the URL of a link, wikilink, or image node directly from the parsed Markdown into the Delta \"link\" or \"image\" attribute without applying a scheme allowlist or any normalization.\n\nAn attacker who controls the Markdown text can supply a javascript: URL (for example [click](javascript:alert(document.cookie))) that survives verbatim into the Delta attribute. When the Delta is rendered to HTML by a downstream renderer (such as quill-delta-to-html or the Quill client), the attribute becomes an \u003ca href\u003e or \u003cimg src\u003e, and the javascript: scheme executes in the browser of anyone who views the rendered content. The link and wikilink cases are the strongest vectors because javascript: in an href executes on click; the image case is lower impact because javascript: in \u003cimg src\u003e generally does not execute in modern browsers.\n\nThis issue affects mdex: from 0.8.3 before 0.13.2."
            }
          ],
          "impacts": [
            {
              "capecId": "CAPEC-244",
              "descriptions": [
                {
                  "lang": "en",
                  "value": "CAPEC-244 XSS Targeting URI Placeholders"
                }
              ]
            }
          ],
          "metrics": [
            {
              "cvssV4_0": {
                "attackComplexity": "LOW",
                "attackRequirements": "NONE",
                "attackVector": "NETWORK",
                "baseScore": 5.1,
                "baseSeverity": "MEDIUM",
                "privilegesRequired": "NONE",
                "subAvailabilityImpact": "NONE",
                "subConfidentialityImpact": "LOW",
                "subIntegrityImpact": "LOW",
                "userInteraction": "ACTIVE",
                "vectorString": "CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:A/VC:L/VI:L/VA:N/SC:L/SI:L/SA:N",
                "version": "4.0",
                "vulnAvailabilityImpact": "NONE",
                "vulnConfidentialityImpact": "LOW",
                "vulnIntegrityImpact": "LOW"
              },
              "format": "CVSS",
              "scenarios": [
                {
                  "lang": "en",
                  "value": "GENERAL"
                }
              ]
            }
          ],
          "problemTypes": [
            {
              "descriptions": [
                {
                  "cweId": "CWE-79",
                  "description": "CWE-79 Improper Neutralization of Input During Web Page Generation (\u0027Cross-site Scripting\u0027)",
                  "lang": "en",
                  "type": "CWE"
                }
              ]
            }
          ],
          "providerMetadata": {
            "dateUpdated": "2026-06-30T04:38:42.158Z",
            "orgId": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db",
            "shortName": "EEF"
          },
          "references": [
            {
              "tags": [
                "vendor-advisory",
                "related"
              ],
              "url": "https://github.com/leandrocp/mdex/security/advisories/GHSA-4383-7xfp-gpph"
            },
            {
              "tags": [
                "related"
              ],
              "url": "https://cna.erlef.org/cves/CVE-2026-54889.html"
            },
            {
              "tags": [
                "related"
              ],
              "url": "https://osv.dev/vulnerability/EEF-CVE-2026-54889"
            },
            {
              "tags": [
                "patch"
              ],
              "url": "https://github.com/leandrocp/mdex/commit/2817147f5b87ce7186aa604c9ee72499485b8f2f"
            }
          ],
          "source": {
            "discovery": "EXTERNAL"
          },
          "title": "Unsanitized URL schemes in MDEx Quill Delta output allow javascript: injection (XSS)",
          "workarounds": [
            {
              "lang": "en",
              "supportingMedia": [
                {
                  "base64": false,
                  "type": "text/html",
                  "value": "\u003cp\u003eSanitize the Quill Delta produced by \u003ctt\u003e\u0027Elixir.MDEx\u0027:to_delta/2\u003c/tt\u003e before rendering it: drop or blank any \u003ctt\u003e\"link\"\u003c/tt\u003e or \u003ctt\u003e\"image\"\u003c/tt\u003e value whose URL scheme is not in a safe allowlist (\u003ctt\u003ehttp\u003c/tt\u003e, \u003ctt\u003ehttps\u003c/tt\u003e, \u003ctt\u003emailto\u003c/tt\u003e, \u003ctt\u003etel\u003c/tt\u003e).\u003c/p\u003e"
                }
              ],
              "value": "Sanitize the Quill Delta produced by \u0027Elixir.MDEx\u0027:to_delta/2 before rendering it: drop or blank any \"link\" or \"image\" value whose URL scheme is not in a safe allowlist (http, https, mailto, tel)."
            }
          ],
          "x_generator": {
            "engine": "cvelib 1.8.0"
          }
        }
      },
      "cveMetadata": {
        "assignerOrgId": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db",
        "assignerShortName": "EEF",
        "cveId": "CVE-2026-54889",
        "datePublished": "2026-06-29T19:10:49.841Z",
        "dateReserved": "2026-06-16T10:47:13.915Z",
        "dateUpdated": "2026-06-30T04:38:42.158Z",
        "state": "PUBLISHED"
      },
      "dataType": "CVE_RECORD",
      "dataVersion": "5.2"
    }
  }
}



Log in or create an account to share your comment.




Tags
Taxonomy of the tags.


Loading…

Loading…

Loading…

Forecast uses a logistic model when the trend is rising, or an exponential decay model when the trend is falling. Fitted via linearized least squares.

Sightings

Author Source Type Date Other

Nomenclature

  • Seen: The vulnerability was mentioned, discussed, or observed by the user.
  • Confirmed: The vulnerability has been validated from an analyst's perspective.
  • Published Proof of Concept: A public proof of concept is available for this vulnerability.
  • Exploited: The vulnerability was observed as exploited by the user who reported the sighting.
  • Patched: The vulnerability was observed as successfully patched by the user who reported the sighting.
  • Not exploited: The vulnerability was not observed as exploited by the user who reported the sighting.
  • Not confirmed: The user expressed doubt about the validity of the vulnerability.
  • Not patched: The vulnerability was not observed as successfully patched by the user who reported the sighting.

Loading…

Loading…

Loading…

Related by attack behaviour

Vulnerabilities whose description is nearest to this one in the vector space of the CIRCL/vulnerability-attack-technique-biencoder model. This is a similarity search over the bi-encoder space (plain cosine), not a classification, and it has no measured accuracy.


Loading…