{"id":"CVE-2026-44282","aliases":["EUVD-2026-78669","GHSA-9mvp-w4rr-5c6x"],"status":"published","title":"Election question titles allow stored script execution","description":"Decidim is a participatory democracy framework. Prior to 0.32.0, a low-privilege process-scoped administrator or election editor with question-management rights can store HTML or script-bearing content in question.body. The question_title helper returns the translatable question body through html_safe without a sanitization boundary, causing stored script execution when visitors open public election pages or voting booth screens. The persisted script executes in visitors' browsers. The vulnerability is fixed in 0.32.0.","severity":{"version":"3.1","score":4.8,"vector":"CVSS:3.1/AV:N/AC:L/PR:H/UI:R/S:C/C:L/I:L/A:N","level":"medium","assessor":"cna","from":"cve"},"epss":{"day":"2026-11-11","score":0.00391,"percentile":0.33677,"model":"v2026.06.15"},"facts":{"in_kev":false,"known_exploited":false,"public_exploit":false,"fix_available":true},"cwes":["CWE-79"],"published":"2026-09-09T17:59:52Z","modified":"2026-10-28T02:30:32Z","fixes":[{"ecosystem":"RubyGems","package":"decidim-elections","fixed_in":["0.32.0"],"sources":["ghsa","osv"]}],"affected":[{"source":"ghsa","ecosystem":"RubyGems","package":"decidim-elections","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"0.32.0"}]}]},{"source":"osv","ecosystem":"RubyGems","package":"decidim-elections","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"0.32.0"}]}],"versions":["0.22.0","0.23.0","0.23.1","0.23.1.rc1","0.23.2","0.23.3","0.23.4","0.23.5","0.23.6","0.24.0","0.24.0.rc1","0.24.0.rc2","0.24.1","0.24.2","0.24.3","0.25.0","0.25.0.rc1","0.25.0.rc2","0.25.0.rc3","0.25.0.rc4","0.25.1","0.25.2","0.26.0","0.26.0.rc1","0.26.0.rc2","0.26.1","0.26.10","0.26.2","0.26.3","0.26.4","0.26.5","0.26.7","0.26.8","0.26.9","0.27.0","0.27.0.rc1","0.27.0.rc2","0.27.1","0.27.10","0.27.2","0.27.3","0.27.4","0.27.5","0.27.6","0.27.7","0.27.8","0.27.9","0.28.0","0.28.0.rc4","0.28.0.rc5","0.28.1","0.28.2","0.28.3","0.28.4","0.28.5","0.28.6","0.31.0","0.31.0.rc1","0.31.0.rc2","0.31.1","0.31.2","0.31.3","0.31.4","0.31.5","0.31.6","0.31.7","0.32.0.rc1","0.32.0.rc2","0.32.0.rc3"]}],"products":[{"vendor":"decidim","product":"decidim"}],"references":[{"url":"https://github.com/decidim/decidim/security/advisories/GHSA-9mvp-w4rr-5c6x","tags":["x_refsource_CONFIRM","advisory","web"]},{"url":"https://github.com/decidim/decidim/pull/16659","tags":["x_refsource_MISC","fix","web"]},{"url":"https://github.com/decidim/decidim/pull/16669","tags":["x_refsource_MISC","fix"]},{"url":"https://github.com/decidim/decidim/commit/64dbea3739f360f1eb36932dfc49d9686e61fc00","tags":["x_refsource_MISC","fix"]},{"url":"https://github.com/decidim/decidim/commit/b6e1b003365d10c0df2bc7edc5edd26b62fafda1","tags":["x_refsource_MISC","fix"]},{"url":"https://github.com/decidim/decidim/releases/tag/v0.32.0","tags":["x_refsource_MISC","web"]},{"url":"https://github.com/advisories/GHSA-9mvp-w4rr-5c6x"},{"url":"https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/44xxx/CVE-2026-44282.json","tags":["advisory"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2026-44282","tags":["advisory"]},{"url":"https://github.com/decidim/decidim","tags":["package"]}],"sources":{"cve":[{"id":"CVE-2026-44282","title":"Election question titles allow stored script execution","description":"Decidim is a participatory democracy framework. Prior to 0.32.0, a low-privilege process-scoped administrator or election editor with question-management rights can store HTML or script-bearing content in question.body. The question_title helper returns the translatable question body through html_safe without a sanitization boundary, causing stored script execution when visitors open public election pages or voting booth screens. The persisted script executes in visitors' browsers. The vulnerability is fixed in 0.32.0.","status":"published","published":"2026-09-15T15:25:56.036Z","modified":"2026-09-15T16:05:47.457Z","cvss":[{"version":"3.1","score":4.8,"vector":"CVSS:3.1/AV:N/AC:L/PR:H/UI:R/S:C/C:L/I:L/A:N","level":"medium","assessor":"cna"}],"cwes":["CWE-79"],"updated_at":"2026-11-02T13:42:49.132798Z"}],"euvd":[{"id":"EUVD-2026-78669","description":"Decidim is a participatory democracy framework. Prior to 0.32.0, a low-privilege process-scoped administrator or election editor with question-management rights can store HTML or script-bearing content in question.body. The question_title helper returns the translatable question body through html_safe without a sanitization boundary, causing stored script execution when visitors open public election pages or voting booth screens. The persisted script executes in visitors' browsers. The vulnerability is fixed in 0.32.0.","status":"published","published":"2026-09-15T15:25:56Z","modified":"2026-09-15T16:05:47Z","cvss":[{"version":"3.1","score":4.8,"vector":"CVSS:3.1/AV:N/AC:L/PR:H/UI:R/S:C/C:L/I:L/A:N","level":"medium"}],"updated_at":"2026-11-02T17:28:17.768191Z"}],"ghsa":[{"id":"GHSA-9mvp-w4rr-5c6x","title":"decidim-elections: Election question titles allow stored script execution","description":"## Description\n\nA low-privilege process-scoped admin who can manage elections can store arbitrary HTML in the question statement/body without sanitization, and the public elections UI renders that value unsafely.\n\n## Technical description\n \nThis stored XSS appears because election question titles are rendered as trusted HTML instead of sanitized text. The election question editor stores `question.body` as a normal translatable string, and the public helper `question_title` returns that value with `html_safe` and no sanitization boundary, so any user who can edit election questions can persist markup or script-bearing payloads that later render on public election pages.\n\n\u003cimg width=\"1506\" height=\"1285\" alt=\"decidim-election-01\" src=\"https://github.com/user-attachments/assets/2e17f396-10f9-4423-bb97-5badbdb20d21\" /\u003e\n\u003cimg width=\"1540\" height=\"657\" alt=\"decidim-election-02\" src=\"https://github.com/user-attachments/assets/178adb7b-d00e-4b5d-9237-f391e523973f\" /\u003e\n\n### Impact\n\nA low-privilege process-scoped admin or other election editor with question-management rights can persist JavaScript that executes in visitor's browsers on public election pages and voting booth screens.\n\n### Patches\n\nSee https://github.com/decidim/decidim/pull/16659\n\n### Workarounds\n\nDevelopers should review their implementation's administrator accesses and not give access to untrustworthy users\n\n### Resources\n\nOWASP XSS Injection\n\n### Credits\n\nThis issue was discovered in a security audit organized by the [Decidim Association](https://decidim.org) and made by [Radically Open Security](https://www.radicallyopensecurity.com/) against Decidim financed by [NGI](https://ngi.eu/).","status":"published","published":"2026-09-09T17:59:52Z","modified":"2026-09-09T17:59:54Z","cvss":[{"version":"3.1","score":4.8,"vector":"CVSS:3.1/AV:N/AC:L/PR:H/UI:R/S:C/C:L/I:L/A:N","level":"medium"}],"cwes":["CWE-79"],"updated_at":"2026-11-02T14:41:14.764963Z"}],"nvd":[{"id":"CVE-2026-44282","description":"Decidim is a participatory democracy framework. Prior to 0.32.0, a low-privilege process-scoped administrator or election editor with question-management rights can store HTML or script-bearing content in question.body. The question_title helper returns the translatable question body through html_safe without a sanitization boundary, causing stored script execution when visitors open public election pages or voting booth screens. The persisted script executes in visitors' browsers. The vulnerability is fixed in 0.32.0.","status":"published","published":"2026-09-15T16:17:09.96Z","modified":"2026-09-30T17:51:56.193Z","cvss":[{"version":"3.1","score":4.8,"vector":"CVSS:3.1/AV:N/AC:L/PR:H/UI:R/S:C/C:L/I:L/A:N","level":"medium","assessor":"secondary"}],"cwes":["CWE-79"],"updated_at":"2026-11-02T14:12:47.668237Z"}],"osv":[{"id":"CVE-2026-44282","title":"Election question titles allow stored script execution","description":"Decidim is a participatory democracy framework. Prior to 0.32.0, a low-privilege process-scoped administrator or election editor with question-management rights can store HTML or script-bearing content in question.body. The question_title helper returns the translatable question body through html_safe without a sanitization boundary, causing stored script execution when visitors open public election pages or voting booth screens. The persisted script executes in visitors' browsers. The vulnerability is fixed in 0.32.0.","status":"published","published":"2026-09-15T15:25:56.036Z","modified":"2026-10-28T02:30:32.736037556Z","cvss":[{"version":"3.1","score":4.8,"vector":"CVSS:3.1/AV:N/AC:L/PR:H/UI:R/S:C/C:L/I:L/A:N","level":"medium"}],"cwes":["CWE-79"],"updated_at":"2026-11-02T15:45:04.820169Z"},{"id":"GHSA-9mvp-w4rr-5c6x","title":"decidim-elections: Election question titles allow stored script execution","description":"## Description\n\nA low-privilege process-scoped admin who can manage elections can store arbitrary HTML in the question statement/body without sanitization, and the public elections UI renders that value unsafely.\n\n## Technical description\n \nThis stored XSS appears because election question titles are rendered as trusted HTML instead of sanitized text. The election question editor stores `question.body` as a normal translatable string, and the public helper `question_title` returns that value with `html_safe` and no sanitization boundary, so any user who can edit election questions can persist markup or script-bearing payloads that later render on public election pages.\n\n\u003cimg width=\"1506\" height=\"1285\" alt=\"decidim-election-01\" src=\"https://github.com/user-attachments/assets/2e17f396-10f9-4423-bb97-5badbdb20d21\" /\u003e\n\u003cimg width=\"1540\" height=\"657\" alt=\"decidim-election-02\" src=\"https://github.com/user-attachments/assets/178adb7b-d00e-4b5d-9237-f391e523973f\" /\u003e\n\n### Impact\n\nA low-privilege process-scoped admin or other election editor with question-management rights can persist JavaScript that executes in visitor's browsers on public election pages and voting booth screens.\n\n### Patches\n\nSee https://github.com/decidim/decidim/pull/16659\n\n### Workarounds\n\nDevelopers should review their implementation's administrator accesses and not give access to untrustworthy users\n\n### Resources\n\nOWASP XSS Injection\n\n### Credits\n\nThis issue was discovered in a security audit organized by the [Decidim Association](https://decidim.org) and made by [Radically Open Security](https://www.radicallyopensecurity.com/) against Decidim financed by [NGI](https://ngi.eu/).","status":"published","published":"2026-09-09T17:59:52Z","modified":"2026-09-09T18:26:04.522562Z","cvss":[{"version":"3.1","score":4.8,"vector":"CVSS:3.1/AV:N/AC:L/PR:H/UI:R/S:C/C:L/I:L/A:N","level":"medium"}],"cwes":["CWE-79"],"updated_at":"2026-11-02T15:46:43.875515Z"}]}}
