{"id":"CVE-2026-103996","kind":"vulnerability","aliases":["CVE-2026-103996"],"related":[],"title":"If-So Dynamic Content WordPress plugin: stored XSS via url parameter","description":"The If-So Dynamic Content – Elementor & All Page Builders Personalization plugin for WordPress is vulnerable to Stored Cross-Site Scripting via the 'url' parameter in all versions up to, and including, 1.10.2 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. The injected script executes specifically in the administrator's browser session, as the vulnerable branch only renders when an administrator previews or opens the post containing the crafted shortcode.","summary":"The If-So Dynamic Content plugin for WordPress does not sanitize the 'url' parameter of its shortcode, so a contributor-level user can store a script in a post. The script runs in an administrator's browser when the administrator previews or opens that post, letting the attacker act as the administrator.","severity":"medium","cvss":6.4,"epss":null,"exploited":false,"exploited_at":null,"products":[],"ecosystems":[],"tags":["elementor","package","wordpress","wordpress-plugin"],"not_affected_if":["no-contributor-accounts","plugin-not-installed"],"how_to_check":"- Check the installed plugin version in the WordPress admin under Plugins; the sources say versions up to and including `1.10.2` are affected.\n- Search post content for the plugin's shortcode with a `url` attribute to find injected entries (exact shortcode name unknown).","fix":"- Update the If-So Dynamic Content plugin to a version later than `1.10.2` (exact fixed version unknown).\n- Until patched, restrict Contributor accounts and review posts for injected script tags.","status":"open","published_at":"2026-10-28T07:16:43+00:00","first_seen_at":"2026-10-28T07:31:37+00:00","triaged_at":"2026-10-28T07:33:11+00:00","updated_at":"2026-10-28T07:33:11+00:00","category":"package","confidence":0.7,"triage":{"at":"2026-10-28T07:33:11Z","model":"claude-haiku-5-5","output":{"fix":"- Update the If-So Dynamic Content plugin to a version later than `1.10.2` (exact fixed version unknown).\n- Until patched, restrict Contributor accounts and review posts for injected script tags.","reach":"internet","title":"If-So Dynamic Content WordPress plugin: stored XSS via url parameter","impact":"medium","summary":"The If-So Dynamic Content plugin for WordPress does not sanitize the 'url' parameter of its shortcode, so a contributor-level user can store a script in a post. The script runs in an administrator's browser when the administrator previews or opens that post, letting the attacker act as the administrator.","category":"package","nicknames":[],"who_cares":["wordpress","wordpress-plugin","elementor"],"confidence":0.7,"needs_auth":"yes","worst_case":"Attacker runs scripts in administrator's browser session","analyst_note":"","how_to_check":"- Check the installed plugin version in the WordPress admin under Plugins; the sources say versions up to and including `1.10.2` are affected.\n- Search post content for the plugin's shortcode with a `url` attribute to find injected entries (exact shortcode name unknown).","needs_analyst":false,"not_affected_if":["plugin-not-installed","no-contributor-accounts"],"who_is_affected":"Sites running the If-So Dynamic Content plugin at version `1.10.2` or earlier, where contributor-level or higher accounts can create or edit posts. Sites that do not use the plugin, or that only have trusted editors, carry much less risk. Exploitation requires an authenticated account and an administrator viewing the injected post.","user_interaction":"yes","needs_special_setup":"unknown","severity_if_unknown":"medium"},"cost_usd":0.000643,"input_tokens":3432,"output_tokens":600,"severity_before":"medium"},"analyst_status":null,"analyst_note":null,"search":"'-103996':15A,18A '-2026':14A,17A '1.10.2':112C 'access':132C,148C 'act':75B 'administr':61B,66B,78B,159C,171C 'arbitrari':137C 'attack':74B,127C 'authent':126C 'branch':166C 'browser':63B,161C 'builder':88C 'contain':177C 'content':5A,30B,84C 'contributor':46B,130C 'contributor-level':45B,129C 'craft':179C 'cross':98C 'cross-sit':97C 'cve':13A,16A 'due':113C 'dynam':4A,29B,83C 'elementor':19B,85C 'escap':120C 'execut':144C,155C 'if-so':1A,26B,80C 'includ':111C 'inject':136C,150C,153C 'input':116C 'insuffici':115C 'let':72B 'level':47B,131C 'make':122C 'open':69B,174C 'output':119C 'packag':20B 'page':87C,141C,151C 'paramet':12A,39B,104C 'person':89C 'plugin':7A,24B,31B,90C 'possibl':124C 'post':55B,71B,176C 'preview':67B,172C 'render':168C 'run':58B 'sanit':36B,117C 'script':52B,57B,100C,139C,154C 'session':162C 'shortcod':42B,180C 'site':99C 'specif':156C 'store':8A,50B,96C 'url':11A,38B,103C 'user':48B,147C 'version':107C 'via':10A,101C 'vulner':94C,165C 'web':138C 'whenev':145C 'wordpress':6A,21B,23B,33B,92C 'wordpress-plugin':22B 'xss':9A","nicknames":[],"mitigations":[],"who_affected":"Sites running the If-So Dynamic Content plugin at version `1.10.2` or earlier, where contributor-level or higher accounts can create or edit posts. Sites that do not use the plugin, or that only have trusted editors, carry much less risk. Exploitation requires an authenticated account and an administrator viewing the injected post.","tier":"C","verified":{},"analyst_revisit_at":null,"first_public_at":"2026-10-28T07:16:43+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-103996","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-103996","severity":null,"published_at":"2026-10-28T07:16:43+00:00","modified_at":"2026-10-28T07:16:43+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"}