{"id":"CVE-2026-120540","aliases":["EUVD-2026-118572","GHSA-qp3p-7592-f8mv"],"status":"published","title":"iubenda | All-in-one Compliance for GDPR / CCPA Cookie Consent + more \u003c= 3.13.6 - Unauthenticated Stored Cross-Site Scripting via Comment Content via IUB-COOKIE-BLOCK Marker","description":"The iubenda | All-in-one Compliance for GDPR / CCPA Cookie Consent + more plugin for WordPress is vulnerable to Stored Cross-Site Scripting in versions up to, and including, 3.13.6. This is due to the way iubendaParser::parse_comments() re-processes HTML inside IUB-COOKIE-BLOCK markers through the bundled simple_html_dom parser after WordPress has already KSES-filtered the saved comment: simple_html_dom's remove_noise() stores \u003ccode\u003e bodies under a deterministic key ('___noise___ 1000') and restore_noise() later substitutes any matching substring back into attribute values WITHOUT re-escaping, allowing a quote-breaking payload stashed in an allowed \u003ccode\u003e element to be injected into an allowed \u003cabbr title=\"___noise___ 1000\"\u003e attribute at render time. This makes it possible for unauthenticated attackers to inject arbitrary web scripts in pages that will execute whenever a user accesses an injected page, after an administrator approves the first (otherwise moderated) comment under WordPress's default comment_previously_approved setting.","severity":{"version":"3.1","score":7.2,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:L/I:L/A:N","level":"high","assessor":"cna","from":"cve"},"epss":{"day":"2026-11-12","score":0.00247,"percentile":0.16105,"model":"v2026.06.15"},"facts":{"in_kev":false,"known_exploited":false,"public_exploit":false,"fix_available":false},"cwes":["CWE-79"],"published":"2026-11-07T02:29:18Z","modified":"2026-11-07T03:31:18Z","products":[{"vendor":"iubenda","product":"iubenda | all-in-one compliance for gdpr / ccpa cookie consent + more"},{"vendor":"unknown","product":"iubenda | all-in-one compliance for gdpr / ccpa cookie consent + more"}],"references":[{"url":"https://www.wordfence.com/threat-intel/vulnerabilities/id/fc26d5a0-86fc-48b5-af8f-73dd9a7f2b39?source=cve"},{"url":"https://plugins.trac.wordpress.org/browser/iubenda-cookie-law-solution/tags/3.13.5/iubenda_cookie_solution.php#L857"},{"url":"https://plugins.trac.wordpress.org/browser/iubenda-cookie-law-solution/tags/3.13.5/iubenda-cookie-class/iubenda.class.php#L825"},{"url":"https://plugins.trac.wordpress.org/browser/iubenda-cookie-law-solution/tags/3.13.5/iubenda-cookie-class/simple_html_dom.php#L471"},{"url":"https://plugins.trac.wordpress.org/browser/iubenda-cookie-law-solution/tags/3.13.5/iubenda-cookie-class/simple_html_dom.php#L2199"},{"url":"https://plugins.trac.wordpress.org/browser/iubenda-cookie-law-solution/tags/3.13.5/iubenda-cookie-class/simple_html_dom.php#L2231"},{"url":"https://plugins.trac.wordpress.org/browser/iubenda-cookie-law-solution/tags/3.13.5/iubenda_cookie_solution.php#L832"},{"url":"https://plugins.trac.wordpress.org/changeset?reponame=\u0026old=3779727%40iubenda-cookie-law-solution\u0026new=3779727%40iubenda-cookie-law-solution"},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2026-120540"},{"url":"https://github.com/advisories/GHSA-qp3p-7592-f8mv"}],"sources":{"cve":[{"id":"CVE-2026-120540","title":"iubenda | All-in-one Compliance for GDPR / CCPA Cookie Consent + more \u003c= 3.13.6 - Unauthenticated Stored Cross-Site Scripting via Comment Content via IUB-COOKIE-BLOCK Marker","description":"The iubenda | All-in-one Compliance for GDPR / CCPA Cookie Consent + more plugin for WordPress is vulnerable to Stored Cross-Site Scripting in versions up to, and including, 3.13.6. This is due to the way iubendaParser::parse_comments() re-processes HTML inside IUB-COOKIE-BLOCK markers through the bundled simple_html_dom parser after WordPress has already KSES-filtered the saved comment: simple_html_dom's remove_noise() stores \u003ccode\u003e bodies under a deterministic key ('___noise___ 1000') and restore_noise() later substitutes any matching substring back into attribute values WITHOUT re-escaping, allowing a quote-breaking payload stashed in an allowed \u003ccode\u003e element to be injected into an allowed \u003cabbr title=\"___noise___ 1000\"\u003e attribute at render time. This makes it possible for unauthenticated attackers to inject arbitrary web scripts in pages that will execute whenever a user accesses an injected page, after an administrator approves the first (otherwise moderated) comment under WordPress's default comment_previously_approved setting.","status":"published","published":"2026-11-07T02:29:18.67Z","modified":"2026-11-07T18:06:07.882Z","cvss":[{"version":"3.1","score":7.2,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:L/I:L/A:N","level":"high","assessor":"cna"}],"cwes":["CWE-79"],"updated_at":"2026-11-07T03:32:21.038338Z"}],"euvd":[{"id":"EUVD-2026-118572","description":"The iubenda | All-in-one Compliance for GDPR / CCPA Cookie Consent + more plugin for WordPress is vulnerable to Stored Cross-Site Scripting in versions up to, and including, 3.13.6. This is due to the way iubendaParser::parse_comments() re-processes HTML inside IUB-COOKIE-BLOCK markers through the bundled simple_html_dom parser after WordPress has already KSES-filtered the saved comment: simple_html_dom's remove_noise() stores \u003ccode\u003e bodies under a deterministic key ('___noise___ 1000') and restore_noise() later substitutes any matching substring back into attribute values WITHOUT re-escaping, allowing a quote-breaking payload stashed in an allowed \u003ccode\u003e element to be injected into an allowed \u003cabbr title=\"___noise___ 1000\"\u003e attribute at render time. This makes it possible for unauthenticated attackers to inject arbitrary web scripts in pages that will execute whenever a user accesses an injected page, after an administrator approves the first (otherwise moderated) comment under WordPress's default comment_previously_approved setting.","status":"published","published":"2026-11-07T02:29:18Z","modified":"2026-11-07T18:06:07Z","cvss":[{"version":"3.1","score":7.2,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:L/I:L/A:N","level":"high"}],"updated_at":"2026-11-07T06:08:32.207523Z"}],"ghsa":[{"id":"GHSA-qp3p-7592-f8mv","title":"The iubenda | All-in-one Compliance for GDPR / CCPA Cookie Consent + more plugin for WordPress is...","description":"The iubenda | All-in-one Compliance for GDPR / CCPA Cookie Consent + more plugin for WordPress is vulnerable to Stored Cross-Site Scripting in versions up to, and including, 3.13.6. This is due to the way iubendaParser::parse_comments() re-processes HTML inside IUB-COOKIE-BLOCK markers through the bundled simple_html_dom parser after WordPress has already KSES-filtered the saved comment: simple_html_dom's remove_noise() stores \u003ccode\u003e bodies under a deterministic key ('___noise___ 1000') and restore_noise() later substitutes any matching substring back into attribute values WITHOUT re-escaping, allowing a quote-breaking payload stashed in an allowed \u003ccode\u003e element to be injected into an allowed \u003cabbr title=\"___noise___ 1000\"\u003e attribute at render time. This makes it possible for unauthenticated attackers to inject arbitrary web scripts in pages that will execute whenever a user accesses an injected page, after an administrator approves the first (otherwise moderated) comment under WordPress's default comment_previously_approved setting.","status":"published","published":"2026-11-07T03:31:10Z","modified":"2026-11-07T03:31:18Z","cvss":[{"version":"3.1","score":7.2,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:L/I:L/A:N","level":"high"}],"cwes":["CWE-79"],"updated_at":"2026-11-07T03:35:32.541373Z"}],"nvd":[{"id":"CVE-2026-120540","description":"The iubenda | All-in-one Compliance for GDPR / CCPA Cookie Consent + more plugin for WordPress is vulnerable to Stored Cross-Site Scripting in versions up to, and including, 3.13.6. This is due to the way iubendaParser::parse_comments() re-processes HTML inside IUB-COOKIE-BLOCK markers through the bundled simple_html_dom parser after WordPress has already KSES-filtered the saved comment: simple_html_dom's remove_noise() stores \u003ccode\u003e bodies under a deterministic key ('___noise___ 1000') and restore_noise() later substitutes any matching substring back into attribute values WITHOUT re-escaping, allowing a quote-breaking payload stashed in an allowed \u003ccode\u003e element to be injected into an allowed \u003cabbr title=\"___noise___ 1000\"\u003e attribute at render time. This makes it possible for unauthenticated attackers to inject arbitrary web scripts in pages that will execute whenever a user accesses an injected page, after an administrator approves the first (otherwise moderated) comment under WordPress's default comment_previously_approved setting.","status":"published","published":"2026-11-07T03:17:03.69Z","modified":"2026-11-07T18:17:17.64Z","cvss":[{"version":"3.1","score":7.2,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:L/I:L/A:N","level":"high","assessor":"secondary"}],"cwes":["CWE-79"],"updated_at":"2026-11-07T20:06:33.424827Z"}]}}
