{"id":"CVE-2026-96565","kind":"vulnerability","aliases":["CVE-2026-96565"],"related":[],"title":"WP-Members Membership plugin: stored XSS via WooCommerce checkout fields","description":"The WP-Members Membership Plugin plugin for WordPress is vulnerable to Stored Cross-Site Scripting via WooCommerce Checkout Multicheckbox/Multiselect Field (scalar bypass of wpmem_sanitize_array) in all versions up to, and including, 3.5.7 due to insufficient input sanitization and output escaping. This makes it possible for authenticated attackers, with subscriber-level access and above, to inject arbitrary web scripts in pages that will execute whenever a user accesses an injected page. This is only exploitable via the WooCommerce classic checkout path, as the sibling registration, profile, and account-edit handlers implode the value before sanitization, which raises a PHP 8 TypeError on scalar input and fails closed.","summary":"The WP-Members Membership plugin for WordPress, in versions up to and including 3.5.7, does not sanitize or escape a WooCommerce classic checkout multicheckbox/multiselect field. An authenticated subscriber can store scripts that run in the browser of any user who opens the affected page.","severity":"medium","cvss":6.4,"epss":null,"exploited":false,"exploited_at":null,"products":[],"ecosystems":[],"tags":["package","self-hosted","woocommerce","wordpress","wp-members"],"not_affected_if":["no-woocommerce","no-wp-members","version-above-3.5.7"],"how_to_check":"- Check the installed version of the WP-Members Membership plugin in the WordPress admin plugin list, or in `wp-content/plugins/wp-members/`, and see whether it is `3.5.7` or older.\n- Confirm whether WooCommerce is active and whether the checkout uses the classic checkout path with WP-Members fields.","fix":"- WP-Members Membership plugin: move to a version later than `3.5.7` (the fixed version is not named in the sources).","status":"open","published_at":"2026-11-07T12:17:47+00:00","first_seen_at":"2026-11-07T12:47:09+00:00","triaged_at":"2026-11-07T12:49:02+00:00","updated_at":"2026-11-07T12:49:02+00:00","category":"package","confidence":0.7,"triage":{"at":"2026-11-07T12:49:02Z","model":"claude-haiku-5-5","output":{"fix":"- WP-Members Membership plugin: move to a version later than `3.5.7` (the fixed version is not named in the sources).","reach":"internet","title":"WP-Members Membership plugin: stored XSS via WooCommerce checkout fields","impact":"medium","summary":"The WP-Members Membership plugin for WordPress, in versions up to and including 3.5.7, does not sanitize or escape a WooCommerce classic checkout multicheckbox/multiselect field. An authenticated subscriber can store scripts that run in the browser of any user who opens the affected page.","audience":"businesses","category":"package","nicknames":[],"who_cares":["wordpress","woocommerce","wp-members","self-hosted"],"confidence":0.7,"fix_status":"unknown","needs_auth":"yes","worst_case":"Attacker's scripts run in other users' browsers on the site.","analyst_note":"","how_to_check":"- Check the installed version of the WP-Members Membership plugin in the WordPress admin plugin list, or in `wp-content/plugins/wp-members/`, and see whether it is `3.5.7` or older.\n- Confirm whether WooCommerce is active and whether the checkout uses the classic checkout path with WP-Members fields.","plain_action":"","needs_analyst":false,"not_affected_if":["no-woocommerce","no-wp-members","version-above-3.5.7"],"who_is_affected":"Sites running the WP-Members Membership plugin at version 3.5.7 or older together with WooCommerce's classic checkout using its multicheckbox or multiselect fields. The sibling registration, profile and account-edit handlers fail closed on this input, so exposure is limited to the checkout path. Sites without WooCommerce or without the plugin can skip it.","user_interaction":"yes","needs_special_setup":"yes","severity_if_unknown":"medium"},"cost_usd":0.000761,"input_tokens":4392,"output_tokens":644,"severity_before":"medium"},"analyst_status":null,"analyst_note":null,"search":"'-2026':13A,16A '-96565':14A,17A '3.5.7':41B,107C '8':176C 'access':127C,143C 'account':164C 'account-edit':163C 'affect':70B 'arbitrari':132C 'array':99C 'attack':122C 'authent':54B,121C 'browser':63B 'bypass':95C 'checkout':10A,50B,91C,155C 'classic':49B,154C 'close':183C 'cross':86C 'cross-sit':85C 'cve':12A,15A 'due':108C 'edit':165C 'escap':46B,115C 'execut':139C 'exploit':150C 'fail':182C 'field':11A,52B,93C 'handler':166C 'host':21B 'implod':167C 'includ':40B,106C 'inject':131C,145C 'input':111C,180C 'insuffici':110C 'level':126C 'make':117C 'member':3A,26B,30B,75C 'membership':4A,31B,76C 'multicheckbox/multiselect':51B,92C 'open':68B 'output':114C 'packag':18B 'page':71B,136C,146C 'path':156C 'php':175C 'plugin':5A,32B,77C,78C 'possibl':119C 'profil':161C 'rais':173C 'registr':160C 'run':60B 'sanit':44B,98C,112C,171C 'scalar':94C,179C 'script':58B,88C,134C 'self':20B 'self-host':19B 'sibl':159C 'site':87C 'store':6A,57B,84C 'subscrib':55B,125C 'subscriber-level':124C 'typeerror':177C 'user':66B,142C 'valu':169C 'version':36B,102C 'via':8A,89C,151C 'vulner':82C 'web':133C 'whenev':140C 'woocommerc':9A,22B,48B,90C,153C 'wordpress':23B,34B,80C 'wp':2A,25B,29B,74C 'wp-member':1A,24B,28B,73C 'wpmem':97C 'xss':7A","nicknames":[],"mitigations":[],"who_affected":"Sites running the WP-Members Membership plugin at version 3.5.7 or older together with WooCommerce's classic checkout using its multicheckbox or multiselect fields. The sibling registration, profile and account-edit handlers fail closed on this input, so exposure is limited to the checkout path. Sites without WooCommerce or without the plugin can skip it.","tier":"C","verified":{},"analyst_revisit_at":null,"fix_status":"unknown","audience":"businesses","plain_action":null,"pkeys":[],"ptokens":[],"labels":["medium","package","selfhosted","woocommerce","wordpress","wpmembers"],"campaign_type":null,"search_a":"'-2026':13A,16A '-96565':14A,17A 'checkout':10A 'cve':12A,15A 'field':11A 'member':3A 'membership':4A 'plugin':5A 'store':6A 'via':8A 'woocommerc':9A 'wp':2A 'wp-member':1A 'xss':7A","search_b":"'3.5.7':41B 'affect':70B 'authent':54B 'browser':63B 'checkout':50B 'classic':49B 'escap':46B 'field':52B 'host':21B 'includ':40B 'member':26B,30B 'membership':31B 'multicheckbox/multiselect':51B 'open':68B 'packag':18B 'page':71B 'plugin':32B 'run':60B 'sanit':44B 'script':58B 'self':20B 'self-host':19B 'store':57B 'subscrib':55B 'user':66B 'version':36B 'woocommerc':22B,48B 'wordpress':23B,34B 'wp':25B,29B 'wp-member':24B,28B","search_c":"'3.5.7':107C '8':176C 'access':127C,143C 'account':164C 'account-edit':163C 'arbitrari':132C 'array':99C 'attack':122C 'authent':121C 'bypass':95C 'checkout':91C,155C 'classic':154C 'close':183C 'cross':86C 'cross-sit':85C 'due':108C 'edit':165C 'escap':115C 'execut':139C 'exploit':150C 'fail':182C 'field':93C 'handler':166C 'implod':167C 'includ':106C 'inject':131C,145C 'input':111C,180C 'insuffici':110C 'level':126C 'make':117C 'member':75C 'membership':76C 'multicheckbox/multiselect':92C 'output':114C 'page':136C,146C 'path':156C 'php':175C 'plugin':77C,78C 'possibl':119C 'profil':161C 'rais':173C 'registr':160C 'sanit':98C,112C,171C 'scalar':94C,179C 'script':88C,134C 'sibl':159C 'site':87C 'store':84C 'subscrib':125C 'subscriber-level':124C 'typeerror':177C 'user':142C 'valu':169C 'version':102C 'via':89C,151C 'vulner':82C 'web':133C 'whenev':140C 'woocommerc':90C,153C 'wordpress':80C 'wp':74C 'wp-member':73C 'wpmem':97C","first_public_at":"2026-11-07T12:17:47+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-96565","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-96565","severity":null,"published_at":"2026-11-07T12:17:47+00:00","modified_at":"2026-11-07T12:17:47+00:00","first_seen_at":"2026-11-07T12:47:09+00:00","fetched_at":"2026-11-07T12:47:09+00:00","note":null}],"documents":[],"exploit_sources":[],"notice":"Free to read, with fair use of about 60 pages a minute. For higher limits or API access: sales@infrastack.ai"}