{"id":"CVE-2026-14922","aliases":["EUVD-2026-51419","GHSA-xmq9-mfwm-hg4m"],"status":"published","title":"WP Photo Album Plus \u003c 9.2.04.003 - Subscriber+ Stored XSS via Photo Comment","description":"WP Photo Album Plus is vulnerable to stored Cross-Site Scripting in all versions up to, and including, 9.2.03.001 through a decode-after-sanitize (double-encoding) flaw in the photo-comment pipeline. On write, `wppa_do_comment()` sanitizes the comment with `wppa_filter_html()` (wp_kses) followed by `wp_strip_all_tags()` (`wppa-functions.php:2623-2624`). Because `wp_strip_all_tags()` only removes *real* tags, an attacker who submits a **double HTML-entity-encoded** payload (e.g. `\u0026amp;lt;img src=... onload=...\u0026amp;gt;`) passes the write filters as harmless entity text and is stored one decode-level down (`\u0026lt;img ... onload=...\u0026gt;`).","severity":{"version":"3.1","score":6.1,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N","level":"medium","assessor":"adp","from":"cve"},"epss":{"day":"2026-11-09","score":0.00253,"percentile":0.16889,"model":"v2026.06.15"},"facts":{"in_kev":false,"known_exploited":false,"public_exploit":false,"fix_available":false},"cwes":["CWE-79"],"published":"2026-07-31T06:00:08Z","modified":"2026-08-26T16:31:36Z","products":[{"vendor":"opajaap","product":"wp photo album plus"},{"vendor":"unknown","product":"wp photo album plus"}],"references":[{"url":"https://wpscan.com/vulnerability/ca9f99eb-221a-417e-b18f-0a8b8b513f2e/","tags":["exploit","vdb-entry","technical-description"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2026-14922"},{"url":"https://wpscan.com/vulnerability/ca9f99eb-221a-417e-b18f-0a8b8b513f2e"},{"url":"https://github.com/advisories/GHSA-xmq9-mfwm-hg4m"}],"sources":{"cve":[{"id":"CVE-2026-14922","title":"WP Photo Album Plus \u003c 9.2.04.003 - Subscriber+ Stored XSS via Photo Comment","description":"WP Photo Album Plus is vulnerable to stored Cross-Site Scripting in all versions up to, and including, 9.2.03.001 through a decode-after-sanitize (double-encoding) flaw in the photo-comment pipeline. On write, `wppa_do_comment()` sanitizes the comment with `wppa_filter_html()` (wp_kses) followed by `wp_strip_all_tags()` (`wppa-functions.php:2623-2624`). Because `wp_strip_all_tags()` only removes *real* tags, an attacker who submits a **double HTML-entity-encoded** payload (e.g. `\u0026amp;lt;img src=... onload=...\u0026amp;gt;`) passes the write filters as harmless entity text and is stored one decode-level down (`\u0026lt;img ... onload=...\u0026gt;`).","status":"published","published":"2026-07-31T06:00:08.117Z","modified":"2026-07-31T19:41:45.293Z","cvss":[{"version":"3.1","score":6.1,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N","level":"medium","assessor":"adp"}],"cwes":["CWE-79"],"updated_at":"2026-11-02T13:38:32.13011Z"}],"euvd":[{"id":"EUVD-2026-51419","description":"WP Photo Album Plus is vulnerable to stored Cross-Site Scripting in all versions up to, and including, 9.2.03.001 through a decode-after-sanitize (double-encoding) flaw in the photo-comment pipeline. On write, `wppa_do_comment()` sanitizes the comment with `wppa_filter_html()` (wp_kses) followed by `wp_strip_all_tags()` (`wppa-functions.php:2623-2624`). Because `wp_strip_all_tags()` only removes *real* tags, an attacker who submits a **double HTML-entity-encoded** payload (e.g. `\u0026amp;lt;img src=... onload=...\u0026amp;gt;`) passes the write filters as harmless entity text and is stored one decode-level down (`\u0026lt;img ... onload=...\u0026gt;`).","status":"published","published":"2026-07-31T06:00:08Z","modified":"2026-07-31T19:41:45Z","cvss":[{"version":"3.1","score":6.1,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N","level":"medium"}],"updated_at":"2026-11-02T18:02:25.159179Z"}],"ghsa":[{"id":"GHSA-xmq9-mfwm-hg4m","title":"WP Photo Album Plus is vulnerable to stored Cross-Site Scripting in all versions up to, and...","description":"WP Photo Album Plus is vulnerable to stored Cross-Site Scripting in all versions up to, and including, 9.2.03.001 through a decode-after-sanitize (double-encoding) flaw in the photo-comment pipeline. On write, `wppa_do_comment()` sanitizes the comment with `wppa_filter_html()` (wp_kses) followed by `wp_strip_all_tags()` (`wppa-functions.php:2623-2624`). Because `wp_strip_all_tags()` only removes *real* tags, an attacker who submits a **double HTML-entity-encoded** payload (e.g. `\u0026amp;lt;img src=... onload=...\u0026amp;gt;`) passes the write filters as harmless entity text and is stored one decode-level down (`\u0026lt;img ... onload=...\u0026gt;`).","status":"published","published":"2026-07-31T09:31:17Z","modified":"2026-07-31T21:31:54Z","cvss":[{"version":"3.1","score":6.1,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N","level":"medium"}],"cwes":["CWE-79"],"updated_at":"2026-11-02T15:10:00.950607Z"}],"nvd":[{"id":"CVE-2026-14922","description":"WP Photo Album Plus is vulnerable to stored Cross-Site Scripting in all versions up to, and including, 9.2.03.001 through a decode-after-sanitize (double-encoding) flaw in the photo-comment pipeline. On write, `wppa_do_comment()` sanitizes the comment with `wppa_filter_html()` (wp_kses) followed by `wp_strip_all_tags()` (`wppa-functions.php:2623-2624`). Because `wp_strip_all_tags()` only removes *real* tags, an attacker who submits a **double HTML-entity-encoded** payload (e.g. `\u0026amp;lt;img src=... onload=...\u0026amp;gt;`) passes the write filters as harmless entity text and is stored one decode-level down (`\u0026lt;img ... onload=...\u0026gt;`).","status":"published","published":"2026-07-31T07:16:26.177Z","modified":"2026-08-26T16:31:36.75Z","cvss":[{"version":"3.1","score":6.1,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N","level":"medium","assessor":"secondary"}],"cwes":["CWE-79"],"updated_at":"2026-11-02T14:12:34.290716Z"}]}}
