---
title: "CVE-2026-116520: PPWP Password Protect Pages - Stored XSS"
description: "PPWP – Password Protect Pages WordPress plugin <= 1.9.26 contains a stored cross-site scripting caused by insufficient input sanitization and output escaping in 'desc_below_form' shortcode attribute, letting unauthenticated attackers inject scripts executed by users accessing the page."
url: https://panop.io/threat-heartbeat/CVE-2026-116520/
---

# CVE-2026-116520 PPWP Password Protect Pages - Stored XSS

PPWP – Password Protect Pages WordPress plugin <= 1.9.26 contains a stored cross-site scripting caused by insufficient input sanitization and output escaping in 'desc\_below\_form' shortcode attribute, letting unauthenticated attackers inject scripts executed by users accessing the page.

CVSS base score 7.2 /10

High

CISA KEV

Not listed

Public exploit

None known

Authentication

Not required

EPSS

0.38% chance of exploitation in 30 days

[View the NVD record ↗](https://nvd.nist.gov/vuln/detail/CVE-2026-116520)

## Details

Type

Stored XSS

Impact

Stored XSS

CVSS vector

CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:L/I:L/A:N

Published

31 October 2026

Updated

1 November 2026

Weakness

[CWE-79](https://cwe.mitre.org/data/definitions/79.html)

## Vendor fix

Update to the latest version of PPWP – Password Protect Pages plugin.

Patching closes this CVE. It does not tell you which of your systems run the affected version, or what else is exposed alongside them.

## References

- [https://nvd.nist.gov/vuln/detail/CVE-2026-116520](https://nvd.nist.gov/vuln/detail/CVE-2026-116520)
- [https://plugins.trac.wordpress.org/browser/password-protect-page/tags/1.9.26/includes/services/class-ppw-shortcode.php#L622](https://plugins.trac.wordpress.org/browser/password-protect-page/tags/1.9.26/includes/services/class-ppw-shortcode.php#L622)
- [https://plugins.trac.wordpress.org/browser/password-protect-page/tags/1.9.26/includes/views/shortcode/view-ppw-restriced-content-form.php#L17](https://plugins.trac.wordpress.org/browser/password-protect-page/tags/1.9.26/includes/views/shortcode/view-ppw-restriced-content-form.php#L17)
- [https://plugins.trac.wordpress.org/changeset/3772960/password-protect-page/trunk/includes/services/class-ppw-shortcode.php](https://plugins.trac.wordpress.org/changeset/3772960/password-protect-page/trunk/includes/services/class-ppw-shortcode.php)
- [https://www.wordfence.com/threat-intel/vulnerabilities/id/c549ba14-276e-46ab-8019-97430a566d8c?source=cve](https://www.wordfence.com/threat-intel/vulnerabilities/id/c549ba14-276e-46ab-8019-97430a566d8c?source=cve)
- [https://plugins.trac.wordpress.org/browser/password-protect-page/tags/1.9.26/includes/services/class-ppw-shortcode.php#L202](https://plugins.trac.wordpress.org/browser/password-protect-page/tags/1.9.26/includes/services/class-ppw-shortcode.php#L202)
- [https://plugins.trac.wordpress.org/browser/password-protect-page/tags/1.9.26/includes/services/class-ppw-shortcode.php#L587](https://plugins.trac.wordpress.org/browser/password-protect-page/tags/1.9.26/includes/services/class-ppw-shortcode.php#L587)
- [https://plugins.trac.wordpress.org/browser/password-protect-page/tags/1.9.26/includes/services/class-ppw-shortcode.php#L598](https://plugins.trac.wordpress.org/browser/password-protect-page/tags/1.9.26/includes/services/class-ppw-shortcode.php#L598)
- [https://plugins.trac.wordpress.org/browser/password-protect-page/tags/1.9.26/includes/services/class-ppw-shortcode.php#L608](https://plugins.trac.wordpress.org/browser/password-protect-page/tags/1.9.26/includes/services/class-ppw-shortcode.php#L608)

[← All CVEs](https://panop.io/threat-heartbeat/)

## What this record can't tell you

- Whether you run the affected software, and where
- Whether an attacker can actually reach and exploit it
- The misconfigurations that never get a CVE number
- What it would cost the business, ranked into what to fix first

Panop answers these inside your environment, for this CVE and every other finding.

[Book a demo](https://panop.io/demo)
