Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessCraft REQUEST_URI with entity-encoded script
-
DeliverySubmit request to WP Photo Album Plus
-
ExploitPayload stored in session history
-
ExecutionVictim loads modal container
-
PersistwppaEntityDecode revives HTML
-
ImpactScript executes in victim browser
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A05:2025 - Injection
ASVS 5.0
V1 - Encoding and Sanitization Output encoding, context-aware escaping
MITRE ATT&CK
2 techniques across 2 tactics: Initial Access, Execution The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Exploitation requires the WP Photo Album Plus plugin (<= 9.3.03.002) with its REQUEST_URI session-history logging active and the wppa-modal-container rendering path reachable, so the stored, entity-encoded payload is decoded by wppaEntityDecode() and injected via jQuery .html(). The attacker needs no authentication and no special account, but the script only fires when a user subsequently loads a page that renders the poisoned modal container - that victim page-access is the practical limiting factor, along with the site actually running the affected plugin version. The flaw stems specifically from esc_url_raw() stripping literal angle brackets while retaining HTML entities, so payloads must use entity encoding rather than raw tags. |
| Impact | The provided CVSS 3.1 vector (AV:N/AC:L/PR:N/UI:N/S:C/C:L/I:L/A:N, base 7.2 HIGH) indicates a network-reachable, low-complexity, unauthenticated stored XSS with a scope change, which is the standard Wordfence profile for client-side injection in a WordPress plugin. No EPSS score, CISA KEV listing, POC, or SSVC decision data was supplied, so there is no evidence of active exploitation or public weaponization; exploitation status is 'no public exploit identified at time of analysis.' The impact is bounded: C:L/I:L/A:N reflects script execution in a victim's browser session rather than server compromise, so this is a moderate client-side risk rather than a server takeover. One signal to verify: the input vector declares UI:N, yet the description says the payload 'will execute whenever a user accesses an injected page,' which implies a victim must visit the poisoned page - a nuance that slightly tempers the 'no interaction' claim but does not change the unauthenticated-injection concern. Overall this is a credible, patch-worthy issue for sites running the affected plugin, but absent KEV/EPSS/POC it is not an emergency relative to actively exploited vulnerabilities. |
| Exploit ScenarioDerived | An unauthenticated attacker crafts a request whose REQUEST_URI contains HTML entities that survive esc_url_raw() sanitization; the plugin stores this in its session history. When a user later triggers the WP Photo Album Plus modal, wppaEntityDecode() converts the entities back into live HTML and jQuery('#wppa-modal-container').html() renders them, executing attacker script in the victim's browser. No public exploit code was identified in the provided data. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 10, 2026
Stored cross-site scripting in the WP Photo Album Plus WordPress plugin affects all versions up to and including 9.3.03.002 and can be triggered by remote attackers without authentication, since the assessed CVSS vector is AV:N/AC:L/PR:N/UI:N. The plugin records session history derived from REQUEST_URI without adequate sanitization, and because esc_url_raw() strips literal angle brackets while preserving HTML entities, the plugin's own wppaEntityDecode() routine later converts those entities back into live markup that is rendered through jQuery('#wppa-modal-container').html(). The stored script executes only when a victim subsequently loads a page that renders the poisoned modal container, which is the practical limiting factor; the base score of 7.2 (HIGH) reflects scope change with limited confidentiality and integrity impact, and no public exploit code or confirmed active exploitation was identified at time of analysis.
RemediationAI
No vendor-released patch was identified in the available data for CVE-2026-96278; the advisory references point to the vulnerable 9.3.02.003 source and no fixed version is documented, so site owners should treat 9.3.03.002 and earlier as unfixed and monitor the Wordfence advisory at https://www.wordfence.com/threat-intel/vulnerabilities/id/095e93d0-ad0d-4613-887e-5e47a2ef2b96 and the WordPress plugin repository for a patched release, then upgrade to the first version that states a fix. Because the payload is stored and unauthenticated, the highest-value compensating control is to deactivate WP Photo Album Plus entirely on sites that do not depend on it; the trade-off is loss of all galleries, albums, and photo-display functionality. Where the plugin must remain active, disable or avoid the REQUEST_URI-derived session-history logging feature if the plugin exposes a setting for it, accepting that this removes session tracking behavior used for gallery navigation continuity. As a second layer, block or rewrite request URIs containing HTML entity encodings (for example %26%2360 or </> sequences) and generic entity-encoded tag patterns at the WAF or reverse-proxy layer, with the trade-off that legitimate URLs containing entity references may be rejected and that WAF rules require tuning to avoid bypasses using alternate entity forms. Administrators can also reduce exposure by restricting who can reach pages that render the modal container and by auditing stored session-history records for entity-encoded content, though neither eliminates the underlying decode-then-.html() rendering flaw. Adding an output-encoding filter that escapes the modal container content (or replacing the jQuery .html() sink with .text() via a custom plugin patch) removes the execution path, but such a patch is unsupported and must be re-applied after every plugin update.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
This is a classic CWE-79 improper neutralization of input during web page generation, manifesting as a stored (persistent) XSS in a WordPress plugin. WP Photo Album Plus maintains session history keyed off the HTTP REQUEST_URI, and that attacker-controllable value flows through sanitization paths shown in wppa-input.php, wppa-session.php, and wppa-maintenance.php before reaching the front-end rendering logic. The core bypass is an encoding mismatch: esc_url_raw(), the WordPress-sanctioned URL sanitizer, removes literal '<' and '>' characters and therefore appears to neutralize tag injection, but it leaves HTML entity sequences (such as <script>) intact. The plugin's own wppaEntityDecode() helper then decodes those entities back to live angle brackets, and the resulting string is passed to jQuery('#wppa-modal-container').html(), which parses it as HTML rather than as text. The result is that a payload which survived the URL filter is rehydrated into executable markup client-side. Because the injection rides on a stored session-history record rather than a single request/response cycle, the payload persists and fires for later visitors, and the referenced admin-side script (js/wppa-admin-scripts.js) underscores that the modal rendering path is part of the plugin's normal UI behavior rather than an edge case. The CPE cpe:2.3:a:opajaap:wp_photo_album_plus:*:*:*:*:*:*:*:* confirms the vendor namespace is opajaap and that every shipped release in the affected range is in scope.
Know when Wp Photo Album Plus gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
AV:N/AC:L/PR:N/UI:N/S:C/C:L/I:L/A:N
Unauthenticated network injection via REQUEST_URI (PR:N, AV:N, AC:L); stored XSS crosses into the victim browser (S:C) with limited C/I and no availability impact.
Primary rating from Vendor (Wordfence).
CVSS VectorVendor: Wordfence
DescriptionCVE.org
The WP Photo Album Plus plugin for WordPress is vulnerable to Stored Cross-Site Scripting via REQUEST_URI Session History in all versions up to, and including, 9.3.03.002 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. The bypass works because esc_url_raw() strips literal angle brackets but retains HTML entities, which wppaEntityDecode() silently converts back to live HTML tags before jQuery('#wppa-modal-container').html() renders them.
Executive ViewAI
WP Photo Album Plus, a WordPress plugin installed on affected sites through version 9.3.03.002, contains an unauthenticated stored cross-site scripting flaw that can persist in the plugin’s modal container. No public exploit identified at time of analysis, and no vendor-released patch identified at time of analysis, leaving all affected installations exposed until mitigation. Leadership should care because successful exploitation could compromise visitor and administrator sessions, damage site trust, and require costly cleanup across multiple WordPress properties.
No vendor-released patch identified at time of analysis. Interim mitigations include disabling or removing WP Photo Album Plus versions up to and including 9.3.03.002, applying WAF/virtual patching rules to block crafted REQUEST_URI payloads, enforcing a strict Content-Security-Policy, restricting administrative access, and monitoring logs for stored script activity or unexpected modal-container content.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Cross-Site Scripting occurs when an application accepts untrusted data and sends it to a web browser without proper validation or encoding.
More in Wp Photo Album Plus
View allUnauthenticated information disclosure in WP Photo Album Plus (WordPress plugin, all versions before 9.2.07.002) allows
Unauthenticated arbitrary file deletion in WP Photo Album Plus (versions before 9.2.07.002) exposes WordPress sites to p
Reflected Cross-Site Scripting in the WP Photo Album Plus WordPress plugin (all versions before 9.2.07.002) allows unaut
SQL injection in the WP Photo Album Plus WordPress plugin before 9.1.11.001 allows unauthenticated attackers to inject a
Insufficient authorization in WP Photo Album Plus (all versions before 9.2.09.002) allows any authenticated WordPress us
The WP Photo Album Plus WordPress plugin before 8.0.10 was vulnerable to Stored Cross-Site Scripting (XSS). Rated medium
Stored XSS in WP Photo Album Plus (all versions up to 9.2.03.001) allows unauthenticated remote attackers to inject pers
Unauthenticated SQL injection in the WP Photo Album Plus WordPress plugin (versions ≤ 9.1.08.001) allows remote attacker
Authenticated OS command injection in the WP Photo Album Plus WordPress plugin (all versions up to and including 9.3.02.
Multiple cross-site scripting (XSS) vulnerabilities in wppa-ajax-front.php in the WP Photo Album Plus (aka WPPA) plugin
Remote code execution in WP Photo Album Plus affects all versions through the wppa_image_magick path, allowing authentic
Blind SQL injection in the WP Photo Album Plus WordPress plugin (all versions up to and including 9.1.13.005) lets remot
EUVD-2026-96293
GHSA-36x3-mvq9-4q26
NVD
CVE.org
EPSS
Vulnrichment
Exploit-DB