{"id":"CVE-2026-121976","aliases":["EUVD-2026-119155","GHSA-g6pv-q7rc-97m5"],"status":"published","title":"Modula Image Gallery \u003c= 3.0.17 - Authenticated (Author+) Stored Cross-Site Scripting via 'items' Parameter","description":"The Modula plugin for WordPress is vulnerable to Stored Cross-Site Scripting via the 'items' parameter in versions up to, and including, 3.0.17 This is due to insufficient input sanitization of the per-image 'link' field in the save_merged_items() REST handler and Images\\Adapter::normalize_item_row(), which preserves unknown keys verbatim, combined with output escaping in Modula_Helper::generate_attributes() that applies only esc_attr() to the resulting anchor href and does not strip the 'javascript:' URL scheme. This makes it possible for authenticated attackers, with Author-level access and above, to inject arbitrary web scripts in pages that will execute whenever a user accesses an injected page and clicks the gallery tile.","severity":{"version":"3.1","score":6.4,"vector":"CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:L/I:L/A:N","level":"medium","assessor":"cna","from":"cve"},"epss":{"day":"2026-11-12","score":0.0032,"percentile":0.25296,"model":"v2026.06.15"},"facts":{"in_kev":false,"known_exploited":false,"public_exploit":false,"fix_available":false},"cwes":["CWE-79"],"published":"2026-11-07T11:26:32Z","modified":"2026-11-07T12:32:02Z","products":[{"vendor":"wpchill","product":"modula image gallery – photo grid \u0026 video gallery"}],"references":[{"url":"https://www.wordfence.com/threat-intel/vulnerabilities/id/91d3cbc2-00ca-4384-a52d-84fe2f0328b3?source=cve"},{"url":"https://plugins.trac.wordpress.org/browser/modula-best-grid-gallery/tags/3.0.17/includes/v2/images/class-adapter.php#L655"},{"url":"https://plugins.trac.wordpress.org/browser/modula-best-grid-gallery/tags/3.0.17/includes/v2/rest/class-gallery-upload-controller.php#L914"},{"url":"https://plugins.trac.wordpress.org/browser/modula-best-grid-gallery/tags/3.0.17/includes/v2/class-meta-sync.php#L422"},{"url":"https://plugins.trac.wordpress.org/browser/modula-best-grid-gallery/tags/3.0.17/includes/public/shortcode/class-modula-item-data-processor.php#L629"},{"url":"https://plugins.trac.wordpress.org/browser/modula-best-grid-gallery/tags/3.0.17/includes/core/helpers/class-modula-helper.php#L17"},{"url":"https://plugins.trac.wordpress.org/browser/modula-best-grid-gallery/"},{"url":"https://plugins.trac.wordpress.org/changeset?reponame=\u0026new=3787971%40modula-best-grid-gallery%2Ftags%2F3.0.18\u0026old=3781958%40modula-best-grid-gallery%2Ftags%2F3.0.17"},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2026-121976"},{"url":"https://plugins.trac.wordpress.org/browser/modula-best-grid-gallery"},{"url":"https://github.com/advisories/GHSA-g6pv-q7rc-97m5"}],"sources":{"cve":[{"id":"CVE-2026-121976","title":"Modula Image Gallery \u003c= 3.0.17 - Authenticated (Author+) Stored Cross-Site Scripting via 'items' Parameter","description":"The Modula plugin for WordPress is vulnerable to Stored Cross-Site Scripting via the 'items' parameter in versions up to, and including, 3.0.17 This is due to insufficient input sanitization of the per-image 'link' field in the save_merged_items() REST handler and Images\\Adapter::normalize_item_row(), which preserves unknown keys verbatim, combined with output escaping in Modula_Helper::generate_attributes() that applies only esc_attr() to the resulting anchor href and does not strip the 'javascript:' URL scheme. This makes it possible for authenticated attackers, with Author-level access and above, to inject arbitrary web scripts in pages that will execute whenever a user accesses an injected page and clicks the gallery tile.","status":"published","published":"2026-11-07T11:26:32.022Z","modified":"2026-11-07T18:06:00.294Z","cvss":[{"version":"3.1","score":6.4,"vector":"CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:L/I:L/A:N","level":"medium","assessor":"cna"}],"cwes":["CWE-79"],"updated_at":"2026-11-07T12:33:58.237937Z"}],"euvd":[{"id":"EUVD-2026-119155","description":"The Modula plugin for WordPress is vulnerable to Stored Cross-Site Scripting via the 'items' parameter in versions up to, and including, 3.0.17 This is due to insufficient input sanitization of the per-image 'link' field in the save_merged_items() REST handler and Images\\Adapter::normalize_item_row(), which preserves unknown keys verbatim, combined with output escaping in Modula_Helper::generate_attributes() that applies only esc_attr() to the resulting anchor href and does not strip the 'javascript:' URL scheme. This makes it possible for authenticated attackers, with Author-level access and above, to inject arbitrary web scripts in pages that will execute whenever a user accesses an injected page and clicks the gallery tile.","status":"published","published":"2026-11-07T11:26:32Z","modified":"2026-11-07T18:06:00Z","cvss":[{"version":"3.1","score":6.4,"vector":"CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:L/I:L/A:N","level":"medium"}],"updated_at":"2026-11-07T15:09:43.759879Z"}],"ghsa":[{"id":"GHSA-g6pv-q7rc-97m5","title":"The Modula plugin for WordPress is vulnerable to Stored Cross-Site Scripting via the 'items'...","description":"The Modula plugin for WordPress is vulnerable to Stored Cross-Site Scripting via the 'items' parameter in versions up to, and including, 3.0.17 This is due to insufficient input sanitization of the per-image 'link' field in the save_merged_items() REST handler and Images\\Adapter::normalize_item_row(), which preserves unknown keys verbatim, combined with output escaping in Modula_Helper::generate_attributes() that applies only esc_attr() to the resulting anchor href and does not strip the 'javascript:' URL scheme. This makes it possible for authenticated attackers, with Author-level access and above, to inject arbitrary web scripts in pages that will execute whenever a user accesses an injected page and clicks the gallery tile.","status":"published","published":"2026-11-07T12:31:53Z","modified":"2026-11-07T12:32:02Z","cvss":[{"version":"3.1","score":6.4,"vector":"CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:L/I:L/A:N","level":"medium"}],"cwes":["CWE-79"],"updated_at":"2026-11-07T12:37:15.096654Z"}],"nvd":[{"id":"CVE-2026-121976","description":"The Modula plugin for WordPress is vulnerable to Stored Cross-Site Scripting via the 'items' parameter in versions up to, and including, 3.0.17 This is due to insufficient input sanitization of the per-image 'link' field in the save_merged_items() REST handler and Images\\Adapter::normalize_item_row(), which preserves unknown keys verbatim, combined with output escaping in Modula_Helper::generate_attributes() that applies only esc_attr() to the resulting anchor href and does not strip the 'javascript:' URL scheme. This makes it possible for authenticated attackers, with Author-level access and above, to inject arbitrary web scripts in pages that will execute whenever a user accesses an injected page and clicks the gallery tile.","status":"published","published":"2026-11-07T12:17:45.26Z","modified":"2026-11-07T18:17:19.993Z","cvss":[{"version":"3.1","score":6.4,"vector":"CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:L/I:L/A:N","level":"medium","assessor":"secondary"}],"cwes":["CWE-79"],"updated_at":"2026-11-07T20:06:33.603746Z"}]}}
