---
id: "CVE-2026-116520"
kind: "vulnerability"
aliases: ["CVE-2026-116520"]
title: "PPWP Password Protect Pages WordPress plugin: unauthenticated stored XSS via comments"
severity: "high"
cvss: 7.2
epss: null
exploited: false
status: "open"
category: "package"
products: []
ecosystems: []
tags: ["package", "ppwp", "self-hosted", "wordpress"]
not_affected_if: ["newer-version", "plugin-not-installed"]
published_at: "2026-10-31T06:16:32+00:00"
first_seen_at: "2026-10-31T06:33:50+00:00"
updated_at: "2026-10-31T06:34:14+00:00"
sources: [{"source": "nvd", "url": "https://nvd.nist.gov/vuln/detail/CVE-2026-116520", "first_seen_at": "2026-10-31T06:33:50+00:00"}]
---

# PPWP Password Protect Pages WordPress plugin: unauthenticated stored XSS via comments

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.

_Summary, check and fix written by a model from the sources; labelled as such._

## 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).
- 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.

## Timeline

- 2026-10-31T06:33:50+00:00 nvd https://nvd.nist.gov/vuln/detail/CVE-2026-116520

## From the sources

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.

---

_Free to read at a human pace. An API with keys and an MCP server are in preparation; early access: hello@infrastack.ai_
