CVE-2026-113499
Unauthenticated stored XSS via CDN inline CSS rewriting. The routine removes a quote that terminates an attribute; combined with an unescaped comment author name, a published comment can inject attributes that run script. CVSS 7.5.
Security advisory · 26 October 2026
On 23 October 2026 WPScan disclosed three vulnerabilities in LiteSpeed Cache, the caching and optimization plugin on roughly seven million WordPress sites, all fixed in version 7.9.2 released on 20 October. Two of them, CVE-2026-113499 and CVE-2026-113500, are unauthenticated stored cross-site scripting: on a site with the right options switched on, an attacker who gets a comment published can inject markup that runs JavaScript in the browser of anyone who views the page, including a logged-in administrator. Each is rated CVSS 3.1 7.5 (High). The third, CVE-2026-113501, is a lower-severity missing-authorization issue that lets a Subscriber dismiss admin notices. The flaws only bite when specific optimization features are enabled and the theme prints commenter names without escaping them, so most sites are not exposed — but the plugin is so widespread that “most are safe” still leaves a large number that are not. Here is which settings matter, how to check, and what to do.
Published Last reviewed
Start here
LiteSpeed Cache does more than cache pages; it rewrites and optimizes the HTML it serves. Two of its optimization routines were meant to act only on stylesheet content, but in versions before 7.9.2 they ran over the whole rendered page. In the course of rewriting, each could remove a character that was holding an HTML attribute closed — a quote, in the CDN inline-CSS rewriting routine behind CVE-2026-113499; the markup that closes an attribute, in the font-display optimization behind CVE-2026-113500. On its own that is a cosmetic bug. It becomes a security flaw because of what else is on the page.
A WordPress comment carries an author name, and many themes print that name into the page. If the theme prints it without escaping — a known weakness in some themes, not in LiteSpeed Cache itself — then an attacker can put HTML-significant characters in the name field of a comment. Normally the surrounding markup keeps that inert. But once LiteSpeed’s optimizer has stripped the character that closed a nearby attribute, the attacker’s crafted name is no longer trapped inside a quoted value: it can break out and introduce new attributes, including event handlers such as onmouseover or onload that run JavaScript. The result is stored cross-site scripting — stored because the comment is saved and served to everyone, and because the mangled page is then cached and served again.
The person who triggers it needs no account: anyone who can get a comment published can do it. The person who is attacked is whoever views the page, and the high-value target is a logged-in administrator, whose browser would run the injected script with their session — enough to create a new administrator, plant a backdoor plugin, or change site settings. That chain is why an XSS flaw that depends on a few conditions is still rated High. The third flaw disclosed in the same release, CVE-2026-113501, is unrelated and much milder: a Subscriber-level user can dismiss administrative notices the plugin marks as non-dismissible, including a warning that sensitive files may be exposed, which could keep an owner from seeing a problem but does not itself run code or take over an account.
Figure 1 · CVE-2026-113499 and 113500 at a glance
Three conditions must all hold — but the install base is seven million.
| Question | What the advisories say | What to do |
|---|---|---|
| Severity | Two unauthenticated stored XSS flaws, CVSS 3.1 7.5 each | Update LiteSpeed Cache, then purge the cache |
| Patch | LiteSpeed Cache 7.9.2, released 20 October 2026 | Update, then run Purge All |
| Who can use it | Anyone whose comment is published; no account needed | Moderate comments if you cannot update yet |
| When it bites | Only with CDN image mapping or Font Display on, and an unescaped name | Check both settings; the two flaws are independent |
| Impact | Script runs in a viewer’s browser, an admin’s included | Review comments and admins on an exposed site |
| Also fixed | CVE-2026-113501, a Subscriber notice-dismissal, low severity | 7.9.2 closes it too |
Unauthenticated stored XSS via CDN inline CSS rewriting. The routine removes a quote that terminates an attribute; combined with an unescaped comment author name, a published comment can inject attributes that run script. CVSS 7.5.
Unauthenticated stored XSS via Font Display Optimization. The routine can delete the markup that closes an attribute; combined with an unescaped comment author name, a published comment can inject event-handler attributes that run script. CVSS 7.5.
A Subscriber-level user can dismiss admin notices the plugin pins as non-dismissible, because the handler does not check capability and its nonce is not bound to the specific notice. Low severity — no code execution, no data access, no takeover.
7.9.2 restricts the two rewriting routines to the content they were meant to touch, so they no longer break attributes elsewhere in the page, and adds the capability check and per-notice nonce for the dismissal handler. Updating removes the HTML-corruption step the XSS depends on.
Who is exposed
LiteSpeed’s own advisory is explicit that a site is affected only when all of the conditions below hold. That narrows the exposed population sharply, but with seven million installs the remainder is still large, so check rather than assume. Update regardless; the check decides how urgent the cache purge and comment review are.
In short: if your sites keep comments closed or always moderated, or your theme escapes commenter names, or you do not run the CDN image-mapping and font-display options, you were most likely never exposed — and updating is simple hygiene. If a site does take open comments and has one of those optimization options on, treat it as exposed, update and purge first, then review recent comments and your administrators. The two flaws are independent, so a site can be exposed through one option and not the other; check both.
| Condition | Where to check | Notes |
|---|---|---|
| The site publishes comments from unauthenticated visitors | Settings → Discussion; whether comments are open on posts and whether first-time or anonymous comments are published | If comments are closed everywhere, or every comment is held for manual approval, the stored vector has no way in |
| The theme outputs the comment author name without escaping | The theme’s comment template (the callback used by wp_list_comments); a developer can confirm whether the author name is passed through esc_html | This is a theme weakness, not a LiteSpeed one, but it is half of the chain. A well-written theme escapes the name and breaks the attack even on a vulnerable plugin version |
| CVE-2026-113499 — CDN image mapping is on | CDN → Other Static CDN: “Use CDN Mapping” ON, a “CDN URL” set, and “Include Images” ON | All three together. On WP-CLI: wp litespeed-option get cdn and wp litespeed-option get cdn-mapping[inc_img][0] |
| CVE-2026-113500 — font-display optimization is on | Page Optimization → CSS Settings → “Font Display Optimization” set to Swap | On WP-CLI: wp litespeed-option get optm-css_font_display. The default is off |
Update
The fix is LiteSpeed Cache 7.9.2. Updating replaces the rewriting routines; purging the cache matters here more than usual, because a page that was corrupted and cached while the flaw was present would keep being served from cache until it is purged and regenerated.
From the dashboard, Plugins → Installed Plugins → LiteSpeed Cache → Update now, or across sites with WP-CLI:
wp plugin update litespeed-cache
wp plugin get litespeed-cache --field=version
Confirm the installed version reads 7.9.2 or newer. The vendor shipped 7.9.2 to the WordPress repository on 20 October and to the LiteSpeed control-panel plugin list on 23 October.
So any page cached with injected or corrupted markup is regenerated from the fixed code:
wp litespeed-purge all
From the dashboard this is LiteSpeed Cache → Toolbox → Purge → Purge All. If the site also sits behind a CDN or an edge cache such as QUIC.cloud, purge that layer too, or the old page can persist at the edge.
Confirm what was enabled, so you know whether the site met the conditions and how closely to review comments:
wp litespeed-option get optm-css_font_display
wp litespeed-option get cdn
A value of 1 or a non-empty setting means that feature was active. You do not need to disable them after updating — 7.9.2 makes them safe — but knowing what was on tells you whether to treat the site as having been exposed.
If you were exposed
The payload lives in a comment and in any cached copy of the page that rendered it. If a site met the conditions while running a version before 7.9.2, look in those two places, and then at the accounts an administrator’s browser could have been used to create. Preserve a backup before deleting anything.
Remove the malicious comment and purge the cache again so the clean page is served. If you also find a new administrator, a backdoor plugin, or settings you did not change, the incident went beyond a single comment and the site should be treated as compromised: the cleanup guides below are the next step. If the only finding is the comment itself and nothing in the administrator or plugin review looks wrong, deleting the comment and purging is enough.
| Indicator | Where to look | What it means |
|---|---|---|
| A comment whose author name contains HTML, quotes or event-handler text | Comments → All Comments; or wp comment list and inspect the author names | The stored payload. A name field holding characters like a quote, an angle bracket or onmouseover= is the injection, not a normal name |
| Script or unexpected attributes in a cached page near a comment author name | View source on a commented page; compare a freshly purged copy | The rendered result of the flaw; it should disappear after updating and purging |
| A new administrator, or a changed admin email, around the exposure window | wp user list --role=administrator; wp option get admin_email | What the attack aims for: script running in an admin’s browser can create accounts or change settings |
| A new or modified plugin, or a must-use plugin you did not add | wp plugin list --status=active; ls -la wp-content/mu-plugins/ | A common payload of an admin-context XSS is to install a backdoor plugin |
| Unexpected changes to site options or new scheduled events | wp option get siteurl and home; wp cron event list | Further persistence an admin session could have been used to set |
Actions
Update first, purge second, then decide from the conditions whether the site needs a closer look. Record what you find.
On every site that runs it, update through the dashboard or wp plugin update litespeed-cache and confirm the version reads 7.9.2 or newer. This replaces the rewriting routines the XSS depends on.
Run Purge All (or wp litespeed-purge all) so pages cached with corrupted markup are regenerated, and purge any CDN or QUIC.cloud layer in front of the site so an old copy does not persist at the edge.
Check whether comments are open and unmoderated, whether the theme escapes author names, and whether CDN image mapping or font-display optimization was on. A site meeting all the conditions should have its recent comments and administrators reviewed; a site meeting none was not exposed.
Turn on Settings → Discussion → “Comment must be manually approved” so nothing reaches a page unreviewed. This is the vendor’s interim workaround; it holds the stored vector shut until the update is applied, but it is not a substitute for updating.
Look for comment author names containing markup, and for administrators, plugins or settings that changed around the exposure window. Remove the payload, and if anything else turns up, treat it as a site compromise and move to cleanup.
Sources
This advisory is based on the WPScan vulnerability records for CVE-2026-113499, CVE-2026-113500 and CVE-2026-113501, published 23 October 2026, the CVE records, and LiteSpeed Technologies’ own advisory of 23 October, which names the exact settings that make each XSS flaw reachable and gives comment moderation as the interim workaround. The mechanism, the affected and fixed versions, the CVSS ratings, the conditions and the researcher credits are taken from those. The seven-million installed-base figure is WordPress.org’s active-installations estimate. No exploitation in the wild has been reported, and no proof of concept is reproduced here; WPScan has said it will publish its proof of concept on 22 November 2026.
Common questions
Not necessarily. The vendor says a site is affected only when all of these are true: it publishes comments from unauthenticated visitors, its theme outputs the comment author name without escaping, and the relevant optimization option is enabled — CDN image mapping for CVE-2026-113499, or Font Display Optimization set to Swap for CVE-2026-113500. A site meeting none of these was not exposed. Update anyway, because it is simple and the plugin is central to the site.
LiteSpeed Cache 7.9.2, released 20 October 2026. It also fixes the Subscriber-level admin-notice dismissal issue, CVE-2026-113501. Confirm the installed version with wp plugin get litespeed-cache --field=version, and purge the cache after updating.
Because a cache serves saved copies of pages. If a page was corrupted by the flawed optimizer and cached while you were on an older version, that bad copy keeps being served until it is purged and regenerated from the fixed code. Run Purge All, or wp litespeed-purge all, and purge any CDN or QUIC.cloud layer in front of the site as well.
Get a comment published whose author name carries crafted markup, which — on a site meeting the conditions — runs JavaScript in the browser of anyone viewing the page. The serious case is a logged-in administrator viewing it: the script runs with their session and can create an administrator, install a backdoor plugin, or change settings. No account is needed to plant the comment.
Turn on comment moderation at Settings → Discussion so every comment is approved by a human before it appears. That is LiteSpeed’s own interim workaround — it stops the stored payload reaching a page. It is a stopgap, not a fix; update to 7.9.2 as soon as you can. Disabling the CDN image-mapping or font-display option also removes that flaw’s path in the meantime.
Much less. It lets a logged-in Subscriber dismiss admin notices the plugin marks as non-dismissible, including a warning that sensitive files may be exposed. It does not run code, read data, or take over an account; its real risk is hiding a warning from the owner. Sites that allow open registration make a Subscriber account easy to get, so it is still worth closing — which 7.9.2 does.
Choose the response path
The site and its caching layer
Best when you run one or more sites on LiteSpeed Cache, are not certain which optimization options are on or whether your theme escapes commenter names, and want the plugin, the cache, the CDN and the user list reviewed in one pass with a written result.
Something already looks wrong
Best when the review has turned up injected script, an unexplained administrator, or a plugin you did not install, and you want the compromise scoped, the persistence removed, and the site returned to a trusted state rather than only the comment deleted.