CVE-2026-66370 (GCVE-0-2026-66370)

Vulnerability from cvelistv5 – Published: 2026-08-06 14:49 – Updated: 2026-08-19 11:51
VLAI
Title
html_sanitize_ex HTML5 scrubber keeps attacker-supplied form-association attributes, allowing form hijacking
Summary
URL Redirection to Untrusted Site ('Open Redirect') vulnerability in the HTML5 scrubber in rrrene html_sanitize_ex allows an unauthenticated remote attacker to retarget a form already on the rendering page and receive whatever the victim submits, including credentials, via the form and formaction attributes on an <input> element in sanitized HTML. HTML's form attribute associates an input with any form on the page by its id even when the input sits outside that form, and formaction on a submit control overrides the owning form's action. Neither attribute receives a scheme check, so an absolute cross-origin URL survives sanitizing. No script executes. The scrubber allows neither form nor button, so the attacker cannot introduce a form of their own and the rendering page must already contain a form carrying an id. This issue affects html_sanitize_ex: from 0.3.1 before 1.4.5 and from 1.5.0-rc.0 before 1.5.3.
SSVC
Exploitation: none Automatable: no Technical Impact: partial
CISA Coordinator · CISA-ADP (v2.0.3)
Decision recorded 2026-08-06 15:42 UTC
CWE
  • CWE-601 - URL Redirection to Untrusted Site ('Open Redirect')
Assigner
EEF CNA under the mitre root
CNA scorecard A 96/100 over 318 records in the last 180 days details
Impacted products
Vendor Product Version CPE status
rrrene html_sanitize_ex Affected: 0.3.1 , < 1.4.5 (semver)
Affected: 1.5.0-rc.0 , < 1.5.3 (semver)
    cpe:2.3:a:rrrene:html_sanitize_ex:*:*:*:*:*:*:*:*
Create a notification for this product.
rrrene html_sanitize_ex Affected: 8976d64ea0b77d26093a94a43ec48a3978e8d028 , < * (git)
    cpe:2.3:a:rrrene:html_sanitize_ex:*:*:*:*:*:*:*:*
Create a notification for this product.
Show details on NVD website

