{"id":"CVE-2026-77188","kind":"vulnerability","aliases":["CVE-2026-77188"],"related":[],"title":"Waitlist WooCommerce plugin: stored XSS via shortcode attribute","description":"The Waitlist Woocommerce ( Back in stock notifier ) plugin for WordPress is vulnerable to Stored Cross-Site Scripting via 'type' Shortcode Attribute in all versions up to, and including, 2.9.1 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 wp_kses_post filter applied on contributor post save does not prevent this vulnerability because shortcode attribute values are not HTML and pass through kses unchanged; the payload is materialized only at render time when the shortcode is expanded.","summary":"The Waitlist WooCommerce (Back in stock notifier) WordPress plugin up to and including 2.9.1 does not sanitize or escape the 'type' attribute of its shortcode. A contributor-level user can store a script in a page that runs in the browser of anyone who views it.","severity":"medium","cvss":6.4,"epss":null,"exploited":false,"exploited_at":null,"products":[],"ecosystems":[],"tags":["package","self-hosted","waitlist-woocommerce","woocommerce","wordpress"],"not_affected_if":["no-contributor-accounts","plugin-not-installed","updated-past-2.9.1"],"how_to_check":"- Check the installed version of the Waitlist WooCommerce (Back in stock notifier) plugin in the WordPress admin plugin list or with `wp plugin get waitlist-woocommerce --field=version`\n- Search post content for the shortcode with `wp post list --post_type=page,post --format=ids | xargs -I{} wp post get {} --field=content | grep -i 'type='` (unknown whether this exact shortcode name is used by all installs)","fix":"- Update the Waitlist WooCommerce (Back in stock notifier) plugin to a version later than `2.9.1` (the sources do not name the fixed version)\n- Review existing pages and posts that use the plugin shortcode and remove any unexpected script in the 'type' attribute\n- Restrict contributor accounts to trusted users until the plugin is updated","status":"open","published_at":"2026-10-28T07:16:49+00:00","first_seen_at":"2026-10-28T07:31:38+00:00","triaged_at":"2026-10-28T07:32:59+00:00","updated_at":"2026-10-28T07:32:59+00:00","category":"package","confidence":0.8,"triage":{"at":"2026-10-28T07:32:58Z","model":"claude-haiku-5-5","output":{"fix":"- Update the Waitlist WooCommerce (Back in stock notifier) plugin to a version later than `2.9.1` (the sources do not name the fixed version)\n- Review existing pages and posts that use the plugin shortcode and remove any unexpected script in the 'type' attribute\n- Restrict contributor accounts to trusted users until the plugin is updated","reach":"internet","title":"Waitlist WooCommerce plugin: stored XSS via shortcode attribute","impact":"medium","summary":"The Waitlist WooCommerce (Back in stock notifier) WordPress plugin up to and including 2.9.1 does not sanitize or escape the 'type' attribute of its shortcode. A contributor-level user can store a script in a page that runs in the browser of anyone who views it.","category":"package","nicknames":[],"who_cares":["wordpress","woocommerce","waitlist-woocommerce","self-hosted"],"confidence":0.8,"needs_auth":"yes","worst_case":"Script runs in visitors' and admins' browsers, enabling session theft or actions as them.","analyst_note":"","how_to_check":"- Check the installed version of the Waitlist WooCommerce (Back in stock notifier) plugin in the WordPress admin plugin list or with `wp plugin get waitlist-woocommerce --field=version`\n- Search post content for the shortcode with `wp post list --post_type=page,post --format=ids | xargs -I{} wp post get {} --field=content | grep -i 'type='` (unknown whether this exact shortcode name is used by all installs)","needs_analyst":false,"not_affected_if":["no-contributor-accounts","plugin-not-installed","updated-past-2.9.1"],"who_is_affected":"WordPress sites running the Waitlist WooCommerce (Back in stock notifier) plugin at version 2.9.1 or older where contributor-level or higher accounts exist. The risk depends on a contributor being able to write pages that embed the shortcode. Sites without the plugin, or without contributor accounts, are not exposed to this path.","user_interaction":"yes","needs_special_setup":"no","severity_if_unknown":"medium"},"cost_usd":0.000719,"input_tokens":3462,"output_tokens":745,"severity_before":"medium"},"analyst_status":null,"analyst_note":null,"search":"'-2026':10A,13A '-77188':11A,14A '2.9.1':37B,99C 'access':119C,135C 'anyon':67B 'appli':144C 'arbitrari':124C 'attack':114C 'attribut':8A,45B,91C,156C 'authent':113C 'back':27B,73C 'browser':65B 'contributor':51B,117C,146C 'contributor-level':50B,116C 'cross':85C 'cross-sit':84C 'cve':9A,12A 'due':100C 'escap':42B,107C 'execut':131C 'expand':178C 'filter':143C 'host':18B 'html':160C 'includ':36B,98C 'inject':123C,137C 'input':103C 'insuffici':102C 'kses':141C,164C 'level':52B,118C 'make':109C 'materi':169C 'notifi':30B,76C 'output':106C 'packag':15B 'page':60B,128C,138C 'pass':162C 'payload':167C 'plugin':3A,32B,77C 'possibl':111C 'post':142C,147C 'prevent':151C 'render':172C 'run':62B 'sanit':40B,104C 'save':148C 'script':57B,87C,126C 'self':17B 'self-host':16B 'shortcod':7A,48B,90C,155C,176C 'site':86C 'stock':29B,75C 'store':4A,55B,83C 'time':173C 'type':44B,89C 'unchang':165C 'user':53B,134C 'valu':157C 'version':94C 'via':6A,88C 'view':69B 'vulner':81C,153C 'waitlist':1A,20B,25B,71C 'waitlist-woocommerc':19B 'web':125C 'whenev':132C 'woocommerc':2A,21B,22B,26B,72C 'wordpress':23B,31B,79C 'wp':140C 'xss':5A","nicknames":[],"mitigations":[],"who_affected":"WordPress sites running the Waitlist WooCommerce (Back in stock notifier) plugin at version 2.9.1 or older where contributor-level or higher accounts exist. The risk depends on a contributor being able to write pages that embed the shortcode. Sites without the plugin, or without contributor accounts, are not exposed to this path.","tier":"C","verified":{},"analyst_revisit_at":null,"first_public_at":"2026-10-28T07:16:49+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-77188","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-77188","severity":null,"published_at":"2026-10-28T07:16:49+00:00","modified_at":"2026-10-28T07:16:49+00:00","first_seen_at":"2026-10-28T07:31:38+00:00","fetched_at":"2026-10-28T07:31:38+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"}