CVE-2026-44541: Ethyca fides Cross-Site Scripting Vulnerability

HIGH
Advisory Identifier: GHSA-5qrq-9645-g5g2
CWE-79
Published
Advisory Summary

CVE-2026-44541 is a HIGH cross-site scripting vulnerability (CWE-79: Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting')) affecting Ethyca fides libraries in the PyPI ecosystem. The issue involves ethyca-fides has a dom-based xss vulnerability in fides.js via fides_description override. Remediation is available by upgrading affected packages to version 2.84.5.

CVE-2026-44541 at a Glance

CVE Identifier CVE-2026-44541
GHSA Identifier GHSA-5qrq-9645-g5g2
Severity HIGH
CVSS v3.1 Base Score N/A
CWE Classification CWE-79: Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting')
Affected Product Ethyca fides
Package Ecosystem PyPI
Published Date
Last Updated

How to Fix CVE-2026-44541

To remediate this vulnerability, upgrade all affected Ethyca fides dependencies to a patched release. Both direct and transitive dependencies should be checked, as frameworks or security libraries may pull in vulnerable versions transitively.

ethyca-fides fixed: 2.84.5
pip install ethyca-fides>=2.84.5
Verify Direct and Transitive Dependencies

Run the following command in your project directory to verify that all resolved dependencies use the patched release:

pip show ethyca-fides

How to Check if You Are Affected

To determine whether your Python environment is affected by CVE-2026-44541, inspect your installed packages using pip:

pip show ethyca-fides

Analyze the terminal output to locate any version of Ethyca fides in your dependency tree. If any resolved version matches the vulnerable ranges listed in the table below (for example, versions earlier than 2.84.5), your application is affected.

Note: The pip show ethyca-fides command checks currently installed packages in your active Python environment.

Technical Details

Vulnerability Mechanism & Technical Analysis

This vulnerability is classified under CWE-79: Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting'), where the product does not neutralize or incorrectly neutralizes user-controllable input before it is placed in output that is used as a web page that is served to other users. In Ethyca fides, software state validation or input boundaries are circumvented during processing. Review the official source advisory statement below for specific affected components, classes, and reproduction details.

Source Advisory Statement

### Summary `fides.js` is the script that renders Fides's consent banner on customer websites. It lets the embedding page override the banner's description text at runtime via a URL query parameter, a JavaScript global, or a cookie. On sites that have opted into HTML-formatted descriptions, the overridden value is rendered as live HTML without passing through the server-side sanitiser the rendering path was designed to trust. The result is a DOM-based XSS that any visitor can trigger with a crafted link, no authentication required. The cookie source lets the payload persist, so a single click can plant a payload that fires on every subsequent banner render across all subdomains until cookies are cleared. ### Am I affected? This vulnerability affects Fides Enterprise deployments that use `fides.js` for consent management, a.k.a. "Janus", and have HTML-formatted banner descriptions enabled (the `FIDES_PRIVACY_CENTER__ALLOW_HTML_DESCRIPTION` Privacy Center container env var set to `true` ). Deployments that do not load `fides.js`, or that leave HTML descriptions off (the default), are not affected. The vulnerable code lives in the open-source `ethyca-fides` PyPI package, which is why this is published as a GHSA and CVE against Fides OSS, but only Fides Enterprise consent management platform deployments exercise the affected path. To self-test, visit any page where your site loads the consent banner, replacing `<your-site>`: ``` https://<your-site>/?fides_override_language=en&fides_description=<img src=x onerror="alert(`DOM XSS in fides_description. Origin: ${document.domain}`)"> ``` If a browser `alert()` appears showing the embedding origin when the banner renders, the deployment is affected. If the banner does not auto-open, click the manage privacy preferences link to display it. <img width="1392" height="1031" alt="dom-xss-localhost" src="https://github.com/user-attachments/assets/548bcf44-e4ab-4070-ab31-89c6cff79be1" /> If no alert appears, the deployment is not affected via this path. The `fides_override_language=en` parameter is required because experience-translation overrides only apply when the override language matches the active locale. Adjust to match the active locale on the target site if `en` is not it. ### Details The vulnerability is a trust gap between two features that are safe in isolation but unsafe together. The first feature is the override mechanism. `fides.js` lets the embedding page replace certain banner fields at runtime by reading them from the URL, a JavaScript global, or a cookie on the page origin. The description text is one of the overrideable fields. The second feature is HTML-formatted descriptions. When the `allowHTMLDescription` server-controlled flag is on, the rendering path writes the description into the DOM as live HTML rather than plain text. This mode relies on a server-side sanitiser (`nh3`) to clean any HTML before it reaches the client, so the rendering sink can trust its input. Combining the two breaks the assumption. The override mechanism feeds the description directly from a client-controlled source, never reaching the server, so the sanitiser the rendering path was designed to trust never runs. On a deployment that has both features active, an attacker-supplied value travels straight from URL or cookie to the HTML sink and executes as script. The cookie source compounds the impact. Cookies set by JavaScript on the apex domain are visible to every subdomain on subsequent loads, so a payload delivered via URL can write a `fides_description` cookie that fires on every later banner render across the entire site, until the cookie is cleared. ### Impact A successful exploit gives the attacker arbitrary JavaScript execution in the embedding site's origin, with the same authority as the site's own scripts. The payload can read and modify any data the page can access, issue requests on behalf of the visitor, and render content that appears to come from the site itself. The actual consequences on a given deployment depend on what the embedding origin holds and what other defences (CSP, cookie flags, origin isolation) are in place. The cookie-based persistence variant raises the impact ceiling, since a single click can convert into a payload that fires on every subsequent banner render across the apex and all subdomains until the visitor clears their cookies. ### Patches This vulnerability has been patched in Fides OSS version `2.84.5`, specifically `ethyca/fides-privacy-center:2.84.5` Users are advised to upgrade to this version or later to secure their systems against these threats. Fides Enterprise (fidesplus) version `2.84.6` contains the same patch. ### Workarounds Set `FIDES_PRIVACY_CENTER__ALLOW_HTML_DESCRIPTION=false` on the Privacy Center container(s) and redeploy. The XSS sink relies on the flag being on, so turning it off makes `fides.js` strip HTML from the description before rendering, regardless of which source the value came from. ### Severity This vulnerability has been assigned a severity of HIGH with a CVSS v4 vector of `CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:N/VA:N/SC:H/SI:H/SA:N` (7.0, High). The score reflects the worst realistic exploitation path: an attacker who can plant a `fides_description` cookie on the target origin gets persistent script execution that fires on every visitor's banner render, with no further interaction required. Cookie-write capability is not always available to a remote attacker, and the score accounts for that as a precondition, but when it is available the impact is script execution in the embedding site's origin every time the banner or modal renders. The more common delivery path (a crafted link the victim clicks) scores 6.3, Medium, with a vector of `CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:A/VC:N/VI:N/VA:N/SC:H/SI:H/SA:N`. Per the FIRST [CVSS 4.0 User Guide](https://www.first.org/cvss/v4.0/user-guide), library-level vulnerabilities should be scored against the "reasonable worst-case scenario", since the analyst cannot anticipate every deployment context. We publish the higher score on that basis. The published score is the base severity of the vulnerability itself. Real-world impact on a given deployment can be higher or lower depending on the embedding site's own defences. Sites with `HttpOnly` session cookies, strict Content-Security-Policy, and authentication flows isolated from the consent experience origin reduce the surface a payload can reach. Sites with permissive CSP, JavaScript-readable session tokens, or same-origin OIDC/social-login flows expose more. Operators should assess the score against their own environment.

CVE-2026-44541 Affected Ethyca fides Versions

1 component(s)
Fixed Versions:
2.84.5
Product / Package Ecosystem Affected Versions Fixed Version
ethyca-fides
PyPI
≥ 2.33.0
< 2.84.5
2.84.5

References

Frequently Asked Questions

What is CVE-2026-44541?
CVE-2026-44541 is a security vulnerability in Ethyca fides involving ethyca-fides has a DOM-based XSS vulnerability in fides.js via fides_description override under CWE-79: Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting').
Which Ethyca fides versions are affected?
Affected versions include releases prior to 2.84.5 across affected packages: ethyca-fides.
What version fixes CVE-2026-44541?
Upgrading to 2.84.5 (or the latest patched release for your respective branch) resolves the vulnerability.
Is ethyca-fides affected?
Yes, ethyca-fides is affected in releases prior to 2.84.5. Upgrade your dependency to 2.84.5 or later.
What CWE is associated with CVE-2026-44541?
CVE-2026-44541 is classified under CWE-79: Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting') (The product does not neutralize or incorrectly neutralizes user-controllable input before it is placed in output that is used as a web page that is served to other users.).
How can I check PyPI dependencies for CVE-2026-44541?
Run the dependency tree command: 'pip show ethyca-fides'. This command lists direct and transitive dependencies in your build configuration so you can verify if a vulnerable version is resolved.
Machine-readable OSV JSON OSV v1.5 Schema
Normalized schema output
{
  "schema_version" : "1.4.0",
  "id" : "GHSA-5qrq-9645-g5g2",
  "modified" : "2026-06-09T13:12:19Z",
  "published" : "2026-05-14T19:04:14Z",
  "aliases" : [ "CVE-2026-44541" ],
  "summary" : "ethyca-fides has a DOM-based XSS vulnerability in fides.js via fides_description override",
  "details" : "### Summary\n\n`fides.js` is the script that renders Fides's consent banner on customer websites. It lets the embedding page override the banner's description text at runtime via a URL query parameter, a JavaScript global, or a cookie. On sites that have opted into HTML-formatted descriptions, the overridden value is rendered as live HTML without passing through the server-side sanitiser the rendering path was designed to trust.\n\nThe result is a DOM-based XSS that any visitor can trigger with a crafted link, no authentication required. The cookie source lets the payload persist, so a single click can plant a payload that fires on every subsequent banner render across all subdomains until cookies are cleared.\n\n### Am I affected?\n\nThis vulnerability affects Fides Enterprise deployments that use `fides.js` for consent management, a.k.a. \"Janus\", and have HTML-formatted banner descriptions enabled (the `FIDES_PRIVACY_CENTER__ALLOW_HTML_DESCRIPTION` Privacy Center container env var set to `true` ). Deployments that do not load `fides.js`, or that leave HTML descriptions off (the default), are not affected. The vulnerable code lives in the open-source `ethyca-fides` PyPI package, which is why this is published as a GHSA and CVE against Fides OSS, but only Fides Enterprise consent management platform deployments exercise the affected path.\n\nTo self-test, visit any page where your site loads the consent banner, replacing `<your-site>`:\n\n```\nhttps://<your-site>/?fides_override_language=en&fides_description=<img src=x onerror=\"alert(`DOM XSS in fides_description. Origin: ${document.domain}`)\">\n```\n\nIf a browser `alert()` appears showing the embedding origin when the banner renders, the deployment is affected. If the banner does not auto-open, click the manage privacy preferences link to display it.\n\n<img width=\"1392\" height=\"1031\" alt=\"dom-xss-localhost\" src=\"https://github.com/user-attachments/assets/548bcf44-e4ab-4070-ab31-89c6cff79be1\" />\n\nIf no alert appears, the deployment is not affected via this path.\n\nThe `fides_override_language=en` parameter is required because experience-translation overrides only apply when the override language matches the active locale. Adjust to match the active locale on the target site if `en` is not it.\n\n### Details\n\nThe vulnerability is a trust gap between two features that are safe in isolation but unsafe together.\n\nThe first feature is the override mechanism. `fides.js` lets the embedding page replace certain banner fields at runtime by reading them from the URL, a JavaScript global, or a cookie on the page origin. The description text is one of the overrideable fields.\n\nThe second feature is HTML-formatted descriptions. When the `allowHTMLDescription` server-controlled flag is on, the rendering path writes the description into the DOM as live HTML rather than plain text. This mode relies on a server-side sanitiser (`nh3`) to clean any HTML before it reaches the client, so the rendering sink can trust its input.\n\nCombining the two breaks the assumption. The override mechanism feeds the description directly from a client-controlled source, never reaching the server, so the sanitiser the rendering path was designed to trust never runs. On a deployment that has both features active, an attacker-supplied value travels straight from URL or cookie to the HTML sink and executes as script.\n\nThe cookie source compounds the impact. Cookies set by JavaScript on the apex domain are visible to every subdomain on subsequent loads, so a payload delivered via URL can write a `fides_description` cookie that fires on every later banner render across the entire site, until the cookie is cleared.\n\n### Impact\n\nA successful exploit gives the attacker arbitrary JavaScript execution in the embedding site's origin, with the same authority as the site's own scripts. The payload can read and modify any data the page can access, issue requests on behalf of the visitor, and render content that appears to come from the site itself. The actual consequences on a given deployment depend on what the embedding origin holds and what other defences (CSP, cookie flags, origin isolation) are in place.\n\nThe cookie-based persistence variant raises the impact ceiling, since a single click can convert into a payload that fires on every subsequent banner render across the apex and all subdomains until the visitor clears their cookies.\n\n### Patches\n\nThis vulnerability has been patched in Fides OSS version `2.84.5`, specifically `ethyca/fides-privacy-center:2.84.5` Users are advised to upgrade to this version or later to secure their systems against these threats.\n\nFides Enterprise (fidesplus) version `2.84.6` contains the same patch.\n\n### Workarounds\n\nSet `FIDES_PRIVACY_CENTER__ALLOW_HTML_DESCRIPTION=false` on the Privacy Center container(s) and redeploy. The XSS sink relies on the flag being on, so turning it off makes `fides.js` strip HTML from the description before rendering, regardless of which source the value came from.\n\n### Severity\n\nThis vulnerability has been assigned a severity of HIGH with a CVSS v4 vector of `CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:N/VA:N/SC:H/SI:H/SA:N` (7.0, High).\n\nThe score reflects the worst realistic exploitation path: an attacker who can plant a `fides_description` cookie on the target origin gets persistent script execution that fires on every visitor's banner render, with no further interaction required. Cookie-write capability is not always available to a remote attacker, and the score accounts for that as a precondition, but when it is available the impact is script execution in the embedding site's origin every time the banner or modal renders.\n\nThe more common delivery path (a crafted link the victim clicks) scores 6.3, Medium, with a vector of `CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:A/VC:N/VI:N/VA:N/SC:H/SI:H/SA:N`. Per the FIRST [CVSS 4.0 User Guide](https://www.first.org/cvss/v4.0/user-guide), library-level vulnerabilities should be scored against the \"reasonable worst-case scenario\", since the analyst cannot anticipate every deployment context. We publish the higher score on that basis.\n\nThe published score is the base severity of the vulnerability itself. Real-world impact on a given deployment can be higher or lower depending on the embedding site's own defences. Sites with `HttpOnly` session cookies, strict Content-Security-Policy, and authentication flows isolated from the consent experience origin reduce the surface a payload can reach. Sites with permissive CSP, JavaScript-readable session tokens, or same-origin OIDC/social-login flows expose more. Operators should assess the score against their own environment.",
  "severity" : [ {
    "type" : "CVSS_V4",
    "score" : "CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:N/VA:N/SC:H/SI:H/SA:N"
  } ],
  "affected" : [ {
    "package" : {
      "ecosystem" : "PyPI",
      "name" : "ethyca-fides"
    },
    "ranges" : [ {
      "type" : "ECOSYSTEM",
      "events" : [ {
        "introduced" : "2.33.0"
      }, {
        "fixed" : "2.84.5"
      } ]
    } ]
  } ],
  "references" : [ {
    "type" : "WEB",
    "url" : "https://github.com/ethyca/fides/security/advisories/GHSA-5qrq-9645-g5g2"
  }, {
    "type" : "ADVISORY",
    "url" : "https://nvd.nist.gov/vuln/detail/CVE-2026-44541"
  }, {
    "type" : "WEB",
    "url" : "https://github.com/ethyca/fides/commit/67e43b10b1096c7f84d5c0eeba08ee3b7846b7cd"
  }, {
    "type" : "PACKAGE",
    "url" : "https://github.com/ethyca/fides"
  }, {
    "type" : "WEB",
    "url" : "https://github.com/ethyca/fides/releases/tag/2.84.5"
  } ],
  "database_specific" : {
    "cwe_ids" : [ "CWE-79" ],
    "severity" : "HIGH",
    "github_reviewed" : true,
    "github_reviewed_at" : "2026-05-14T19:04:14Z",
    "nvd_published_at" : "2026-06-08T21:16:45Z"
  }
}