{
  "containers": {
    "adp": [
      {
        "metrics": [
          {
            "other": {
              "content": {
                "id": "CVE-2026-66370",
                "options": [
                  {
                    "Exploitation": "none"
                  },
                  {
                    "Automatable": "no"
                  },
                  {
                    "Technical Impact": "partial"
                  }
                ],
                "role": "CISA Coordinator",
                "timestamp": "2026-08-06T15:42:03.803831Z",
                "version": "2.0.3"
              },
              "type": "ssvc"
            }
          }
        ],
        "providerMetadata": {
          "dateUpdated": "2026-08-06T15:42:09.603Z",
          "orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
          "shortName": "CISA-ADP"
        },
        "title": "CISA ADP Vulnrichment"
      }
    ],
    "cna": {
      "affected": [
        {
          "collectionURL": "https://repo.hex.pm",
          "cpes": [
            "cpe:2.3:a:rrrene:html_sanitize_ex:*:*:*:*:*:*:*:*"
          ],
          "defaultStatus": "unaffected",
          "modules": [
            "Elixir.HtmlSanitizeEx.Scrubber.HTML5",
            "Elixir.HtmlSanitizeEx"
          ],
          "packageName": "html_sanitize_ex",
          "packageURL": "pkg:hex/html_sanitize_ex",
          "product": "html_sanitize_ex",
          "programFiles": [
            "lib/html_sanitize_ex/scrubber/html5.ex",
            "lib/html_sanitize_ex.ex"
          ],
          "programRoutines": [
            {
              "name": "\u0027Elixir.HtmlSanitizeEx.Scrubber.HTML5\u0027:scrub_attribute/2"
            },
            {
              "name": "\u0027Elixir.HtmlSanitizeEx.Scrubber.HTML5\u0027:sanitize/1"
            },
            {
              "name": "\u0027Elixir.HtmlSanitizeEx\u0027:html5/1"
            }
          ],
          "repo": "https://github.com/rrrene/html_sanitize_ex",
          "vendor": "rrrene",
          "versions": [
            {
              "lessThan": "1.4.5",
              "status": "affected",
              "version": "0.3.1",
              "versionType": "semver"
            },
            {
              "lessThan": "1.5.3",
              "status": "affected",
              "version": "1.5.0-rc.0",
              "versionType": "semver"
            }
          ]
        },
        {
          "collectionURL": "https://github.com",
          "cpes": [
            "cpe:2.3:a:rrrene:html_sanitize_ex:*:*:*:*:*:*:*:*"
          ],
          "defaultStatus": "unaffected",
          "modules": [
            "Elixir.HtmlSanitizeEx.Scrubber.HTML5",
            "Elixir.HtmlSanitizeEx"
          ],
          "packageName": "rrrene/html_sanitize_ex",
          "packageURL": "pkg:github/rrrene/html_sanitize_ex",
          "product": "html_sanitize_ex",
          "programFiles": [
            "lib/html_sanitize_ex/scrubber/html5.ex",
            "lib/html_sanitize_ex.ex"
          ],
          "programRoutines": [
            {
              "name": "\u0027Elixir.HtmlSanitizeEx.Scrubber.HTML5\u0027:scrub_attribute/2"
            },
            {
              "name": "\u0027Elixir.HtmlSanitizeEx.Scrubber.HTML5\u0027:sanitize/1"
            },
            {
              "name": "\u0027Elixir.HtmlSanitizeEx\u0027:html5/1"
            }
          ],
          "repo": "https://github.com/rrrene/html_sanitize_ex",
          "vendor": "rrrene",
          "versions": [
            {
              "changes": [
                {
                  "at": "a1e804ed997e780ea71d14393cf2f701330553a6",
                  "status": "unaffected"
                },
                {
                  "at": "21394e758cb0ffe12fb9953c30fdedc6016c8f9e",
                  "status": "unaffected"
                }
              ],
              "lessThan": "*",
              "status": "affected",
              "version": "8976d64ea0b77d26093a94a43ec48a3978e8d028",
              "versionType": "git"
            }
          ]
        }
      ],
      "configurations": [
        {
          "lang": "en",
          "supportingMedia": [
            {
              "base64": false,
              "type": "text/html",
              "value": "\u003cp\u003eOnly \u003ccode\u003eHtmlSanitizeEx.html5/1\u003c/code\u003e, and custom scrubbers declared with \u003ccode\u003euse HtmlSanitizeEx, extend: :html5\u003c/code\u003e, allow the \u003ccode\u003einput\u003c/code\u003e element, and the sanitized output must be rendered to other users.\u003c/p\u003e\n\u003cp\u003eThe rendering page must also contain a form with an \u003ccode\u003eid\u003c/code\u003e, since that \u003ccode\u003eid\u003c/code\u003e is what the injected \u003ccode\u003eform\u003c/code\u003e attribute binds to.\u003c/p\u003e"
            },
            {
              "base64": false,
              "type": "text/markdown",
              "value": "Only `HtmlSanitizeEx.html5/1`, and custom scrubbers declared with `use HtmlSanitizeEx, extend: :html5`, allow the `input` element, and the sanitized output must be rendered to other users.\n\nThe rendering page must also contain a form with an `id`, since that `id` is what the injected `form` attribute binds to."
            }
          ],
          "value": "Only HtmlSanitizeEx.html5/1, and custom scrubbers declared with use HtmlSanitizeEx, extend: :html5, allow the input element, and the sanitized output must be rendered to other users.\n\nThe rendering page must also contain a form with an id, since that id is what the injected form attribute binds to."
        }
      ],
      "cpeApplicability": [
        {
          "nodes": [
            {
              "cpeMatch": [
                {
                  "criteria": "cpe:2.3:a:rrrene:html_sanitize_ex:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "1.4.5",
                  "versionStartIncluding": "0.3.1",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:a:rrrene:html_sanitize_ex:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "1.5.3",
                  "versionStartIncluding": "1.5.0-rc.0",
                  "vulnerable": true
                }
              ],
              "negate": false,
              "operator": "OR"
            }
          ],
          "operator": "AND"
        }
      ],
      "credits": [
        {
          "lang": "en",
          "type": "finder",
          "value": "Peter Ullrich"
        },
        {
          "lang": "en",
          "type": "analyst",
          "value": "Jonatan M\u00e4nnchen / EEF"
        },
        {
          "lang": "en",
          "type": "remediation developer",
          "value": "Ren\u00e9 F\u00f6hring"
        }
      ],
      "descriptions": [
        {
          "lang": "en",
          "supportingMedia": [
            {
              "base64": false,
              "type": "text/html",
              "value": "\u003cp\u003eURL Redirection to Untrusted Site (\u0027Open Redirect\u0027) vulnerability in the HTML5 scrubber in rrrene html_sanitize_ex allows an unauthenticated remote attacker to retarget a form already on the rendering page and receive whatever the victim submits, including credentials, via the \u003ccode\u003eform\u003c/code\u003e and \u003ccode\u003eformaction\u003c/code\u003e attributes on an \u003ccode\u003e\u0026lt;input\u0026gt;\u003c/code\u003e element in sanitized HTML. HTML\u0027s \u003ccode\u003eform\u003c/code\u003e attribute associates an input with any form on the page by its \u003ccode\u003eid\u003c/code\u003e even when the input sits outside that form, and \u003ccode\u003eformaction\u003c/code\u003e on a submit control overrides the owning form\u0027s \u003ccode\u003eaction\u003c/code\u003e. Neither attribute receives a scheme check, so an absolute cross-origin URL survives sanitizing.\u003c/p\u003e\n\u003cp\u003eNo script executes. The scrubber allows neither \u003ccode\u003eform\u003c/code\u003e nor \u003ccode\u003ebutton\u003c/code\u003e, so the attacker cannot introduce a form of their own and the rendering page must already contain a form carrying an \u003ccode\u003eid\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003eThis issue affects html_sanitize_ex: from 0.3.1 before 1.4.5 and from 1.5.0-rc.0 before 1.5.3.\u003c/p\u003e"
            },
            {
              "base64": false,
              "type": "text/markdown",
              "value": "URL Redirection to Untrusted Site (\u0027Open Redirect\u0027) vulnerability in the HTML5 scrubber in rrrene html_sanitize_ex allows an unauthenticated remote attacker to retarget a form already on the rendering page and receive whatever the victim submits, including credentials, via the `form` and `formaction` attributes on an `\u003cinput\u003e` element in sanitized HTML. HTML\u0027s `form` attribute associates an input with any form on the page by its `id` even when the input sits outside that form, and `formaction` on a submit control overrides the owning form\u0027s `action`. Neither attribute receives a scheme check, so an absolute cross-origin URL survives sanitizing.\n\nNo script executes. The scrubber allows neither `form` nor `button`, so the attacker cannot introduce a form of their own and the rendering page must already contain a form carrying an `id`.\n\nThis issue affects html_sanitize_ex: from 0.3.1 before 1.4.5 and from 1.5.0-rc.0 before 1.5.3."
            }
          ],
          "value": "URL Redirection to Untrusted Site (\u0027Open Redirect\u0027) vulnerability in the HTML5 scrubber in rrrene html_sanitize_ex allows an unauthenticated remote attacker to retarget a form already on the rendering page and receive whatever the victim submits, including credentials, via the form and formaction attributes on an \u003cinput\u003e element in sanitized HTML. HTML\u0027s form attribute associates an input with any form on the page by its id even when the input sits outside that form, and formaction on a submit control overrides the owning form\u0027s action. Neither attribute receives a scheme check, so an absolute cross-origin URL survives sanitizing.\n\nNo script executes. The scrubber allows neither form nor button, so the attacker cannot introduce a form of their own and the rendering page must already contain a form carrying an id.\n\nThis issue affects html_sanitize_ex: from 0.3.1 before 1.4.5 and from 1.5.0-rc.0 before 1.5.3."
        }
      ],
      "impacts": [
        {
          "capecId": "CAPEC-154",
          "descriptions": [
            {
              "lang": "en",
              "value": "CAPEC-154 Resource Location Spoofing"
            }
          ]
        }
      ],
      "metrics": [
        {
          "cvssV4_0": {
            "Automatable": "NOT_DEFINED",
            "Recovery": "NOT_DEFINED",
            "Safety": "NOT_DEFINED",
            "attackComplexity": "LOW",
            "attackRequirements": "PRESENT",
            "attackVector": "NETWORK",
            "baseScore": 4.8,
            "baseSeverity": "MEDIUM",
            "privilegesRequired": "NONE",
            "providerUrgency": "NOT_DEFINED",
            "subAvailabilityImpact": "NONE",
            "subConfidentialityImpact": "HIGH",
            "subIntegrityImpact": "LOW",
            "userInteraction": "ACTIVE",
            "valueDensity": "NOT_DEFINED",
            "vectorString": "CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:A/VC:N/VI:N/VA:N/SC:H/SI:L/SA:N",
            "version": "4.0",
            "vulnAvailabilityImpact": "NONE",
            "vulnConfidentialityImpact": "NONE",
            "vulnIntegrityImpact": "NONE",
            "vulnerabilityResponseEffort": "NOT_DEFINED"
          },
          "format": "CVSS",
          "scenarios": [
            {
              "lang": "en",
              "value": "GENERAL"
            }
          ]
        }
      ],
      "problemTypes": [
        {
          "descriptions": [
            {
              "cweId": "CWE-601",
              "description": "CWE-601 URL Redirection to Untrusted Site (\u0027Open Redirect\u0027)",
              "lang": "en",
              "type": "CWE"
            }
          ]
        }
      ],
      "providerMetadata": {
        "dateUpdated": "2026-08-19T11:51:08.771Z",
        "orgId": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db",
        "shortName": "EEF"
      },
      "references": [
        {
          "tags": [
            "vendor-advisory",
            "related"
          ],
          "url": "https://github.com/rrrene/html_sanitize_ex/security/advisories/GHSA-w3f9-jjhw-wwvq"
        },
        {
          "tags": [
            "related"
          ],
          "url": "https://cna.erlef.org/cves/CVE-2026-66370.html"
        },
        {
          "tags": [
            "related"
          ],
          "url": "https://osv.dev/vulnerability/EEF-CVE-2026-66370"
        },
        {
          "tags": [
            "patch"
          ],
          "url": "https://github.com/rrrene/html_sanitize_ex/commit/a1e804ed997e780ea71d14393cf2f701330553a6"
        },
        {
          "tags": [
            "patch"
          ],
          "url": "https://github.com/rrrene/html_sanitize_ex/commit/21394e758cb0ffe12fb9953c30fdedc6016c8f9e"
        }
      ],
      "source": {
        "discovery": "EXTERNAL"
      },
      "title": "html_sanitize_ex HTML5 scrubber keeps attacker-supplied form-association attributes, allowing form hijacking",
      "workarounds": [
        {
          "lang": "en",
          "supportingMedia": [
            {
              "base64": false,
              "type": "text/html",
              "value": "\u003cp\u003eSanitize with \u003ccode\u003ebasic_html/1\u003c/code\u003e, \u003ccode\u003emarkdown_html/1\u003c/code\u003e or \u003ccode\u003estrip_tags/1\u003c/code\u003e, none of which allow \u003ccode\u003einput\u003c/code\u003e, or define a custom scrubber that omits it.\u003c/p\u003e\n\u003cp\u003eOmitting the \u003ccode\u003eid\u003c/code\u003e attribute from the page\u0027s own forms, or giving them values an attacker cannot predict, removes the anchor the injected \u003ccode\u003eform\u003c/code\u003e attribute needs.\u003c/p\u003e"
            },
            {
              "base64": false,
              "type": "text/markdown",
              "value": "Sanitize with `basic_html/1`, `markdown_html/1` or `strip_tags/1`, none of which allow `input`, or define a custom scrubber that omits it.\n\nOmitting the `id` attribute from the page\u0027s own forms, or giving them values an attacker cannot predict, removes the anchor the injected `form` attribute needs."
            }
          ],
          "value": "Sanitize with basic_html/1, markdown_html/1 or strip_tags/1, none of which allow input, or define a custom scrubber that omits it.\n\nOmitting the id attribute from the page\u0027s own forms, or giving them values an attacker cannot predict, removes the anchor the injected form attribute needs."
        }
      ]
    }
  },
  "cveMetadata": {
    "assignerOrgId": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db",
    "assignerShortName": "EEF",
    "cveId": "CVE-2026-66370",
    "datePublished": "2026-08-06T14:49:15.841Z",
    "dateReserved": "2026-08-06T10:15:01.808Z",
    "dateUpdated": "2026-08-19T11:51:08.771Z",
    "state": "PUBLISHED"
  },
  "dataType": "CVE_RECORD",
  "dataVersion": "5.2",
  "vulnerability-lookup:meta": {
    "epss": {
      "cve": "CVE-2026-66370",
      "date": "2026-10-23",
      "epss": "0.00403",
      "percentile": "0.33408"
    },
    "nvd": {
      "cve": {
        "affected": [
          {
            "affectedData": [
              {
                "collectionURL": "https://repo.hex.pm",
                "cpes": [
                  "cpe:2.3:a:rrrene:html_sanitize_ex:*:*:*:*:*:*:*:*"
                ],
                "defaultStatus": "unaffected",
                "modules": [
                  "Elixir.HtmlSanitizeEx.Scrubber.HTML5",
                  "Elixir.HtmlSanitizeEx"
                ],
                "packageName": "html_sanitize_ex",
                "packageURL": "pkg:hex/html_sanitize_ex",
                "product": "html_sanitize_ex",
                "programFiles": [
                  "lib/html_sanitize_ex/scrubber/html5.ex",
                  "lib/html_sanitize_ex.ex"
                ],
                "programRoutines": [
                  {
                    "name": "\u0027Elixir.HtmlSanitizeEx.Scrubber.HTML5\u0027:scrub_attribute/2"
                  },
                  {
                    "name": "\u0027Elixir.HtmlSanitizeEx.Scrubber.HTML5\u0027:sanitize/1"
                  },
                  {
                    "name": "\u0027Elixir.HtmlSanitizeEx\u0027:html5/1"
                  }
                ],
                "repo": "https://github.com/rrrene/html_sanitize_ex",
                "vendor": "rrrene",
                "versions": [
                  {
                    "lessThan": "1.4.5",
                    "status": "affected",
                    "version": "0.3.1",
                    "versionType": "semver"
                  },
                  {
                    "lessThan": "1.5.3",
                    "status": "affected",
                    "version": "1.5.0-rc.0",
                    "versionType": "semver"
                  }
                ]
              },
              {
                "collectionURL": "https://github.com",
                "cpes": [
                  "cpe:2.3:a:rrrene:html_sanitize_ex:*:*:*:*:*:*:*:*"
                ],
                "defaultStatus": "unaffected",
                "modules": [
                  "Elixir.HtmlSanitizeEx.Scrubber.HTML5",
                  "Elixir.HtmlSanitizeEx"
                ],
                "packageName": "rrrene/html_sanitize_ex",
                "packageURL": "pkg:github/rrrene/html_sanitize_ex",
                "product": "html_sanitize_ex",
                "programFiles": [
                  "lib/html_sanitize_ex/scrubber/html5.ex",
                  "lib/html_sanitize_ex.ex"
                ],
                "programRoutines": [
                  {
                    "name": "\u0027Elixir.HtmlSanitizeEx.Scrubber.HTML5\u0027:scrub_attribute/2"
                  },
                  {
                    "name": "\u0027Elixir.HtmlSanitizeEx.Scrubber.HTML5\u0027:sanitize/1"
                  },
                  {
                    "name": "\u0027Elixir.HtmlSanitizeEx\u0027:html5/1"
                  }
                ],
                "repo": "https://github.com/rrrene/html_sanitize_ex",
                "vendor": "rrrene",
                "versions": [
                  {
                    "changes": [
                      {
                        "at": "a1e804ed997e780ea71d14393cf2f701330553a6",
                        "status": "unaffected"
                      },
                      {
                        "at": "21394e758cb0ffe12fb9953c30fdedc6016c8f9e",
                        "status": "unaffected"
                      }
                    ],
                    "lessThan": "*",
                    "status": "affected",
                    "version": "8976d64ea0b77d26093a94a43ec48a3978e8d028",
                    "versionType": "git"
                  }
                ]
              }
            ],
            "source": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db"
          }
        ],
        "configurations": [
          {
            "nodes": [
              {
                "cpeMatch": [
                  {
                    "criteria": "cpe:2.3:a:rrrene:htmlsanitizeex:*:*:*:*:*:*:*:*",
                    "matchCriteriaId": "DE85053C-AE84-4570-A90C-4D4CCD7A4BA3",
                    "versionEndExcluding": "1.5.3",
                    "versionStartIncluding": "0.3.1",
                    "vulnerable": true
                  }
                ],
                "negate": false,
                "operator": "OR"
              }
            ]
          }
        ],
        "cveTags": [],
        "descriptions": [
          {
            "lang": "en",
            "value": "URL Redirection to Untrusted Site (\u0027Open Redirect\u0027) vulnerability in the HTML5 scrubber in rrrene html_sanitize_ex allows an unauthenticated remote attacker to retarget a form already on the rendering page and receive whatever the victim submits, including credentials, via the form and formaction attributes on an \u003cinput\u003e element in sanitized HTML. HTML\u0027s form attribute associates an input with any form on the page by its id even when the input sits outside that form, and formaction on a submit control overrides the owning form\u0027s action. Neither attribute receives a scheme check, so an absolute cross-origin URL survives sanitizing.\n\nNo script executes. The scrubber allows neither form nor button, so the attacker cannot introduce a form of their own and the rendering page must already contain a form carrying an id.\n\nThis issue affects html_sanitize_ex: from 0.3.1 before 1.4.5 and from 1.5.0-rc.0 before 1.5.3."
          },
          {
            "lang": "es",
            "value": "La vulnerabilidad de redirecci\u00f3n de URL a sitio no confiable (\u2019redirecci\u00f3n abierta\u2019) en el depurador HTML5 en rrrene html_sanitize_ex permite a un atacante remoto no autenticado redirigir un formulario ya presente en la p\u00e1gina de renderizado y recibir lo que la v\u00edctima env\u00ede, incluidas las credenciales, a trav\u00e9s de los atributos form y formaction en un elemento [input] en HTML saneado. El atributo form de HTML asocia una entrada con cualquier formulario en la p\u00e1gina por su id incluso cuando la entrada se encuentra fuera de ese formulario, y formaction en un control de env\u00edo anula la acci\u00f3n del formulario propietario. Ninguno de los atributos recibe una verificaci\u00f3n de esquema, por lo que una URL absoluta de origen cruzado sobrevive al saneamiento.\n\nNo se ejecuta ning\u00fan script. El depurador no permite ni form ni button, por lo que el atacante no puede introducir un formulario propio y la p\u00e1gina de renderizado ya debe contener un formulario con un id.\n\nEste problema afecta a html_sanitize_ex: desde 0.3.1 antes de 1.5.3."
          }
        ],
        "id": "CVE-2026-66370",
        "lastModified": "2026-10-23T21:10:00.157",
        "metrics": {
          "cvssMetricV31": [
            {
              "cvssData": {
                "attackComplexity": "LOW",
                "attackVector": "NETWORK",
                "availabilityImpact": "NONE",
                "baseScore": 6.1,
                "baseSeverity": "MEDIUM",
                "confidentialityImpact": "LOW",
                "integrityImpact": "LOW",
                "privilegesRequired": "NONE",
                "scope": "CHANGED",
                "userInteraction": "REQUIRED",
                "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N",
                "version": "3.1"
              },
              "exploitabilityScore": 2.8,
              "impactScore": 2.7,
              "source": "nvd@nist.gov",
              "type": "Primary"
            }
          ],
          "cvssMetricV40": [
            {
              "cvssData": {
                "Automatable": "NOT_DEFINED",
                "Recovery": "NOT_DEFINED",
                "Safety": "NOT_DEFINED",
                "attackComplexity": "LOW",
                "attackRequirements": "PRESENT",
                "attackVector": "NETWORK",
                "availabilityRequirement": "NOT_DEFINED",
                "baseScore": 4.8,
                "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": "HIGH",
                "subIntegrityImpact": "LOW",
                "userInteraction": "ACTIVE",
                "valueDensity": "NOT_DEFINED",
                "vectorString": "CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:A/VC:N/VI:N/VA:N/SC:H/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": "NONE",
                "vulnIntegrityImpact": "NONE",
                "vulnerabilityResponseEffort": "NOT_DEFINED"
              },
              "source": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db",
              "type": "Secondary"
            }
          ],
          "ssvcV203": [
            {
              "source": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
              "ssvcData": {
                "id": "CVE-2026-66370",
                "options": [
                  {
                    "exploitation": "none"
                  },
                  {
                    "automatable": "no"
                  },
                  {
                    "technicalImpact": "partial"
                  }
                ],
                "role": "CISA Coordinator",
                "timestamp": "2026-08-06T15:42:03.803831Z",
                "version": "2.0.3"
              }
            }
          ]
        },
        "published": "2026-08-06T16:16:48.420",
        "references": [
          {
            "source": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db",
            "tags": [
              "Patch",
              "Third Party Advisory"
            ],
            "url": "https://cna.erlef.org/cves/CVE-2026-66370.html"
          },
          {
            "source": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db",
            "url": "https://github.com/rrrene/html_sanitize_ex/commit/21394e758cb0ffe12fb9953c30fdedc6016c8f9e"
          },
          {
            "source": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db",
            "tags": [
              "Patch"
            ],
            "url": "https://github.com/rrrene/html_sanitize_ex/commit/a1e804ed997e780ea71d14393cf2f701330553a6"
          },
          {
            "source": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db",
            "tags": [
              "Broken Link"
            ],
            "url": "https://github.com/rrrene/html_sanitize_ex/security/advisories/GHSA-w3f9-jjhw-wwvq"
          },
          {
            "source": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db",
            "tags": [
              "Patch",
              "Third Party Advisory"
            ],
            "url": "https://osv.dev/vulnerability/EEF-CVE-2026-66370"
          }
        ],
        "sourceIdentifier": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db",
        "vulnStatus": "Modified",
        "weaknesses": [
          {
            "description": [
              {
                "lang": "en",
                "value": "CWE-601"
              }
            ],
            "source": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db",
            "type": "Secondary"
          }
        ]
      }
    },
    "vulnrichment": {
      "containers": {
        "adp": [
          {
            "metrics": [
              {
                "other": {
                  "content": {
                    "id": "CVE-2026-66370",
                    "options": [
                      {
                        "Exploitation": "none"
                      },
                      {
                        "Automatable": "no"
                      },
                      {
                        "Technical Impact": "partial"
                      }
                    ],
                    "role": "CISA Coordinator",
                    "timestamp": "2026-08-06T15:42:03.803831Z",
                    "version": "2.0.3"
                  },
                  "type": "ssvc"
                }
              }
            ],
            "providerMetadata": {
              "dateUpdated": "2026-08-06T15:42:06.830Z",
              "orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
              "shortName": "CISA-ADP"
            },
            "title": "CISA ADP Vulnrichment"
          }
        ],
        "cna": {
          "affected": [
            {
              "collectionURL": "https://repo.hex.pm",
              "cpes": [
                "cpe:2.3:a:rrrene:html_sanitize_ex:*:*:*:*:*:*:*:*"
              ],
              "defaultStatus": "unaffected",
              "modules": [
                "Elixir.HtmlSanitizeEx.Scrubber.HTML5",
                "Elixir.HtmlSanitizeEx"
              ],
              "packageName": "html_sanitize_ex",
              "packageURL": "pkg:hex/html_sanitize_ex",
              "product": "html_sanitize_ex",
              "programFiles": [
                "lib/html_sanitize_ex/scrubber/html5.ex",
                "lib/html_sanitize_ex.ex"
              ],
              "programRoutines": [
                {
                  "name": "\u0027Elixir.HtmlSanitizeEx.Scrubber.HTML5\u0027:scrub_attribute/2"
                },
                {
                  "name": "\u0027Elixir.HtmlSanitizeEx.Scrubber.HTML5\u0027:sanitize/1"
                },
                {
                  "name": "\u0027Elixir.HtmlSanitizeEx\u0027:html5/1"
                }
              ],
              "repo": "https://github.com/rrrene/html_sanitize_ex",
              "vendor": "rrrene",
              "versions": [
                {
                  "lessThan": "1.4.5",
                  "status": "affected",
                  "version": "0.3.1",
                  "versionType": "semver"
                },
                {
                  "lessThan": "1.5.3",
                  "status": "affected",
                  "version": "1.5.0-rc.0",
                  "versionType": "semver"
                }
              ]
            },
            {
              "collectionURL": "https://github.com",
              "cpes": [
                "cpe:2.3:a:rrrene:html_sanitize_ex:*:*:*:*:*:*:*:*"
              ],
              "defaultStatus": "unaffected",
              "modules": [
                "Elixir.HtmlSanitizeEx.Scrubber.HTML5",
                "Elixir.HtmlSanitizeEx"
              ],
              "packageName": "rrrene/html_sanitize_ex",
              "packageURL": "pkg:github/rrrene/html_sanitize_ex",
              "product": "html_sanitize_ex",
              "programFiles": [
                "lib/html_sanitize_ex/scrubber/html5.ex",
                "lib/html_sanitize_ex.ex"
              ],
              "programRoutines": [
                {
                  "name": "\u0027Elixir.HtmlSanitizeEx.Scrubber.HTML5\u0027:scrub_attribute/2"
                },
                {
                  "name": "\u0027Elixir.HtmlSanitizeEx.Scrubber.HTML5\u0027:sanitize/1"
                },
                {
                  "name": "\u0027Elixir.HtmlSanitizeEx\u0027:html5/1"
                }
              ],
              "repo": "https://github.com/rrrene/html_sanitize_ex",
              "vendor": "rrrene",
              "versions": [
                {
                  "changes": [
                    {
                      "at": "a1e804ed997e780ea71d14393cf2f701330553a6",
                      "status": "unaffected"
                    },
                    {
                      "at": "21394e758cb0ffe12fb9953c30fdedc6016c8f9e",
                      "status": "unaffected"
                    }
                  ],
                  "lessThan": "*",
                  "status": "affected",
                  "version": "8976d64ea0b77d26093a94a43ec48a3978e8d028",
                  "versionType": "git"
                }
              ]
            }
          ],
          "configurations": [
            {
              "lang": "en",
              "supportingMedia": [
                {
                  "base64": false,
                  "type": "text/html",
                  "value": "\u003cp\u003eOnly \u003ccode\u003eHtmlSanitizeEx.html5/1\u003c/code\u003e, and custom scrubbers declared with \u003ccode\u003euse HtmlSanitizeEx, extend: :html5\u003c/code\u003e, allow the \u003ccode\u003einput\u003c/code\u003e element, and the sanitized output must be rendered to other users.\u003c/p\u003e\n\u003cp\u003eThe rendering page must also contain a form with an \u003ccode\u003eid\u003c/code\u003e, since that \u003ccode\u003eid\u003c/code\u003e is what the injected \u003ccode\u003eform\u003c/code\u003e attribute binds to.\u003c/p\u003e"
                },
                {
                  "base64": false,
                  "type": "text/markdown",
                  "value": "Only `HtmlSanitizeEx.html5/1`, and custom scrubbers declared with `use HtmlSanitizeEx, extend: :html5`, allow the `input` element, and the sanitized output must be rendered to other users.\n\nThe rendering page must also contain a form with an `id`, since that `id` is what the injected `form` attribute binds to."
                }
              ],
              "value": "Only HtmlSanitizeEx.html5/1, and custom scrubbers declared with use HtmlSanitizeEx, extend: :html5, allow the input element, and the sanitized output must be rendered to other users.\n\nThe rendering page must also contain a form with an id, since that id is what the injected form attribute binds to."
            }
          ],
          "cpeApplicability": [
            {
              "nodes": [
                {
                  "cpeMatch": [
                    {
                      "criteria": "cpe:2.3:a:rrrene:html_sanitize_ex:*:*:*:*:*:*:*:*",
                      "versionEndExcluding": "1.4.5",
                      "versionStartIncluding": "0.3.1",
                      "vulnerable": true
                    },
                    {
                      "criteria": "cpe:2.3:a:rrrene:html_sanitize_ex:*:*:*:*:*:*:*:*",
                      "versionEndExcluding": "1.5.3",
                      "versionStartIncluding": "1.5.0-rc.0",
                      "vulnerable": true
                    }
                  ],
                  "negate": false,
                  "operator": "OR"
                }
              ],
              "operator": "AND"
            }
          ],
          "credits": [
            {
              "lang": "en",
              "type": "finder",
              "value": "Peter Ullrich"
            },
            {
              "lang": "en",
              "type": "analyst",
              "value": "Jonatan M\u00e4nnchen / EEF"
            },
            {
              "lang": "en",
              "type": "remediation developer",
              "value": "Ren\u00e9 F\u00f6hring"
            }
          ],
          "descriptions": [
            {
              "lang": "en",
              "supportingMedia": [
                {
                  "base64": false,
                  "type": "text/html",
                  "value": "\u003cp\u003eURL Redirection to Untrusted Site (\u0027Open Redirect\u0027) vulnerability in the HTML5 scrubber in rrrene html_sanitize_ex allows an unauthenticated remote attacker to retarget a form already on the rendering page and receive whatever the victim submits, including credentials, via the \u003ccode\u003eform\u003c/code\u003e and \u003ccode\u003eformaction\u003c/code\u003e attributes on an \u003ccode\u003e\u0026lt;input\u0026gt;\u003c/code\u003e element in sanitized HTML. HTML\u0027s \u003ccode\u003eform\u003c/code\u003e attribute associates an input with any form on the page by its \u003ccode\u003eid\u003c/code\u003e even when the input sits outside that form, and \u003ccode\u003eformaction\u003c/code\u003e on a submit control overrides the owning form\u0027s \u003ccode\u003eaction\u003c/code\u003e. Neither attribute receives a scheme check, so an absolute cross-origin URL survives sanitizing.\u003c/p\u003e\n\u003cp\u003eNo script executes. The scrubber allows neither \u003ccode\u003eform\u003c/code\u003e nor \u003ccode\u003ebutton\u003c/code\u003e, so the attacker cannot introduce a form of their own and the rendering page must already contain a form carrying an \u003ccode\u003eid\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003eThis issue affects html_sanitize_ex: from 0.3.1 before 1.4.5 and from 1.5.0-rc.0 before 1.5.3.\u003c/p\u003e"
                },
                {
                  "base64": false,
                  "type": "text/markdown",
                  "value": "URL Redirection to Untrusted Site (\u0027Open Redirect\u0027) vulnerability in the HTML5 scrubber in rrrene html_sanitize_ex allows an unauthenticated remote attacker to retarget a form already on the rendering page and receive whatever the victim submits, including credentials, via the `form` and `formaction` attributes on an `\u003cinput\u003e` element in sanitized HTML. HTML\u0027s `form` attribute associates an input with any form on the page by its `id` even when the input sits outside that form, and `formaction` on a submit control overrides the owning form\u0027s `action`. Neither attribute receives a scheme check, so an absolute cross-origin URL survives sanitizing.\n\nNo script executes. The scrubber allows neither `form` nor `button`, so the attacker cannot introduce a form of their own and the rendering page must already contain a form carrying an `id`.\n\nThis issue affects html_sanitize_ex: from 0.3.1 before 1.4.5 and from 1.5.0-rc.0 before 1.5.3."
                }
              ],
              "value": "URL Redirection to Untrusted Site (\u0027Open Redirect\u0027) vulnerability in the HTML5 scrubber in rrrene html_sanitize_ex allows an unauthenticated remote attacker to retarget a form already on the rendering page and receive whatever the victim submits, including credentials, via the form and formaction attributes on an \u003cinput\u003e element in sanitized HTML. HTML\u0027s form attribute associates an input with any form on the page by its id even when the input sits outside that form, and formaction on a submit control overrides the owning form\u0027s action. Neither attribute receives a scheme check, so an absolute cross-origin URL survives sanitizing.\n\nNo script executes. The scrubber allows neither form nor button, so the attacker cannot introduce a form of their own and the rendering page must already contain a form carrying an id.\n\nThis issue affects html_sanitize_ex: from 0.3.1 before 1.4.5 and from 1.5.0-rc.0 before 1.5.3."
            }
          ],
          "impacts": [
            {
              "capecId": "CAPEC-154",
              "descriptions": [
                {
                  "lang": "en",
                  "value": "CAPEC-154 Resource Location Spoofing"
                }
              ]
            }
          ],
          "metrics": [
            {
              "cvssV4_0": {
                "Automatable": "NOT_DEFINED",
                "Recovery": "NOT_DEFINED",
                "Safety": "NOT_DEFINED",
                "attackComplexity": "LOW",
                "attackRequirements": "PRESENT",
                "attackVector": "NETWORK",
                "baseScore": 4.8,
                "baseSeverity": "MEDIUM",
                "privilegesRequired": "NONE",
                "providerUrgency": "NOT_DEFINED",
                "subAvailabilityImpact": "NONE",
                "subConfidentialityImpact": "HIGH",
                "subIntegrityImpact": "LOW",
                "userInteraction": "ACTIVE",
                "valueDensity": "NOT_DEFINED",
                "vectorString": "CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:A/VC:N/VI:N/VA:N/SC:H/SI:L/SA:N",
                "version": "4.0",
                "vulnAvailabilityImpact": "NONE",
                "vulnConfidentialityImpact": "NONE",
                "vulnIntegrityImpact": "NONE",
                "vulnerabilityResponseEffort": "NOT_DEFINED"
              },
              "format": "CVSS",
              "scenarios": [
                {
                  "lang": "en",
                  "value": "GENERAL"
                }
              ]
            }
          ],
          "problemTypes": [
            {
              "descriptions": [
                {
                  "cweId": "CWE-601",
                  "description": "CWE-601 URL Redirection to Untrusted Site (\u0027Open Redirect\u0027)",
                  "lang": "en",
                  "type": "CWE"
                }
              ]
            }
          ],
          "providerMetadata": {
            "dateUpdated": "2026-08-19T11:51:08.771Z",
            "orgId": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db",
            "shortName": "EEF"
          },
          "references": [
            {
              "tags": [
                "vendor-advisory",
                "related"
              ],
              "url": "https://github.com/rrrene/html_sanitize_ex/security/advisories/GHSA-w3f9-jjhw-wwvq"
            },
            {
              "tags": [
                "related"
              ],
              "url": "https://cna.erlef.org/cves/CVE-2026-66370.html"
            },
            {
              "tags": [
                "related"
              ],
              "url": "https://osv.dev/vulnerability/EEF-CVE-2026-66370"
            },
            {
              "tags": [
                "patch"
              ],
              "url": "https://github.com/rrrene/html_sanitize_ex/commit/a1e804ed997e780ea71d14393cf2f701330553a6"
            },
            {
              "tags": [
                "patch"
              ],
              "url": "https://github.com/rrrene/html_sanitize_ex/commit/21394e758cb0ffe12fb9953c30fdedc6016c8f9e"
            }
          ],
          "source": {
            "discovery": "EXTERNAL"
          },
          "title": "html_sanitize_ex HTML5 scrubber keeps attacker-supplied form-association attributes, allowing form hijacking",
          "workarounds": [
            {
              "lang": "en",
              "supportingMedia": [
                {
                  "base64": false,
                  "type": "text/html",
                  "value": "\u003cp\u003eSanitize with \u003ccode\u003ebasic_html/1\u003c/code\u003e, \u003ccode\u003emarkdown_html/1\u003c/code\u003e or \u003ccode\u003estrip_tags/1\u003c/code\u003e, none of which allow \u003ccode\u003einput\u003c/code\u003e, or define a custom scrubber that omits it.\u003c/p\u003e\n\u003cp\u003eOmitting the \u003ccode\u003eid\u003c/code\u003e attribute from the page\u0027s own forms, or giving them values an attacker cannot predict, removes the anchor the injected \u003ccode\u003eform\u003c/code\u003e attribute needs.\u003c/p\u003e"
                },
                {
                  "base64": false,
                  "type": "text/markdown",
                  "value": "Sanitize with `basic_html/1`, `markdown_html/1` or `strip_tags/1`, none of which allow `input`, or define a custom scrubber that omits it.\n\nOmitting the `id` attribute from the page\u0027s own forms, or giving them values an attacker cannot predict, removes the anchor the injected `form` attribute needs."
                }
              ],
              "value": "Sanitize with basic_html/1, markdown_html/1 or strip_tags/1, none of which allow input, or define a custom scrubber that omits it.\n\nOmitting the id attribute from the page\u0027s own forms, or giving them values an attacker cannot predict, removes the anchor the injected form attribute needs."
            }
          ]
        }
      },
      "cveMetadata": {
        "assignerOrgId": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db",
        "assignerShortName": "EEF",
        "cveId": "CVE-2026-66370",
        "datePublished": "2026-08-06T14:49:15.841Z",
        "dateReserved": "2026-08-06T10:15:01.808Z",
        "dateUpdated": "2026-08-19T11:51:08.771Z",
        "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…

Drag nodes to arrange them. Double-click a related vulnerability to open it, or a source to visit its link. The Physics button on the left tunes the layout and the simulation; the legend at the bottom left hides or shows nodes by kind and by sighting type.

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.
Vulnerability timeline

Sightings and recorded dates, grouped by day · UTC

JSON
Events included in the timeline

Loading timeline…


    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.