Search

Find a vulnerability

Search criteria Use this form to refine search results.
Full-text search supports keyword queries with ranking and filtering.
You can combine vendor, product, and sources to narrow results.
Enable “Apply ordering” to sort by date instead of relevance.

    4 vulnerabilities found for phoenix_live_view by phoenixframework

    CVE-2026-64941 (GCVE-0-2026-64941)

    Vulnerability from nvd – Published: 2026-08-10 11:05 – Updated: 2026-08-10 13:00
    VLAI
    Title
    Open redirect in Phoenix.LiveView.validate_local_url!/2 via ASCII tab, LF and CR
    Summary
    URL Redirection to Untrusted Site ('Open Redirect') vulnerability in phoenixframework phoenix_live_view allows an attacker to send a victim's browser to an origin of the attacker's choosing via a :to value containing ASCII tab, LF or CR. redirect/2 validates :to through the private validate_local_url!/2 in lib/phoenix_live_view.ex, which is intended to guarantee the target is a path within the application. It rejects a leading // and any backslash, but not ASCII tab, LF or CR. Browsers strip those three characters before parsing a URL, so a value such as /<TAB>/example.com passes validation as a path and is then resolved as the scheme-relative URL //example.com. The live navigation functions share the guard but are not affected, because the client expands their target against the current origin. push_patch/2 is also affected before 0.7.0, which is when that expansion was added. This issue affects phoenix_live_view: from 0.5.0 before 1.0.19, from 1.1.0-rc.0 before 1.1.33, and from 1.2.0-rc.0 before 1.2.9.
    SSVC
    Exploitation: poc Automatable: no Technical Impact: partial
    CISA Coordinator · CISA-ADP (v2.0.3)
    Decision recorded 2026-08-10 13:00 UTC
    CWE
    • CWE-601 - URL Redirection to Untrusted Site ('Open Redirect')
    Assigner
    EEF
    Impacted products
    Vendor Product Version
    phoenixframework phoenix_live_view Affected: 0.5.0 , < 1.0.19 (semver)
    Affected: 1.1.0-rc.0 , < 1.1.33 (semver)
    Affected: 1.2.0-rc.0 , < 1.2.9 (semver)
        cpe:2.3:a:phoenixframework:phoenix_live_view:*:*:*:*:*:*:*:*
    Create a notification for this product.
    phoenixframework phoenix_live_view Affected: b20dba3f65a380b2e4868dae03397f13d2daa070 , < * (git)
        cpe:2.3:a:phoenixframework:phoenix_live_view:*:*:*:*:*:*:*:*
    Create a notification for this product.
    Show details on NVD website

    {
      "containers": {
        "adp": [
          {
            "metrics": [
              {
                "other": {
                  "content": {
                    "id": "CVE-2026-64941",
                    "options": [
                      {
                        "Exploitation": "poc"
                      },
                      {
                        "Automatable": "no"
                      },
                      {
                        "Technical Impact": "partial"
                      }
                    ],
                    "role": "CISA Coordinator",
                    "timestamp": "2026-08-10T13:00:10.932600Z",
                    "version": "2.0.3"
                  },
                  "type": "ssvc"
                }
              }
            ],
            "providerMetadata": {
              "dateUpdated": "2026-08-10T13:00:33.543Z",
              "orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
              "shortName": "CISA-ADP"
            },
            "references": [
              {
                "tags": [
                  "exploit"
                ],
                "url": "https://github.com/phoenixframework/phoenix_live_view/security/advisories/GHSA-36m4-rm57-3prf"
              }
            ],
            "title": "CISA ADP Vulnrichment"
          }
        ],
        "cna": {
          "affected": [
            {
              "collectionURL": "https://repo.hex.pm",
              "cpes": [
                "cpe:2.3:a:phoenixframework:phoenix_live_view:*:*:*:*:*:*:*:*"
              ],
              "defaultStatus": "unaffected",
              "modules": [
                "\u0027Elixir.Phoenix.LiveView\u0027"
              ],
              "packageName": "phoenix_live_view",
              "packageURL": "pkg:hex/phoenix_live_view",
              "product": "phoenix_live_view",
              "programFiles": [
                "lib/phoenix_live_view.ex"
              ],
              "programRoutines": [
                {
                  "name": "\u0027Elixir.Phoenix.LiveView\u0027:redirect/2"
                },
                {
                  "name": "\u0027Elixir.Phoenix.LiveView\u0027:push_patch/2"
                }
              ],
              "repo": "https://github.com/phoenixframework/phoenix_live_view",
              "vendor": "phoenixframework",
              "versions": [
                {
                  "lessThan": "1.0.19",
                  "status": "affected",
                  "version": "0.5.0",
                  "versionType": "semver"
                },
                {
                  "lessThan": "1.1.33",
                  "status": "affected",
                  "version": "1.1.0-rc.0",
                  "versionType": "semver"
                },
                {
                  "lessThan": "1.2.9",
                  "status": "affected",
                  "version": "1.2.0-rc.0",
                  "versionType": "semver"
                }
              ]
            },
            {
              "collectionURL": "https://github.com",
              "cpes": [
                "cpe:2.3:a:phoenixframework:phoenix_live_view:*:*:*:*:*:*:*:*"
              ],
              "defaultStatus": "unaffected",
              "modules": [
                "\u0027Elixir.Phoenix.LiveView\u0027"
              ],
              "packageName": "phoenixframework/phoenix_live_view",
              "packageURL": "pkg:github/phoenixframework/phoenix_live_view",
              "product": "phoenix_live_view",
              "programFiles": [
                "lib/phoenix_live_view.ex"
              ],
              "programRoutines": [
                {
                  "name": "\u0027Elixir.Phoenix.LiveView\u0027:redirect/2"
                },
                {
                  "name": "\u0027Elixir.Phoenix.LiveView\u0027:push_patch/2"
                }
              ],
              "repo": "https://github.com/phoenixframework/phoenix_live_view",
              "vendor": "phoenixframework",
              "versions": [
                {
                  "changes": [
                    {
                      "at": "0b8c733133466912f81adecaea72b6712370242e",
                      "status": "unaffected"
                    },
                    {
                      "at": "1c164f83df0bb922dfff9c60d125da5b0cfd6619",
                      "status": "unaffected"
                    },
                    {
                      "at": "2068b304d71907064b159b6bc60c5ad85a876ecf",
                      "status": "unaffected"
                    }
                  ],
                  "lessThan": "*",
                  "status": "affected",
                  "version": "b20dba3f65a380b2e4868dae03397f13d2daa070",
                  "versionType": "git"
                }
              ]
            }
          ],
          "configurations": [
            {
              "lang": "en",
              "supportingMedia": [
                {
                  "base64": false,
                  "type": "text/html",
                  "value": "\u003cp\u003eThe application must pass an externally influenced value as \u003ccode\u003e:to\u003c/code\u003e to \u003ccode\u003eredirect/2\u003c/code\u003e, or to \u003ccode\u003epush_patch/2\u003c/code\u003e before 0.7.0, for example a \u003ccode\u003ereturn_to\u003c/code\u003e parameter carried through sign-in or a navigation target taken from a \u003ccode\u003ehandle_event/3\u003c/code\u003e payload.\u003c/p\u003e"
                },
                {
                  "base64": false,
                  "type": "text/markdown",
                  "value": "The application must pass an externally influenced value as `:to` to `redirect/2`, or to `push_patch/2` before 0.7.0, for example a `return_to` parameter carried through sign-in or a navigation target taken from a `handle_event/3` payload."
                }
              ],
              "value": "The application must pass an externally influenced value as :to to redirect/2, or to push_patch/2 before 0.7.0, for example a return_to parameter carried through sign-in or a navigation target taken from a handle_event/3 payload."
            }
          ],
          "cpeApplicability": [
            {
              "nodes": [
                {
                  "cpeMatch": [
                    {
                      "criteria": "cpe:2.3:a:phoenixframework:phoenix_live_view:*:*:*:*:*:*:*:*",
                      "versionEndExcluding": "1.0.19",
                      "versionStartIncluding": "0.5.0",
                      "vulnerable": true
                    },
                    {
                      "criteria": "cpe:2.3:a:phoenixframework:phoenix_live_view:*:*:*:*:*:*:*:*",
                      "versionEndExcluding": "1.1.33",
                      "versionStartIncluding": "1.1.0-rc.0",
                      "vulnerable": true
                    },
                    {
                      "criteria": "cpe:2.3:a:phoenixframework:phoenix_live_view:*:*:*:*:*:*:*:*",
                      "versionEndExcluding": "1.2.9",
                      "versionStartIncluding": "1.2.0-rc.0",
                      "vulnerable": true
                    }
                  ],
                  "negate": false,
                  "operator": "OR"
                }
              ],
              "operator": "AND"
            }
          ],
          "credits": [
            {
              "lang": "en",
              "type": "finder",
              "value": "Eurico Nicacio"
            },
            {
              "lang": "en",
              "type": "remediation developer",
              "value": "Steffen Deusch"
            },
            {
              "lang": "en",
              "type": "remediation reviewer",
              "value": "Jos\u00e9 Valim"
            },
            {
              "lang": "en",
              "type": "analyst",
              "value": "Jonatan M\u00e4nnchen / EEF"
            }
          ],
          "descriptions": [
            {
              "lang": "en",
              "supportingMedia": [
                {
                  "base64": false,
                  "type": "text/html",
                  "value": "\u003cp\u003eURL Redirection to Untrusted Site (\u0027Open Redirect\u0027) vulnerability in phoenixframework phoenix_live_view allows an attacker to send a victim\u0027s browser to an origin of the attacker\u0027s choosing via a \u003ccode\u003e:to\u003c/code\u003e value containing ASCII tab, LF or CR.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003eredirect/2\u003c/code\u003e validates \u003ccode\u003e:to\u003c/code\u003e through the private \u003ccode\u003evalidate_local_url!/2\u003c/code\u003e in \u003ccode\u003elib/phoenix_live_view.ex\u003c/code\u003e, which is intended to guarantee the target is a path within the application. It rejects a leading \u003ccode\u003e//\u003c/code\u003e and any backslash, but not ASCII tab, LF or CR. Browsers strip those three characters before parsing a URL, so a value such as \u003ccode\u003e/\u0026lt;TAB\u0026gt;/example.com\u003c/code\u003e passes validation as a path and is then resolved as the scheme-relative URL \u003ccode\u003e//example.com\u003c/code\u003e. The live navigation functions share the guard but are not affected, because the client expands their target against the current origin. \u003ccode\u003epush_patch/2\u003c/code\u003e is also affected before 0.7.0, which is when that expansion was added.\u003c/p\u003e\n\u003cp\u003eThis issue affects phoenix_live_view: from 0.5.0 before 1.0.19, from 1.1.0-rc.0 before 1.1.33, and from 1.2.0-rc.0 before 1.2.9.\u003c/p\u003e"
                },
                {
                  "base64": false,
                  "type": "text/markdown",
                  "value": "URL Redirection to Untrusted Site (\u0027Open Redirect\u0027) vulnerability in phoenixframework phoenix_live_view allows an attacker to send a victim\u0027s browser to an origin of the attacker\u0027s choosing via a `:to` value containing ASCII tab, LF or CR.\n\n`redirect/2` validates `:to` through the private `validate_local_url!/2` in `lib/phoenix_live_view.ex`, which is intended to guarantee the target is a path within the application. It rejects a leading `//` and any backslash, but not ASCII tab, LF or CR. Browsers strip those three characters before parsing a URL, so a value such as `/\u003cTAB\u003e/example.com` passes validation as a path and is then resolved as the scheme-relative URL `//example.com`. The live navigation functions share the guard but are not affected, because the client expands their target against the current origin. `push_patch/2` is also affected before 0.7.0, which is when that expansion was added.\n\nThis issue affects phoenix_live_view: from 0.5.0 before 1.0.19, from 1.1.0-rc.0 before 1.1.33, and from 1.2.0-rc.0 before 1.2.9."
                }
              ],
              "value": "URL Redirection to Untrusted Site (\u0027Open Redirect\u0027) vulnerability in phoenixframework phoenix_live_view allows an attacker to send a victim\u0027s browser to an origin of the attacker\u0027s choosing via a :to value containing ASCII tab, LF or CR.\n\nredirect/2 validates :to through the private validate_local_url!/2 in lib/phoenix_live_view.ex, which is intended to guarantee the target is a path within the application. It rejects a leading // and any backslash, but not ASCII tab, LF or CR. Browsers strip those three characters before parsing a URL, so a value such as /\u003cTAB\u003e/example.com passes validation as a path and is then resolved as the scheme-relative URL //example.com. The live navigation functions share the guard but are not affected, because the client expands their target against the current origin. push_patch/2 is also affected before 0.7.0, which is when that expansion was added.\n\nThis issue affects phoenix_live_view: from 0.5.0 before 1.0.19, from 1.1.0-rc.0 before 1.1.33, and from 1.2.0-rc.0 before 1.2.9."
            }
          ],
          "impacts": [
            {
              "capecId": "CAPEC-3",
              "descriptions": [
                {
                  "lang": "en",
                  "value": "CAPEC-3 Using Leading \u0027Ghost\u0027 Character Sequences to Bypass Input Filters"
                }
              ]
            }
          ],
          "metrics": [
            {
              "cvssV4_0": {
                "Automatable": "NOT_DEFINED",
                "Recovery": "NOT_DEFINED",
                "Safety": "NOT_DEFINED",
                "attackComplexity": "LOW",
                "attackRequirements": "PRESENT",
                "attackVector": "NETWORK",
                "baseScore": 2.1,
                "baseSeverity": "LOW",
                "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:P/PR:N/UI:A/VC:N/VI:N/VA:N/SC:L/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-10T11:05:14.571Z",
            "orgId": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db",
            "shortName": "EEF"
          },
          "references": [
            {
              "tags": [
                "vendor-advisory",
                "related"
              ],
              "url": "https://github.com/phoenixframework/phoenix_live_view/security/advisories/GHSA-36m4-rm57-3prf"
            },
            {
              "tags": [
                "related"
              ],
              "url": "https://cna.erlef.org/cves/CVE-2026-64941.html"
            },
            {
              "tags": [
                "related"
              ],
              "url": "https://osv.dev/vulnerability/EEF-CVE-2026-64941"
            },
            {
              "tags": [
                "patch"
              ],
              "url": "https://github.com/phoenixframework/phoenix_live_view/commit/0b8c733133466912f81adecaea72b6712370242e"
            },
            {
              "tags": [
                "patch"
              ],
              "url": "https://github.com/phoenixframework/phoenix_live_view/commit/1c164f83df0bb922dfff9c60d125da5b0cfd6619"
            },
            {
              "tags": [
                "patch"
              ],
              "url": "https://github.com/phoenixframework/phoenix_live_view/commit/2068b304d71907064b159b6bc60c5ad85a876ecf"
            }
          ],
          "source": {
            "discovery": "EXTERNAL"
          },
          "title": "Open redirect in Phoenix.LiveView.validate_local_url!/2 via ASCII tab, LF and CR",
          "workarounds": [
            {
              "lang": "en",
              "supportingMedia": [
                {
                  "base64": false,
                  "type": "text/html",
                  "value": "\u003cp\u003eReject any untrusted value containing ASCII tab, LF or CR before passing it as \u003ccode\u003e:to\u003c/code\u003e to \u003ccode\u003eredirect/2\u003c/code\u003e, or to \u003ccode\u003epush_patch/2\u003c/code\u003e before 0.7.0. Alternatively, map client-supplied navigation targets to a fixed set of known-good paths rather than forwarding the value.\u003c/p\u003e"
                },
                {
                  "base64": false,
                  "type": "text/markdown",
                  "value": "Reject any untrusted value containing ASCII tab, LF or CR before passing it as `:to` to `redirect/2`, or to `push_patch/2` before 0.7.0. Alternatively, map client-supplied navigation targets to a fixed set of known-good paths rather than forwarding the value."
                }
              ],
              "value": "Reject any untrusted value containing ASCII tab, LF or CR before passing it as :to to redirect/2, or to push_patch/2 before 0.7.0. Alternatively, map client-supplied navigation targets to a fixed set of known-good paths rather than forwarding the value."
            }
          ]
        }
      },
      "cveMetadata": {
        "assignerOrgId": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db",
        "assignerShortName": "EEF",
        "cveId": "CVE-2026-64941",
        "datePublished": "2026-08-10T11:05:14.571Z",
        "dateReserved": "2026-08-09T16:30:01.572Z",
        "dateUpdated": "2026-08-10T13:00:33.543Z",
        "state": "PUBLISHED"
      },
      "dataType": "CVE_RECORD",
      "dataVersion": "5.2"
    }

    CVE-2026-58228 (GCVE-0-2026-58228)

    Vulnerability from nvd – Published: 2026-07-13 18:04 – Updated: 2026-07-14 04:15
    VLAI
    Title
    Scheme validation bypass in Phoenix.LiveView.Utils leads to XSS via <.link>
    Summary
    Cross-site scripting vulnerability in phoenixframework phoenix_live_view allows an attacker to bypass URL scheme validation and execute JavaScript in a victim's browser session. The Phoenix.LiveView.Utils.valid_destination!/2 and Phoenix.LiveView.Utils.valid_live_navigation_destination!/2 functions in lib/phoenix_live_view/utils.ex rely on an internal uri_scheme/1 helper that only detects a scheme when the input's first byte is an ASCII letter. Inputs beginning with an ASCII control character or space fall through to a nil-returning clause, causing the URL to be treated as a safe relative path. Standard browsers implement the WHATWG URL parser, which strips leading C0 control and space characters before parsing. As a result, an input such as " javascript:alert(1)" is passed unchanged into <.link href={...}> and, when clicked, is parsed by the browser as a javascript: URL that executes attacker-controlled script in the victim's session. Applications that render user-supplied URLs (for example profile links, redirect targets, or external references) via <.link href={...}> are affected. This issue affects phoenix_live_view: from 1.2.2 before 1.2.7.
    SSVC
    Exploitation: poc Automatable: no Technical Impact: partial
    CISA Coordinator · CISA-ADP (v2.0.3)
    Decision recorded 2026-07-13 18:58 UTC
    CWE
    • CWE-79 - Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting')
    Assigner
    EEF
    Impacted products
    Vendor Product Version
    phoenixframework phoenix_live_view Affected: 1.2.2 , < 1.2.7 (semver)
        cpe:2.3:a:phoenixframework:phoenix_live_view:*:*:*:*:*:*:*:*
    Create a notification for this product.
    phoenixframework phoenix_live_view Affected: 4b63216ae68886db99cf7772af23372d76c40e7e , < 86165533e311469a1b62093fd182d9d874de8106 (git)
        cpe:2.3:a:phoenixframework:phoenix_live_view:*:*:*:*:*:*:*:*
    Create a notification for this product.
    Show details on NVD website

    {
      "containers": {
        "adp": [
          {
            "metrics": [
              {
                "other": {
                  "content": {
                    "id": "CVE-2026-58228",
                    "options": [
                      {
                        "Exploitation": "poc"
                      },
                      {
                        "Automatable": "no"
                      },
                      {
                        "Technical Impact": "partial"
                      }
                    ],
                    "role": "CISA Coordinator",
                    "timestamp": "2026-07-13T18:58:11.563760Z",
                    "version": "2.0.3"
                  },
                  "type": "ssvc"
                }
              }
            ],
            "providerMetadata": {
              "dateUpdated": "2026-07-13T18:58:51.407Z",
              "orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
              "shortName": "CISA-ADP"
            },
            "references": [
              {
                "tags": [
                  "exploit"
                ],
                "url": "https://github.com/phoenixframework/phoenix_live_view/security/advisories/GHSA-5cgh-g58j-m9cq"
              }
            ],
            "title": "CISA ADP Vulnrichment"
          }
        ],
        "cna": {
          "affected": [
            {
              "collectionURL": "https://repo.hex.pm",
              "cpes": [
                "cpe:2.3:a:phoenixframework:phoenix_live_view:*:*:*:*:*:*:*:*"
              ],
              "defaultStatus": "unaffected",
              "modules": [
                "\u0027Elixir.Phoenix.LiveView.Utils\u0027"
              ],
              "packageName": "phoenix_live_view",
              "packageURL": "pkg:hex/phoenix_live_view",
              "product": "phoenix_live_view",
              "programFiles": [
                "lib/phoenix_live_view/utils.ex"
              ],
              "programRoutines": [
                {
                  "name": "\u0027Elixir.Phoenix.LiveView.Utils\u0027:valid_destination!/2"
                },
                {
                  "name": "\u0027Elixir.Phoenix.LiveView.Utils\u0027:valid_live_navigation_destination!/2"
                }
              ],
              "repo": "https://github.com/phoenixframework/phoenix_live_view",
              "vendor": "phoenixframework",
              "versions": [
                {
                  "lessThan": "1.2.7",
                  "status": "affected",
                  "version": "1.2.2",
                  "versionType": "semver"
                }
              ]
            },
            {
              "collectionURL": "https://github.com",
              "cpes": [
                "cpe:2.3:a:phoenixframework:phoenix_live_view:*:*:*:*:*:*:*:*"
              ],
              "defaultStatus": "unaffected",
              "modules": [
                "\u0027Elixir.Phoenix.LiveView.Utils\u0027"
              ],
              "packageName": "phoenixframework/phoenix_live_view",
              "packageURL": "pkg:github/phoenixframework/phoenix_live_view",
              "product": "phoenix_live_view",
              "programFiles": [
                "lib/phoenix_live_view/utils.ex"
              ],
              "programRoutines": [
                {
                  "name": "\u0027Elixir.Phoenix.LiveView.Utils\u0027:valid_destination!/2"
                },
                {
                  "name": "\u0027Elixir.Phoenix.LiveView.Utils\u0027:valid_live_navigation_destination!/2"
                }
              ],
              "repo": "https://github.com/phoenixframework/phoenix_live_view",
              "vendor": "phoenixframework",
              "versions": [
                {
                  "lessThan": "86165533e311469a1b62093fd182d9d874de8106",
                  "status": "affected",
                  "version": "4b63216ae68886db99cf7772af23372d76c40e7e",
                  "versionType": "git"
                }
              ]
            }
          ],
          "cpeApplicability": [
            {
              "nodes": [
                {
                  "cpeMatch": [
                    {
                      "criteria": "cpe:2.3:a:phoenixframework:phoenix_live_view:*:*:*:*:*:*:*:*",
                      "versionEndExcluding": "1.2.7",
                      "versionStartIncluding": "1.2.2",
                      "vulnerable": true
                    }
                  ],
                  "negate": false,
                  "operator": "OR"
                }
              ],
              "operator": "AND"
            }
          ],
          "credits": [
            {
              "lang": "en",
              "type": "finder",
              "value": "Barna Kovacs"
            },
            {
              "lang": "en",
              "type": "remediation developer",
              "value": "Steffen Deusch"
            },
            {
              "lang": "en",
              "type": "analyst",
              "value": "Jos\u00e9 Valim"
            },
            {
              "lang": "en",
              "type": "analyst",
              "value": "Jonatan M\u00e4nnchen / EEF"
            }
          ],
          "descriptions": [
            {
              "lang": "en",
              "supportingMedia": [
                {
                  "base64": false,
                  "type": "text/html",
                  "value": "\u003cp\u003eCross-site scripting vulnerability in phoenixframework phoenix_live_view allows an attacker to bypass URL scheme validation and execute JavaScript in a victim\u0027s browser session.\u003c/p\u003e\u003cp\u003eThe \u003ctt\u003ePhoenix.LiveView.Utils.valid_destination!/2\u003c/tt\u003e and \u003ctt\u003ePhoenix.LiveView.Utils.valid_live_navigation_destination!/2\u003c/tt\u003e functions in \u003ctt\u003elib/phoenix_live_view/utils.ex\u003c/tt\u003e rely on an internal \u003ctt\u003euri_scheme/1\u003c/tt\u003e helper that only detects a scheme when the input\u0027s first byte is an ASCII letter. Inputs beginning with an ASCII control character or space fall through to a nil-returning clause, causing the URL to be treated as a safe relative path.\u003c/p\u003e\u003cp\u003eStandard browsers implement the WHATWG URL parser, which strips leading C0 control and space characters before parsing. As a result, an input such as \u003ctt\u003e\u0026quot; javascript:alert(1)\u0026quot;\u003c/tt\u003e is passed unchanged into \u003ctt\u003e\u0026lt;.link href={...}\u0026gt;\u003c/tt\u003e and, when clicked, is parsed by the browser as a \u003ctt\u003ejavascript:\u003c/tt\u003e URL that executes attacker-controlled script in the victim\u0027s session.\u003c/p\u003e\u003cp\u003eApplications that render user-supplied URLs (for example profile links, redirect targets, or external references) via \u003ctt\u003e\u0026lt;.link href={...}\u0026gt;\u003c/tt\u003e are affected.\u003c/p\u003e\u003cp\u003eThis issue affects phoenix_live_view: from 1.2.2 before 1.2.7.\u003c/p\u003e"
                }
              ],
              "value": "Cross-site scripting vulnerability in phoenixframework phoenix_live_view allows an attacker to bypass URL scheme validation and execute JavaScript in a victim\u0027s browser session.\n\nThe Phoenix.LiveView.Utils.valid_destination!/2 and Phoenix.LiveView.Utils.valid_live_navigation_destination!/2 functions in lib/phoenix_live_view/utils.ex rely on an internal uri_scheme/1 helper that only detects a scheme when the input\u0027s first byte is an ASCII letter. Inputs beginning with an ASCII control character or space fall through to a nil-returning clause, causing the URL to be treated as a safe relative path.\n\nStandard browsers implement the WHATWG URL parser, which strips leading C0 control and space characters before parsing. As a result, an input such as \" javascript:alert(1)\" is passed unchanged into \u003c.link href={...}\u003e and, when clicked, is parsed by the browser as a javascript: URL that executes attacker-controlled script in the victim\u0027s session.\n\nApplications that render user-supplied URLs (for example profile links, redirect targets, or external references) via \u003c.link href={...}\u003e are affected.\n\nThis issue affects phoenix_live_view: from 1.2.2 before 1.2.7."
            }
          ],
          "impacts": [
            {
              "capecId": "CAPEC-63",
              "descriptions": [
                {
                  "lang": "en",
                  "value": "CAPEC-63 Cross-Site Scripting (XSS)"
                }
              ]
            }
          ],
          "metrics": [
            {
              "cvssV4_0": {
                "attackComplexity": "LOW",
                "attackRequirements": "PRESENT",
                "attackVector": "NETWORK",
                "baseScore": 5.1,
                "baseSeverity": "MEDIUM",
                "privilegesRequired": "NONE",
                "subAvailabilityImpact": "NONE",
                "subConfidentialityImpact": "HIGH",
                "subIntegrityImpact": "HIGH",
                "userInteraction": "ACTIVE",
                "vectorString": "CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:A/VC:L/VI:L/VA:N/SC:H/SI:H/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-07-14T04:15:01.996Z",
            "orgId": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db",
            "shortName": "EEF"
          },
          "references": [
            {
              "tags": [
                "vendor-advisory",
                "related"
              ],
              "url": "https://github.com/phoenixframework/phoenix_live_view/security/advisories/GHSA-5cgh-g58j-m9cq"
            },
            {
              "tags": [
                "related"
              ],
              "url": "https://cna.erlef.org/cves/CVE-2026-58228.html"
            },
            {
              "tags": [
                "related"
              ],
              "url": "https://osv.dev/vulnerability/EEF-CVE-2026-58228"
            },
            {
              "tags": [
                "patch"
              ],
              "url": "https://github.com/phoenixframework/phoenix_live_view/commit/86165533e311469a1b62093fd182d9d874de8106"
            }
          ],
          "source": {
            "discovery": "EXTERNAL"
          },
          "title": "Scheme validation bypass in Phoenix.LiveView.Utils leads to XSS via \u003c.link\u003e",
          "workarounds": [
            {
              "lang": "en",
              "supportingMedia": [
                {
                  "base64": false,
                  "type": "text/html",
                  "value": "\u003cp\u003eStrip leading ASCII control and space bytes (code points 0x00 through 0x20) from any untrusted URL before passing it to \u003ctt\u003e\u0026lt;.link href={...}\u0026gt;\u003c/tt\u003e, or reject such inputs outright. This aligns application-level validation with the WHATWG URL parser used by browsers and prevents the scheme-detection bypass.\u003c/p\u003e"
                }
              ],
              "value": "Strip leading ASCII control and space bytes (code points 0x00 through 0x20) from any untrusted URL before passing it to \u003c.link href={...}\u003e, or reject such inputs outright. This aligns application-level validation with the WHATWG URL parser used by browsers and prevents the scheme-detection bypass."
            }
          ],
          "x_generator": {
            "engine": "cvelib 1.8.0"
          }
        }
      },
      "cveMetadata": {
        "assignerOrgId": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db",
        "assignerShortName": "EEF",
        "cveId": "CVE-2026-58228",
        "datePublished": "2026-07-13T18:04:30.636Z",
        "dateReserved": "2026-06-29T18:54:08.633Z",
        "dateUpdated": "2026-07-14T04:15:01.996Z",
        "state": "PUBLISHED"
      },
      "dataType": "CVE_RECORD",
      "dataVersion": "5.2"
    }

    CVE-2026-64941 (GCVE-0-2026-64941)

    Vulnerability from cvelistv5 – Published: 2026-08-10 11:05 – Updated: 2026-08-10 13:00
    VLAI
    Title
    Open redirect in Phoenix.LiveView.validate_local_url!/2 via ASCII tab, LF and CR
    Summary
    URL Redirection to Untrusted Site ('Open Redirect') vulnerability in phoenixframework phoenix_live_view allows an attacker to send a victim's browser to an origin of the attacker's choosing via a :to value containing ASCII tab, LF or CR. redirect/2 validates :to through the private validate_local_url!/2 in lib/phoenix_live_view.ex, which is intended to guarantee the target is a path within the application. It rejects a leading // and any backslash, but not ASCII tab, LF or CR. Browsers strip those three characters before parsing a URL, so a value such as /<TAB>/example.com passes validation as a path and is then resolved as the scheme-relative URL //example.com. The live navigation functions share the guard but are not affected, because the client expands their target against the current origin. push_patch/2 is also affected before 0.7.0, which is when that expansion was added. This issue affects phoenix_live_view: from 0.5.0 before 1.0.19, from 1.1.0-rc.0 before 1.1.33, and from 1.2.0-rc.0 before 1.2.9.
    SSVC
    Exploitation: poc Automatable: no Technical Impact: partial
    CISA Coordinator · CISA-ADP (v2.0.3)
    Decision recorded 2026-08-10 13:00 UTC
    CWE
    • CWE-601 - URL Redirection to Untrusted Site ('Open Redirect')
    Assigner
    EEF
    Impacted products
    Vendor Product Version
    phoenixframework phoenix_live_view Affected: 0.5.0 , < 1.0.19 (semver)
    Affected: 1.1.0-rc.0 , < 1.1.33 (semver)
    Affected: 1.2.0-rc.0 , < 1.2.9 (semver)
        cpe:2.3:a:phoenixframework:phoenix_live_view:*:*:*:*:*:*:*:*
    Create a notification for this product.
    phoenixframework phoenix_live_view Affected: b20dba3f65a380b2e4868dae03397f13d2daa070 , < * (git)
        cpe:2.3:a:phoenixframework:phoenix_live_view:*:*:*:*:*:*:*:*
    Create a notification for this product.
    Show details on NVD website

    {
      "containers": {
        "adp": [
          {
            "metrics": [
              {
                "other": {
                  "content": {
                    "id": "CVE-2026-64941",
                    "options": [
                      {
                        "Exploitation": "poc"
                      },
                      {
                        "Automatable": "no"
                      },
                      {
                        "Technical Impact": "partial"
                      }
                    ],
                    "role": "CISA Coordinator",
                    "timestamp": "2026-08-10T13:00:10.932600Z",
                    "version": "2.0.3"
                  },
                  "type": "ssvc"
                }
              }
            ],
            "providerMetadata": {
              "dateUpdated": "2026-08-10T13:00:33.543Z",
              "orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
              "shortName": "CISA-ADP"
            },
            "references": [
              {
                "tags": [
                  "exploit"
                ],
                "url": "https://github.com/phoenixframework/phoenix_live_view/security/advisories/GHSA-36m4-rm57-3prf"
              }
            ],
            "title": "CISA ADP Vulnrichment"
          }
        ],
        "cna": {
          "affected": [
            {
              "collectionURL": "https://repo.hex.pm",
              "cpes": [
                "cpe:2.3:a:phoenixframework:phoenix_live_view:*:*:*:*:*:*:*:*"
              ],
              "defaultStatus": "unaffected",
              "modules": [
                "\u0027Elixir.Phoenix.LiveView\u0027"
              ],
              "packageName": "phoenix_live_view",
              "packageURL": "pkg:hex/phoenix_live_view",
              "product": "phoenix_live_view",
              "programFiles": [
                "lib/phoenix_live_view.ex"
              ],
              "programRoutines": [
                {
                  "name": "\u0027Elixir.Phoenix.LiveView\u0027:redirect/2"
                },
                {
                  "name": "\u0027Elixir.Phoenix.LiveView\u0027:push_patch/2"
                }
              ],
              "repo": "https://github.com/phoenixframework/phoenix_live_view",
              "vendor": "phoenixframework",
              "versions": [
                {
                  "lessThan": "1.0.19",
                  "status": "affected",
                  "version": "0.5.0",
                  "versionType": "semver"
                },
                {
                  "lessThan": "1.1.33",
                  "status": "affected",
                  "version": "1.1.0-rc.0",
                  "versionType": "semver"
                },
                {
                  "lessThan": "1.2.9",
                  "status": "affected",
                  "version": "1.2.0-rc.0",
                  "versionType": "semver"
                }
              ]
            },
            {
              "collectionURL": "https://github.com",
              "cpes": [
                "cpe:2.3:a:phoenixframework:phoenix_live_view:*:*:*:*:*:*:*:*"
              ],
              "defaultStatus": "unaffected",
              "modules": [
                "\u0027Elixir.Phoenix.LiveView\u0027"
              ],
              "packageName": "phoenixframework/phoenix_live_view",
              "packageURL": "pkg:github/phoenixframework/phoenix_live_view",
              "product": "phoenix_live_view",
              "programFiles": [
                "lib/phoenix_live_view.ex"
              ],
              "programRoutines": [
                {
                  "name": "\u0027Elixir.Phoenix.LiveView\u0027:redirect/2"
                },
                {
                  "name": "\u0027Elixir.Phoenix.LiveView\u0027:push_patch/2"
                }
              ],
              "repo": "https://github.com/phoenixframework/phoenix_live_view",
              "vendor": "phoenixframework",
              "versions": [
                {
                  "changes": [
                    {
                      "at": "0b8c733133466912f81adecaea72b6712370242e",
                      "status": "unaffected"
                    },
                    {
                      "at": "1c164f83df0bb922dfff9c60d125da5b0cfd6619",
                      "status": "unaffected"
                    },
                    {
                      "at": "2068b304d71907064b159b6bc60c5ad85a876ecf",
                      "status": "unaffected"
                    }
                  ],
                  "lessThan": "*",
                  "status": "affected",
                  "version": "b20dba3f65a380b2e4868dae03397f13d2daa070",
                  "versionType": "git"
                }
              ]
            }
          ],
          "configurations": [
            {
              "lang": "en",
              "supportingMedia": [
                {
                  "base64": false,
                  "type": "text/html",
                  "value": "\u003cp\u003eThe application must pass an externally influenced value as \u003ccode\u003e:to\u003c/code\u003e to \u003ccode\u003eredirect/2\u003c/code\u003e, or to \u003ccode\u003epush_patch/2\u003c/code\u003e before 0.7.0, for example a \u003ccode\u003ereturn_to\u003c/code\u003e parameter carried through sign-in or a navigation target taken from a \u003ccode\u003ehandle_event/3\u003c/code\u003e payload.\u003c/p\u003e"
                },
                {
                  "base64": false,
                  "type": "text/markdown",
                  "value": "The application must pass an externally influenced value as `:to` to `redirect/2`, or to `push_patch/2` before 0.7.0, for example a `return_to` parameter carried through sign-in or a navigation target taken from a `handle_event/3` payload."
                }
              ],
              "value": "The application must pass an externally influenced value as :to to redirect/2, or to push_patch/2 before 0.7.0, for example a return_to parameter carried through sign-in or a navigation target taken from a handle_event/3 payload."
            }
          ],
          "cpeApplicability": [
            {
              "nodes": [
                {
                  "cpeMatch": [
                    {
                      "criteria": "cpe:2.3:a:phoenixframework:phoenix_live_view:*:*:*:*:*:*:*:*",
                      "versionEndExcluding": "1.0.19",
                      "versionStartIncluding": "0.5.0",
                      "vulnerable": true
                    },
                    {
                      "criteria": "cpe:2.3:a:phoenixframework:phoenix_live_view:*:*:*:*:*:*:*:*",
                      "versionEndExcluding": "1.1.33",
                      "versionStartIncluding": "1.1.0-rc.0",
                      "vulnerable": true
                    },
                    {
                      "criteria": "cpe:2.3:a:phoenixframework:phoenix_live_view:*:*:*:*:*:*:*:*",
                      "versionEndExcluding": "1.2.9",
                      "versionStartIncluding": "1.2.0-rc.0",
                      "vulnerable": true
                    }
                  ],
                  "negate": false,
                  "operator": "OR"
                }
              ],
              "operator": "AND"
            }
          ],
          "credits": [
            {
              "lang": "en",
              "type": "finder",
              "value": "Eurico Nicacio"
            },
            {
              "lang": "en",
              "type": "remediation developer",
              "value": "Steffen Deusch"
            },
            {
              "lang": "en",
              "type": "remediation reviewer",
              "value": "Jos\u00e9 Valim"
            },
            {
              "lang": "en",
              "type": "analyst",
              "value": "Jonatan M\u00e4nnchen / EEF"
            }
          ],
          "descriptions": [
            {
              "lang": "en",
              "supportingMedia": [
                {
                  "base64": false,
                  "type": "text/html",
                  "value": "\u003cp\u003eURL Redirection to Untrusted Site (\u0027Open Redirect\u0027) vulnerability in phoenixframework phoenix_live_view allows an attacker to send a victim\u0027s browser to an origin of the attacker\u0027s choosing via a \u003ccode\u003e:to\u003c/code\u003e value containing ASCII tab, LF or CR.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003eredirect/2\u003c/code\u003e validates \u003ccode\u003e:to\u003c/code\u003e through the private \u003ccode\u003evalidate_local_url!/2\u003c/code\u003e in \u003ccode\u003elib/phoenix_live_view.ex\u003c/code\u003e, which is intended to guarantee the target is a path within the application. It rejects a leading \u003ccode\u003e//\u003c/code\u003e and any backslash, but not ASCII tab, LF or CR. Browsers strip those three characters before parsing a URL, so a value such as \u003ccode\u003e/\u0026lt;TAB\u0026gt;/example.com\u003c/code\u003e passes validation as a path and is then resolved as the scheme-relative URL \u003ccode\u003e//example.com\u003c/code\u003e. The live navigation functions share the guard but are not affected, because the client expands their target against the current origin. \u003ccode\u003epush_patch/2\u003c/code\u003e is also affected before 0.7.0, which is when that expansion was added.\u003c/p\u003e\n\u003cp\u003eThis issue affects phoenix_live_view: from 0.5.0 before 1.0.19, from 1.1.0-rc.0 before 1.1.33, and from 1.2.0-rc.0 before 1.2.9.\u003c/p\u003e"
                },
                {
                  "base64": false,
                  "type": "text/markdown",
                  "value": "URL Redirection to Untrusted Site (\u0027Open Redirect\u0027) vulnerability in phoenixframework phoenix_live_view allows an attacker to send a victim\u0027s browser to an origin of the attacker\u0027s choosing via a `:to` value containing ASCII tab, LF or CR.\n\n`redirect/2` validates `:to` through the private `validate_local_url!/2` in `lib/phoenix_live_view.ex`, which is intended to guarantee the target is a path within the application. It rejects a leading `//` and any backslash, but not ASCII tab, LF or CR. Browsers strip those three characters before parsing a URL, so a value such as `/\u003cTAB\u003e/example.com` passes validation as a path and is then resolved as the scheme-relative URL `//example.com`. The live navigation functions share the guard but are not affected, because the client expands their target against the current origin. `push_patch/2` is also affected before 0.7.0, which is when that expansion was added.\n\nThis issue affects phoenix_live_view: from 0.5.0 before 1.0.19, from 1.1.0-rc.0 before 1.1.33, and from 1.2.0-rc.0 before 1.2.9."
                }
              ],
              "value": "URL Redirection to Untrusted Site (\u0027Open Redirect\u0027) vulnerability in phoenixframework phoenix_live_view allows an attacker to send a victim\u0027s browser to an origin of the attacker\u0027s choosing via a :to value containing ASCII tab, LF or CR.\n\nredirect/2 validates :to through the private validate_local_url!/2 in lib/phoenix_live_view.ex, which is intended to guarantee the target is a path within the application. It rejects a leading // and any backslash, but not ASCII tab, LF or CR. Browsers strip those three characters before parsing a URL, so a value such as /\u003cTAB\u003e/example.com passes validation as a path and is then resolved as the scheme-relative URL //example.com. The live navigation functions share the guard but are not affected, because the client expands their target against the current origin. push_patch/2 is also affected before 0.7.0, which is when that expansion was added.\n\nThis issue affects phoenix_live_view: from 0.5.0 before 1.0.19, from 1.1.0-rc.0 before 1.1.33, and from 1.2.0-rc.0 before 1.2.9."
            }
          ],
          "impacts": [
            {
              "capecId": "CAPEC-3",
              "descriptions": [
                {
                  "lang": "en",
                  "value": "CAPEC-3 Using Leading \u0027Ghost\u0027 Character Sequences to Bypass Input Filters"
                }
              ]
            }
          ],
          "metrics": [
            {
              "cvssV4_0": {
                "Automatable": "NOT_DEFINED",
                "Recovery": "NOT_DEFINED",
                "Safety": "NOT_DEFINED",
                "attackComplexity": "LOW",
                "attackRequirements": "PRESENT",
                "attackVector": "NETWORK",
                "baseScore": 2.1,
                "baseSeverity": "LOW",
                "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:P/PR:N/UI:A/VC:N/VI:N/VA:N/SC:L/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-10T11:05:14.571Z",
            "orgId": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db",
            "shortName": "EEF"
          },
          "references": [
            {
              "tags": [
                "vendor-advisory",
                "related"
              ],
              "url": "https://github.com/phoenixframework/phoenix_live_view/security/advisories/GHSA-36m4-rm57-3prf"
            },
            {
              "tags": [
                "related"
              ],
              "url": "https://cna.erlef.org/cves/CVE-2026-64941.html"
            },
            {
              "tags": [
                "related"
              ],
              "url": "https://osv.dev/vulnerability/EEF-CVE-2026-64941"
            },
            {
              "tags": [
                "patch"
              ],
              "url": "https://github.com/phoenixframework/phoenix_live_view/commit/0b8c733133466912f81adecaea72b6712370242e"
            },
            {
              "tags": [
                "patch"
              ],
              "url": "https://github.com/phoenixframework/phoenix_live_view/commit/1c164f83df0bb922dfff9c60d125da5b0cfd6619"
            },
            {
              "tags": [
                "patch"
              ],
              "url": "https://github.com/phoenixframework/phoenix_live_view/commit/2068b304d71907064b159b6bc60c5ad85a876ecf"
            }
          ],
          "source": {
            "discovery": "EXTERNAL"
          },
          "title": "Open redirect in Phoenix.LiveView.validate_local_url!/2 via ASCII tab, LF and CR",
          "workarounds": [
            {
              "lang": "en",
              "supportingMedia": [
                {
                  "base64": false,
                  "type": "text/html",
                  "value": "\u003cp\u003eReject any untrusted value containing ASCII tab, LF or CR before passing it as \u003ccode\u003e:to\u003c/code\u003e to \u003ccode\u003eredirect/2\u003c/code\u003e, or to \u003ccode\u003epush_patch/2\u003c/code\u003e before 0.7.0. Alternatively, map client-supplied navigation targets to a fixed set of known-good paths rather than forwarding the value.\u003c/p\u003e"
                },
                {
                  "base64": false,
                  "type": "text/markdown",
                  "value": "Reject any untrusted value containing ASCII tab, LF or CR before passing it as `:to` to `redirect/2`, or to `push_patch/2` before 0.7.0. Alternatively, map client-supplied navigation targets to a fixed set of known-good paths rather than forwarding the value."
                }
              ],
              "value": "Reject any untrusted value containing ASCII tab, LF or CR before passing it as :to to redirect/2, or to push_patch/2 before 0.7.0. Alternatively, map client-supplied navigation targets to a fixed set of known-good paths rather than forwarding the value."
            }
          ]
        }
      },
      "cveMetadata": {
        "assignerOrgId": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db",
        "assignerShortName": "EEF",
        "cveId": "CVE-2026-64941",
        "datePublished": "2026-08-10T11:05:14.571Z",
        "dateReserved": "2026-08-09T16:30:01.572Z",
        "dateUpdated": "2026-08-10T13:00:33.543Z",
        "state": "PUBLISHED"
      },
      "dataType": "CVE_RECORD",
      "dataVersion": "5.2"
    }

    CVE-2026-58228 (GCVE-0-2026-58228)

    Vulnerability from cvelistv5 – Published: 2026-07-13 18:04 – Updated: 2026-07-14 04:15
    VLAI
    Title
    Scheme validation bypass in Phoenix.LiveView.Utils leads to XSS via <.link>
    Summary
    Cross-site scripting vulnerability in phoenixframework phoenix_live_view allows an attacker to bypass URL scheme validation and execute JavaScript in a victim's browser session. The Phoenix.LiveView.Utils.valid_destination!/2 and Phoenix.LiveView.Utils.valid_live_navigation_destination!/2 functions in lib/phoenix_live_view/utils.ex rely on an internal uri_scheme/1 helper that only detects a scheme when the input's first byte is an ASCII letter. Inputs beginning with an ASCII control character or space fall through to a nil-returning clause, causing the URL to be treated as a safe relative path. Standard browsers implement the WHATWG URL parser, which strips leading C0 control and space characters before parsing. As a result, an input such as " javascript:alert(1)" is passed unchanged into <.link href={...}> and, when clicked, is parsed by the browser as a javascript: URL that executes attacker-controlled script in the victim's session. Applications that render user-supplied URLs (for example profile links, redirect targets, or external references) via <.link href={...}> are affected. This issue affects phoenix_live_view: from 1.2.2 before 1.2.7.
    SSVC
    Exploitation: poc Automatable: no Technical Impact: partial
    CISA Coordinator · CISA-ADP (v2.0.3)
    Decision recorded 2026-07-13 18:58 UTC
    CWE
    • CWE-79 - Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting')
    Assigner
    EEF
    Impacted products
    Vendor Product Version
    phoenixframework phoenix_live_view Affected: 1.2.2 , < 1.2.7 (semver)
        cpe:2.3:a:phoenixframework:phoenix_live_view:*:*:*:*:*:*:*:*
    Create a notification for this product.
    phoenixframework phoenix_live_view Affected: 4b63216ae68886db99cf7772af23372d76c40e7e , < 86165533e311469a1b62093fd182d9d874de8106 (git)
        cpe:2.3:a:phoenixframework:phoenix_live_view:*:*:*:*:*:*:*:*
    Create a notification for this product.
    Show details on NVD website

    {
      "containers": {
        "adp": [
          {
            "metrics": [
              {
                "other": {
                  "content": {
                    "id": "CVE-2026-58228",
                    "options": [
                      {
                        "Exploitation": "poc"
                      },
                      {
                        "Automatable": "no"
                      },
                      {
                        "Technical Impact": "partial"
                      }
                    ],
                    "role": "CISA Coordinator",
                    "timestamp": "2026-07-13T18:58:11.563760Z",
                    "version": "2.0.3"
                  },
                  "type": "ssvc"
                }
              }
            ],
            "providerMetadata": {
              "dateUpdated": "2026-07-13T18:58:51.407Z",
              "orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
              "shortName": "CISA-ADP"
            },
            "references": [
              {
                "tags": [
                  "exploit"
                ],
                "url": "https://github.com/phoenixframework/phoenix_live_view/security/advisories/GHSA-5cgh-g58j-m9cq"
              }
            ],
            "title": "CISA ADP Vulnrichment"
          }
        ],
        "cna": {
          "affected": [
            {
              "collectionURL": "https://repo.hex.pm",
              "cpes": [
                "cpe:2.3:a:phoenixframework:phoenix_live_view:*:*:*:*:*:*:*:*"
              ],
              "defaultStatus": "unaffected",
              "modules": [
                "\u0027Elixir.Phoenix.LiveView.Utils\u0027"
              ],
              "packageName": "phoenix_live_view",
              "packageURL": "pkg:hex/phoenix_live_view",
              "product": "phoenix_live_view",
              "programFiles": [
                "lib/phoenix_live_view/utils.ex"
              ],
              "programRoutines": [
                {
                  "name": "\u0027Elixir.Phoenix.LiveView.Utils\u0027:valid_destination!/2"
                },
                {
                  "name": "\u0027Elixir.Phoenix.LiveView.Utils\u0027:valid_live_navigation_destination!/2"
                }
              ],
              "repo": "https://github.com/phoenixframework/phoenix_live_view",
              "vendor": "phoenixframework",
              "versions": [
                {
                  "lessThan": "1.2.7",
                  "status": "affected",
                  "version": "1.2.2",
                  "versionType": "semver"
                }
              ]
            },
            {
              "collectionURL": "https://github.com",
              "cpes": [
                "cpe:2.3:a:phoenixframework:phoenix_live_view:*:*:*:*:*:*:*:*"
              ],
              "defaultStatus": "unaffected",
              "modules": [
                "\u0027Elixir.Phoenix.LiveView.Utils\u0027"
              ],
              "packageName": "phoenixframework/phoenix_live_view",
              "packageURL": "pkg:github/phoenixframework/phoenix_live_view",
              "product": "phoenix_live_view",
              "programFiles": [
                "lib/phoenix_live_view/utils.ex"
              ],
              "programRoutines": [
                {
                  "name": "\u0027Elixir.Phoenix.LiveView.Utils\u0027:valid_destination!/2"
                },
                {
                  "name": "\u0027Elixir.Phoenix.LiveView.Utils\u0027:valid_live_navigation_destination!/2"
                }
              ],
              "repo": "https://github.com/phoenixframework/phoenix_live_view",
              "vendor": "phoenixframework",
              "versions": [
                {
                  "lessThan": "86165533e311469a1b62093fd182d9d874de8106",
                  "status": "affected",
                  "version": "4b63216ae68886db99cf7772af23372d76c40e7e",
                  "versionType": "git"
                }
              ]
            }
          ],
          "cpeApplicability": [
            {
              "nodes": [
                {
                  "cpeMatch": [
                    {
                      "criteria": "cpe:2.3:a:phoenixframework:phoenix_live_view:*:*:*:*:*:*:*:*",
                      "versionEndExcluding": "1.2.7",
                      "versionStartIncluding": "1.2.2",
                      "vulnerable": true
                    }
                  ],
                  "negate": false,
                  "operator": "OR"
                }
              ],
              "operator": "AND"
            }
          ],
          "credits": [
            {
              "lang": "en",
              "type": "finder",
              "value": "Barna Kovacs"
            },
            {
              "lang": "en",
              "type": "remediation developer",
              "value": "Steffen Deusch"
            },
            {
              "lang": "en",
              "type": "analyst",
              "value": "Jos\u00e9 Valim"
            },
            {
              "lang": "en",
              "type": "analyst",
              "value": "Jonatan M\u00e4nnchen / EEF"
            }
          ],
          "descriptions": [
            {
              "lang": "en",
              "supportingMedia": [
                {
                  "base64": false,
                  "type": "text/html",
                  "value": "\u003cp\u003eCross-site scripting vulnerability in phoenixframework phoenix_live_view allows an attacker to bypass URL scheme validation and execute JavaScript in a victim\u0027s browser session.\u003c/p\u003e\u003cp\u003eThe \u003ctt\u003ePhoenix.LiveView.Utils.valid_destination!/2\u003c/tt\u003e and \u003ctt\u003ePhoenix.LiveView.Utils.valid_live_navigation_destination!/2\u003c/tt\u003e functions in \u003ctt\u003elib/phoenix_live_view/utils.ex\u003c/tt\u003e rely on an internal \u003ctt\u003euri_scheme/1\u003c/tt\u003e helper that only detects a scheme when the input\u0027s first byte is an ASCII letter. Inputs beginning with an ASCII control character or space fall through to a nil-returning clause, causing the URL to be treated as a safe relative path.\u003c/p\u003e\u003cp\u003eStandard browsers implement the WHATWG URL parser, which strips leading C0 control and space characters before parsing. As a result, an input such as \u003ctt\u003e\u0026quot; javascript:alert(1)\u0026quot;\u003c/tt\u003e is passed unchanged into \u003ctt\u003e\u0026lt;.link href={...}\u0026gt;\u003c/tt\u003e and, when clicked, is parsed by the browser as a \u003ctt\u003ejavascript:\u003c/tt\u003e URL that executes attacker-controlled script in the victim\u0027s session.\u003c/p\u003e\u003cp\u003eApplications that render user-supplied URLs (for example profile links, redirect targets, or external references) via \u003ctt\u003e\u0026lt;.link href={...}\u0026gt;\u003c/tt\u003e are affected.\u003c/p\u003e\u003cp\u003eThis issue affects phoenix_live_view: from 1.2.2 before 1.2.7.\u003c/p\u003e"
                }
              ],
              "value": "Cross-site scripting vulnerability in phoenixframework phoenix_live_view allows an attacker to bypass URL scheme validation and execute JavaScript in a victim\u0027s browser session.\n\nThe Phoenix.LiveView.Utils.valid_destination!/2 and Phoenix.LiveView.Utils.valid_live_navigation_destination!/2 functions in lib/phoenix_live_view/utils.ex rely on an internal uri_scheme/1 helper that only detects a scheme when the input\u0027s first byte is an ASCII letter. Inputs beginning with an ASCII control character or space fall through to a nil-returning clause, causing the URL to be treated as a safe relative path.\n\nStandard browsers implement the WHATWG URL parser, which strips leading C0 control and space characters before parsing. As a result, an input such as \" javascript:alert(1)\" is passed unchanged into \u003c.link href={...}\u003e and, when clicked, is parsed by the browser as a javascript: URL that executes attacker-controlled script in the victim\u0027s session.\n\nApplications that render user-supplied URLs (for example profile links, redirect targets, or external references) via \u003c.link href={...}\u003e are affected.\n\nThis issue affects phoenix_live_view: from 1.2.2 before 1.2.7."
            }
          ],
          "impacts": [
            {
              "capecId": "CAPEC-63",
              "descriptions": [
                {
                  "lang": "en",
                  "value": "CAPEC-63 Cross-Site Scripting (XSS)"
                }
              ]
            }
          ],
          "metrics": [
            {
              "cvssV4_0": {
                "attackComplexity": "LOW",
                "attackRequirements": "PRESENT",
                "attackVector": "NETWORK",
                "baseScore": 5.1,
                "baseSeverity": "MEDIUM",
                "privilegesRequired": "NONE",
                "subAvailabilityImpact": "NONE",
                "subConfidentialityImpact": "HIGH",
                "subIntegrityImpact": "HIGH",
                "userInteraction": "ACTIVE",
                "vectorString": "CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:A/VC:L/VI:L/VA:N/SC:H/SI:H/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-07-14T04:15:01.996Z",
            "orgId": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db",
            "shortName": "EEF"
          },
          "references": [
            {
              "tags": [
                "vendor-advisory",
                "related"
              ],
              "url": "https://github.com/phoenixframework/phoenix_live_view/security/advisories/GHSA-5cgh-g58j-m9cq"
            },
            {
              "tags": [
                "related"
              ],
              "url": "https://cna.erlef.org/cves/CVE-2026-58228.html"
            },
            {
              "tags": [
                "related"
              ],
              "url": "https://osv.dev/vulnerability/EEF-CVE-2026-58228"
            },
            {
              "tags": [
                "patch"
              ],
              "url": "https://github.com/phoenixframework/phoenix_live_view/commit/86165533e311469a1b62093fd182d9d874de8106"
            }
          ],
          "source": {
            "discovery": "EXTERNAL"
          },
          "title": "Scheme validation bypass in Phoenix.LiveView.Utils leads to XSS via \u003c.link\u003e",
          "workarounds": [
            {
              "lang": "en",
              "supportingMedia": [
                {
                  "base64": false,
                  "type": "text/html",
                  "value": "\u003cp\u003eStrip leading ASCII control and space bytes (code points 0x00 through 0x20) from any untrusted URL before passing it to \u003ctt\u003e\u0026lt;.link href={...}\u0026gt;\u003c/tt\u003e, or reject such inputs outright. This aligns application-level validation with the WHATWG URL parser used by browsers and prevents the scheme-detection bypass.\u003c/p\u003e"
                }
              ],
              "value": "Strip leading ASCII control and space bytes (code points 0x00 through 0x20) from any untrusted URL before passing it to \u003c.link href={...}\u003e, or reject such inputs outright. This aligns application-level validation with the WHATWG URL parser used by browsers and prevents the scheme-detection bypass."
            }
          ],
          "x_generator": {
            "engine": "cvelib 1.8.0"
          }
        }
      },
      "cveMetadata": {
        "assignerOrgId": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db",
        "assignerShortName": "EEF",
        "cveId": "CVE-2026-58228",
        "datePublished": "2026-07-13T18:04:30.636Z",
        "dateReserved": "2026-06-29T18:54:08.633Z",
        "dateUpdated": "2026-07-14T04:15:01.996Z",
        "state": "PUBLISHED"
      },
      "dataType": "CVE_RECORD",
      "dataVersion": "5.2"
    }