Stored cross-site scripting in WPSpeed via display names
Key facts
- Attack vector
- Network
- Privileges required
- Low
- User interaction
- None
- Attack complexity
- Low
- Impact type
- Cross-site scripting
- Confidentiality · integrity · availability
- Low · Low · None
- Fix status
- No fix listed
Attack profile from CVSS 3.1 · CNA. Fix status from CNA. Impact type from CWE-79.
Summary
The WPSpeed plugin for WordPress through 2.6.10 is vulnerable to stored cross-site scripting (CWE-79). An optimizer step decodes HTML entities across the whole author archive page, so markup stored as entity-encoded text in a user's display name runs in visitors' browsers. An authenticated attacker with Subscriber access or higher can store this markup in their own nickname and trigger it when logged-out visitors load their author archive.
Written with Claude Haiku 5.5 from the sources below · 2026-11-07
Description from the CNA
The WPSpeed plugin for WordPress is vulnerable to Stored Cross-Site Scripting in versions up to, and including, 2.6.10 This is due to a combination of two issues in the LightImages HTML optimizer: (1) Dispatcher::runOptimize() decides whether the current request is the site's home page by comparing only the URL path from REQUEST_URI against the path of the home URL, so on a plain-permalinks install the author archive URL /?author=<ID> is treated as the home page and the LightImages optimizer runs on it; and (2) LightImages::optimize() calls html_entity_decode() across the entire serialized DOMDocument output under the default-enabled img_processing_entity_decode setting, converting any entity-encoded markup present as plain text in the page (including WordPress's rendered author title) into live HTML. This makes it possible for authenticated attackers, with Subscriber-level access and above, to store entity-encoded markup in their own nickname/display_name through the normal profile endpoint and have that markup rehydrated into executing script when any logged-out visitor loads their author archive.
Why it matters now
SSVC decision points
CISA ADP · SSVC 2.0.3
- Exploitation
- None
- Automatable
- No
- Technical impact
- Partial
The decision (Track, Attend, Act) also depends on your mission and well-being impact; see CISA's SSVC guide.
Affected products
| Vendor | Product | Affected versions | Fixed in | Status | Source |
|---|---|---|---|---|---|
| john-dagelmore | WPSpeed – WordPress Speed, Cache & Performance Optimization (Core Web Vitals, PageSpeed 100) | up to 2.6.10 | — | No fix listed | CNA |
- WPSpeed – WordPress Speed, Cache & Performance Optimization (Core Web Vitals, PageSpeed 100) Vendorjohn-dagelmore Affected up to 2.6.10 Fixed in — No fix listed CNA
Remediation
The sources list no fixed version for WPSpeed.
Written with Claude Haiku 5.5 from the sources below · 2026-11-07
Timeline
- 2026-11-07 Threatist record created from CVE-2026-118784
- 2026-11-07 Alias added: GHSA-jhr8-3vqj-g7jj
- 2026-11-07 CISA SSVC decision points changed
- 2026-11-07 Priority changed: MEDIUM → LOW
References
Other 5
- https://www.wordfence.com/threat-intel/vulnerabilities/id/47aa1a74-4189-4521-ba6e-e91a06b8f5a6?source=cve
- https://plugins.trac.wordpress.org/browser/wpspeed/tags/2.6.10/src/Dispatcher.php#L170
- https://plugins.trac.wordpress.org/browser/wpspeed/tags/2.6.10/src/Core/LightImages.php#L628
- https://plugins.trac.wordpress.org/browser/wpspeed/tags/2.6.10/src/Core/Optimize.php#L152
- https://plugins.trac.wordpress.org/changeset/3771695/wpspeed/trunk/src/Core/LightImages.php
More john-dagelmore vulnerabilities
- TI-2026-08006 GPTranslate <= 2.31 - Unauthenticated Stored Cross-Site Scripting via REST API Translation Storage CVSS 3.1HIGH 7.2
- TI-2026-60447 GPTranslate <= 2.34.6 - Unauthenticated Sensitive Information Exposure in Public Frontend Inline Script CVSS 3.1MEDIUM 5.3
Sources
- CVE-2026-118784 · CVE Program
- CVE-2026-118784 · NVD
- FIRST EPSS
- GHSA-jhr8-3vqj-g7jj · GitHub Advisory Database · CC BY 4.0
This product uses the NVD API but is not endorsed or certified by the NVD. Sources and licences