{"id":"CVE-2026-116520","kind":"vulnerability","aliases":["CVE-2026-116520"],"related":[],"title":"PPWP Password Protect Pages WordPress plugin: unauthenticated stored XSS via comments","description":"The PPWP – Password Protect Pages plugin for WordPress is vulnerable to Stored Cross-Site Scripting via the 'comment / shortcode attribute desc_below_form (and placeholder as the marker-smuggling helper)' parameter in all versions up to, and including, 1.9.26 due to insufficient input sanitization and output escaping. This makes it possible for unauthenticated attackers to inject arbitrary web scripts in pages that will execute whenever a user accesses an injected page. This is exploitable by unauthenticated attackers because WordPress's comment_content filter leaves bare shortcode text (containing no HTML tags) untouched, and the comment_whitelist setting auto-approves subsequent comments from a previously approved name and email without administrator intervention.","summary":"The PPWP Password Protect Pages WordPress plugin up to and including 1.9.26 fails to sanitize the desc_below_form shortcode attribute, so text submitted through comments is stored and rendered unescaped. An unauthenticated attacker can get scripts to run in the browser of anyone who opens an affected protected page.","severity":"high","cvss":7.2,"epss":null,"exploited":false,"exploited_at":null,"products":[],"ecosystems":[],"tags":["package","ppwp","self-hosted","wordpress"],"not_affected_if":["newer-version","plugin-not-installed"],"how_to_check":"- Check the installed PPWP plugin version in the WordPress admin Plugins screen or with `wp plugin get ppwp-password-protect-pages --field=version` (slug assumed; confirm it).\n- Look for the desc_below_form attribute in page content or shortcodes on protected pages.","fix":"- PPWP Password Protect Pages: move to a version later than `1.9.26`; the fixed version number is not stated in the sources.","status":"open","published_at":"2026-10-31T06:16:32+00:00","first_seen_at":"2026-10-31T06:33:50+00:00","triaged_at":"2026-10-31T06:34:14+00:00","updated_at":"2026-10-31T06:34:14+00:00","category":"package","confidence":0.7,"triage":{"at":"2026-10-31T06:34:14Z","model":"claude-haiku-5-5","output":{"fix":"- PPWP Password Protect Pages: move to a version later than `1.9.26`; the fixed version number is not stated in the sources.","reach":"internet","title":"PPWP Password Protect Pages WordPress plugin: unauthenticated stored XSS via comments","impact":"medium","summary":"The PPWP Password Protect Pages WordPress plugin up to and including 1.9.26 fails to sanitize the desc_below_form shortcode attribute, so text submitted through comments is stored and rendered unescaped. An unauthenticated attacker can get scripts to run in the browser of anyone who opens an affected protected page.","audience":"businesses","category":"package","nicknames":[],"who_cares":["wordpress","ppwp","self-hosted"],"confidence":0.7,"fix_status":"unknown","needs_auth":"no","worst_case":"Attacker scripts run in visitors' browsers on the affected site.","analyst_note":"Confirm the fixed plugin version and the wordpress.org plugin slug from the vendor changelog or the NVD entry at https://nvd.nist.gov/vuln/detail/CVE-2026-116520.","how_to_check":"- Check the installed PPWP plugin version in the WordPress admin Plugins screen or with `wp plugin get ppwp-password-protect-pages --field=version` (slug assumed; confirm it).\n- Look for the desc_below_form attribute in page content or shortcodes on protected pages.","plain_action":"","needs_analyst":true,"not_affected_if":["plugin-not-installed","newer-version"],"who_is_affected":"Sites running the PPWP Password Protect Pages plugin at version 1.9.26 or earlier that use the comment shortcode with desc_below_form on password-protected pages. Sites without this plugin or running a later version are not affected per the sources.","user_interaction":"yes","needs_special_setup":"yes","severity_if_unknown":"high"},"cost_usd":0.000762,"input_tokens":4293,"output_tokens":665,"severity_before":"high"},"analyst_status":null,"analyst_note":null,"search":"'-116520':14A,17A '-2026':13A,16A '1.9.26':35B,114C 'access':143C 'administr':186C 'affect':71B 'anyon':67B 'approv':175C,181C 'arbitrari':132C 'attack':57B,129C,152C 'attribut':44B,94C 'auto':174C 'auto-approv':173C 'bare':160C 'browser':65B 'comment':11A,49B,92C,156C,170C,177C 'contain':163C 'content':157C 'cross':87C 'cross-sit':86C 'cve':12A,15A 'desc':40B,95C 'due':115C 'email':184C 'escap':122C 'execut':139C 'exploit':149C 'fail':36B 'filter':158C 'form':42B,97C 'get':59B 'helper':105C 'host':22B 'html':165C 'includ':34B,113C 'inject':131C,145C 'input':118C 'insuffici':117C 'intervent':187C 'leav':159C 'make':124C 'marker':103C 'marker-smuggl':102C 'name':182C 'open':69B 'output':121C 'packag':18B 'page':4A,28B,73B,78C,136C,146C 'paramet':106C 'password':2A,26B,76C 'placehold':99C 'plugin':6A,30B,79C 'possibl':126C 'ppwp':1A,19B,25B,75C 'previous':180C 'protect':3A,27B,72B,77C 'render':53B 'run':62B 'sanit':38B,119C 'script':60B,89C,134C 'self':21B 'self-host':20B 'set':172C 'shortcod':43B,93C,161C 'site':88C 'smuggl':104C 'store':8A,51B,85C 'submit':47B 'subsequ':176C 'tag':166C 'text':46B,162C 'unauthent':7A,56B,128C,151C 'unescap':54B 'untouch':167C 'user':142C 'version':109C 'via':10A,90C 'vulner':83C 'web':133C 'whenev':140C 'whitelist':171C 'without':185C 'wordpress':5A,23B,29B,81C,154C 'xss':9A","nicknames":[],"mitigations":[],"who_affected":"Sites running the PPWP Password Protect Pages plugin at version 1.9.26 or earlier that use the comment shortcode with desc_below_form on password-protected pages. Sites without this plugin or running a later version are not affected per the sources.","tier":"B","verified":{},"analyst_revisit_at":null,"fix_status":"unknown","audience":"businesses","plain_action":null,"first_public_at":"2026-10-31T06:16:32+00:00","kev":null,"cvss_vector":"CVSS:3.1/AV:N/AC:L/PR:N/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-116520","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-116520","severity":null,"published_at":"2026-10-31T06:16:32+00:00","modified_at":"2026-10-31T06:16:32+00:00","first_seen_at":"2026-10-31T06:33:50+00:00","fetched_at":"2026-10-31T06:33:50+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"}