{"id":"CVE-2026-109975","kind":"vulnerability","aliases":["CVE-2026-109975"],"related":[],"title":"Cozy Blocks WordPress plugin: stored XSS via block attributes","description":"The Cozy Blocks – Website Builder for WordPress Block Editor | Gutenberg Blocks, Patterns & Templates plugin for WordPress is vulnerable to Stored Cross-Site Scripting via the 'content (block attribute icon.view / icon.layout / icon.gap)' parameter in all versions up to, and including, 2.2.27 due to insufficient input sanitization and output escaping. This makes it possible for authenticated attackers, with contributor-level access and above, to inject arbitrary web scripts in pages that will execute whenever a user accesses an injected page. Although wp_kses_post is applied on save, it does not neutralize a quote-only attribute-breakout payload containing no '<' character, leaving the block comment and its decoded JSON attributes intact and exploitable at render time.","summary":"The Cozy Blocks WordPress plugin up to and including 2.2.27 does not properly sanitize block attributes such as icon.view, icon.layout and icon.gap. An authenticated contributor can save a quote-based payload that runs script in the browser of any visitor or editor who opens the injected page.","severity":"medium","cvss":6.4,"epss":null,"exploited":false,"exploited_at":null,"products":[],"ecosystems":[],"tags":["cozy-blocks","package","self-hosted","wordpress","wordpress-plugin"],"not_affected_if":["no-contributor-accounts","plugin-not-installed","plugin-updated"],"how_to_check":"- Check the installed version of the Cozy Blocks plugin in the WordPress admin Plugins screen, or with `wp plugin get cozyblocks --field=version` if the slug is unknown.\n- Look for pages or posts containing Cozy Blocks block comments with unusual icon.view, icon.layout or icon.gap attribute values.","fix":"- Update the Cozy Blocks plugin to a version newer than `2.2.27`.\n- Until updated, restrict contributor accounts and review recently edited pages that use Cozy Blocks.","status":"open","published_at":"2026-10-28T07:16:45+00:00","first_seen_at":"2026-10-28T07:31:37+00:00","triaged_at":"2026-10-28T07:33:02+00:00","updated_at":"2026-10-28T07:33:02+00:00","category":"package","confidence":0.7,"triage":{"at":"2026-10-28T07:33:02Z","model":"claude-haiku-5-5","output":{"fix":"- Update the Cozy Blocks plugin to a version newer than `2.2.27`.\n- Until updated, restrict contributor accounts and review recently edited pages that use Cozy Blocks.","reach":"internet","title":"Cozy Blocks WordPress plugin: stored XSS via block attributes","impact":"medium","summary":"The Cozy Blocks WordPress plugin up to and including 2.2.27 does not properly sanitize block attributes such as icon.view, icon.layout and icon.gap. An authenticated contributor can save a quote-based payload that runs script in the browser of any visitor or editor who opens the injected page.","category":"package","nicknames":[],"who_cares":["wordpress","wordpress-plugin","cozy-blocks","self-hosted"],"confidence":0.7,"needs_auth":"yes","worst_case":"Attacker script runs in visitors' and editors' browsers on the site.","analyst_note":"","how_to_check":"- Check the installed version of the Cozy Blocks plugin in the WordPress admin Plugins screen, or with `wp plugin get cozyblocks --field=version` if the slug is unknown.\n- Look for pages or posts containing Cozy Blocks block comments with unusual icon.view, icon.layout or icon.gap attribute values.","needs_analyst":false,"not_affected_if":["plugin-not-installed","plugin-updated","no-contributor-accounts"],"who_is_affected":"Sites running the Cozy Blocks plugin at version 2.2.27 or earlier that allow contributor-level or higher users to create or edit content. Sites where only trusted administrators write content, or that do not have the plugin installed, are not exposed.","user_interaction":"yes","needs_special_setup":"no","severity_if_unknown":"medium"},"cost_usd":0.000659,"input_tokens":3498,"output_tokens":618,"severity_before":"medium"},"analyst_status":null,"analyst_note":null,"search":"'-109975':12A,15A '-2026':11A,14A '2.2.27':36B,115C 'access':135C,151C 'although':155C 'appli':160C 'arbitrari':140C 'attack':130C 'attribut':9A,42B,103C,172C,186C 'attribute-breakout':171C 'authent':50B,129C 'base':57B 'block':2A,8A,18B,29B,41B,77C,82C,85C,102C,180C 'breakout':173C 'browser':64B 'builder':79C 'charact':177C 'comment':181C 'contain':175C 'content':101C 'contributor':51B,133C 'contributor-level':132C 'cozi':1A,17B,28B,76C 'cozy-block':16B 'cross':96C 'cross-sit':95C 'cve':10A,13A 'decod':184C 'due':116C 'editor':69B,83C 'escap':123C 'execut':147C 'exploit':189C 'gutenberg':84C 'host':22B 'icon.gap':48B,106C 'icon.layout':46B,105C 'icon.view':45B,104C 'includ':35B,114C 'inject':73B,139C,153C 'input':119C 'insuffici':118C 'intact':187C 'json':185C 'kses':157C 'leav':178C 'level':134C 'make':125C 'neutral':166C 'open':71B 'output':122C 'packag':19B 'page':74B,144C,154C 'paramet':107C 'pattern':86C 'payload':58B,174C 'plugin':4A,26B,31B,88C 'possibl':127C 'post':158C 'proper':39B 'quot':56B,169C 'quote-bas':55B 'quote-on':168C 'render':191C 'run':60B 'sanit':40B,120C 'save':53B,162C 'script':61B,98C,142C 'self':21B 'self-host':20B 'site':97C 'store':5A,94C 'templat':87C 'time':192C 'user':150C 'version':110C 'via':7A,99C 'visitor':67B 'vulner':92C 'web':141C 'websit':78C 'whenev':148C 'wordpress':3A,23B,25B,30B,81C,90C 'wordpress-plugin':24B 'wp':156C 'xss':6A","nicknames":[],"mitigations":[],"who_affected":"Sites running the Cozy Blocks plugin at version 2.2.27 or earlier that allow contributor-level or higher users to create or edit content. Sites where only trusted administrators write content, or that do not have the plugin installed, are not exposed.","tier":"C","verified":{},"analyst_revisit_at":null,"first_public_at":"2026-10-28T07:16:45+00:00","kev":null,"cvss_vector":"CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:L/I:L/A:N","cvss_by":"security@wordfence.com","poc_count":0,"sources":[{"source":"nvd","external_id":"CVE-2026-109975","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-109975","severity":null,"published_at":"2026-10-28T07:16:45+00:00","modified_at":"2026-10-28T07:16:45+00:00","first_seen_at":"2026-10-28T07:31:37+00:00","fetched_at":"2026-10-28T07:31:37+00:00","note":null}],"documents":[],"notice":"Free to read at a human pace. An API with keys and an MCP server are in preparation; early access: hello@infrastack.ai"}