← Back to Feed CACHED · 2026-05-17 09:42:19 · cache_key CVE-2025-29912
CVE-2025-22326 · CWE-79 · Disclosed 2025-01-07

Improper Neutralization of Input During Web Page Generation

ASSESSED — NOISGATE V0.5
Vendor
Reassessed
Verdict:
01 · The Real Story

This is more a booby-trapped note slipped under the admin's door than a skeleton key to the building

CVE-2025-22326 is a reflected XSS in the WordPress 5centscdn plugin. The original CNA/NVD text said affected versions were through 24.8.16, but the later mirrored CVE JSON and Wordfence record now point to through 25.4.15; either way, the live WordPress plugin page still exposes 25.4.15 and there is no official fixed version published. That matters more than the exact cutoff: if this plugin exists in your fleet, treat every currently deployed copy as suspect.

The vendor-style 7.1/HIGH score overstates real enterprise urgency. This is still *reflected* XSS with user interaction required, no known exploitation, very low EPSS, CISA ADP marking it non-automatable with partial impact, and a tiny apparent exposure population (10+ active installs on WordPress.org). If an attacker can land the lure on the right WordPress operator, impact can be real, but at 10,000-host scale this is not the fire to run toward first.

"Vendor called this HIGH; in practice it's a niche reflected XSS that needs a victim click and likely an admin session."
02 · The Attack Path

4 steps from start to impact.

STEP 01

Find a site running the plugin

The attacker first identifies a WordPress site using 5centscdn, typically through passive fingerprinting, exposed plugin paths, or admin-link discovery. This is usually done with basic recon tooling, browser inspection, or WordPress enumeration rather than exotic exploit frameworks.
Conditions required:
  • Target site is internet-reachable
  • The 5centscdn plugin is installed and reachable through a reflected input sink
Where this breaks in practice:
  • The plugin has only 10+ active installs on WordPress.org, so the reachable population is tiny
  • WordPress plugins are often not reliably fingerprintable from outside
  • Many enterprises do not expose WordPress admin paths broadly
Detection/coverage: External scanners may identify WordPress, but plugin-level detection is spotty unless you do authenticated WP inventory or filesystem/SBOM collection.
STEP 02

Build a malicious reflected-XSS URL with Burp Suite or manual tampering

The attacker crafts a URL containing payload-bearing input that the vulnerable plugin reflects into a page without proper sanitization or output encoding. Reflected XSS means there is no persistence step: the payload usually fires only when the victim requests the crafted URL.
Conditions required:
  • A vulnerable parameter or route is reachable
  • The payload survives application and server normalization
Where this breaks in practice:
  • Reflected XSS is brittle; payloads often break on encoding, nonce checks, or plugin-specific routing
  • If the sink is in an admin view, the attack implicitly requires a logged-in privileged user
Detection/coverage: WAFs and reverse proxies may log suspicious query strings, but signature coverage for one-off plugin routes is inconsistent.
STEP 03

Land the link on the right user

The attacker has to get a victim to click the crafted URL, typically via phishing, chat, ticketing, or social engineering. For WordPress plugin XSS, the meaningful victim is often an authenticated administrator because only that browser session has the cookies, nonce context, and permissions worth stealing or abusing.
Conditions required:
  • A user clicks the link
  • The user is using a browser session that can reach the vulnerable page
  • If the vulnerable sink is admin-side, the victim is authenticated to WordPress
Where this breaks in practice:
  • This is user-interaction-required and therefore not wormable
  • Security awareness, mail filtering, browser isolation, and plain user skepticism cut the hit rate hard
  • If the admin is not logged in when they click, the exploit chain may die
Detection/coverage: Email gateways, URL rewriting, secure web gateways, and proxy telemetry are the best places to catch this stage; infrastructure vuln scanners will not.
STEP 04

Execute browser-side actions with BeEF-style JS or custom script

Once script executes in the victim browser, the attacker can attempt session riding, nonce theft, DOM scraping, or privileged action abuse inside the WordPress origin. In the worst case, an admin victim can be leveraged into site-level compromise, but this is still *browser-context abuse*, not direct server-side code execution.
Conditions required:
  • The payload executes in the target origin
  • The victim session has enough privileges to matter
Where this breaks in practice:
  • HttpOnly cookies, CSP, nonce scoping, and short-lived sessions reduce what the script can do
  • Impact depends heavily on victim role; a low-privilege victim may yield almost nothing
  • No evidence this CVE is being used in active campaigns
Detection/coverage: Browser/EDR visibility is usually limited; look instead for unusual admin actions, sudden plugin/theme changes, or suspicious requests from legitimate admin sessions.
03 · Intelligence Metadata

The supporting signals.

In-the-wild statusNo confirmed active exploitation found in the sources reviewed. CISA ADP enrichment mirrored by OpenCVE marks Exploitation: none and Automatable: no.
Proof-of-concept availabilityNo widely circulated public PoC turned up in primary/public searches. This is also the kind of bug that is trivial to reproduce once the vulnerable parameter is known, so lack of PoC is only mild friction.
EPSSUser-provided EPSS is 0.00328 — low enough that this does not look like a likely near-term mass-exploitation candidate.
KEV statusNot KEV-listed. CISA's weekly bulletin included the CVE on 2025-01-13, but that is a publication roundup, not exploitation evidence.
CVSS vector meaningAV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:L means remote and unauthenticated on paper, but the decisive limiter is UI:R: the attacker still needs a victim click, and often a privileged WordPress session to make impact matter.
Affected versionsThere is source drift: NVD/CISA bulletin text says through 24.8.16, while later mirrored CVE JSON and Wordfence say through 25.4.15. Treat all deployed versions up to 25.4.15 as vulnerable or at least untrustworthy.
Fixed versionNo official fix available in Patchstack/Wordfence, and the WordPress plugin page still shows 25.4.15 as the latest listed release.
Exposure populationWordPress.org shows only 10+ active installations for the plugin. BuiltWith shows 230 websites using 5centsCDN technology broadly, but that is CDN usage, not proof of this plugin being installed.
Disclosure timelinePatchstack published on 2025-01-03; NVD published on 2025-01-07. The reporting credit goes to João Pedro S Alcântara (Kinorth).
04 · The Call

noisgate verdict.

Final Verdict
DOWNGRADED to LOW (3.1/10)

The single biggest reason this drops to LOW is that it is a reflected, user-interaction-required XSS in a plugin with a very small apparent deployment base. That combination kills scale: attackers need the plugin, the right route, the right victim, and a successful lure before they get any meaningful blast radius.

HIGH Downgrade from vendor HIGH based on exploitation friction
MEDIUM Assumption that meaningful impact usually requires an authenticated WordPress operator/admin victim
MEDIUM Affected-version ceiling because public sources disagree between `24.8.16` and `25.4.15`

Why this verdict

  • User interaction is the choke point: reflected XSS only matters if a victim follows the attacker-crafted link, which sharply lowers real-world exploit volume compared with server-side bugs.
  • Likely privileged-victim dependency: in WordPress plugin XSS, the useful target is usually an authenticated admin/operator session, which implies social engineering plus timing, not drive-by mass exploitation.
  • Tiny reachable population: WordPress.org reports only 10+ active installs, so even if the technical bug is real, the enterprise exposure pool is narrow.
  • No exploitation pressure: no KEV listing, no confirmed campaigns, and a very low EPSS all push downward from the vendor's 7.1 baseline.
  • Non-automatable per CISA ADP enrichment: that matters operationally because non-automatable reflected XSS does not scale like scanner-friendly RCE or auth bypass.

Why not higher?

There is no evidence of active exploitation, no known public campaign, and no mass-reachable unauthenticated server-side execution path. The exploit chain depends on a lure and likely a privileged browser session, which makes this a poor candidate for broad opportunistic abuse across enterprise fleets.

Why not lower?

It still should not be ignored if you have the plugin installed, because a successful XSS against a WordPress administrator can turn into site-level abuse, content injection, or malicious configuration changes. The lack of an official fix also means this is not a paperwork-only issue; if the plugin exists, you need an explicit risk decision.

05 · Compensating Control

What to do — in priority order.

  1. Remove or disable the plugin where unused — Because no official fix is available, elimination is the cleanest control. For a LOW verdict there is no SLA (treat as backlog hygiene), but if you find the plugin on production internet-facing sites, remove it in the next normal CMS change window rather than waiting for an upstream patch that may never land.
  2. Restrict WordPress admin access — Limit /wp-admin and related admin routes to trusted source IPs, VPN, or identity-aware access where practical. This does not cure the bug, but it reduces the chance that a crafted link can reach a logged-in privileged victim; for LOW, fold this into normal hardening backlog.
  3. Deploy virtual patching or WAF filtering — If you run Patchstack, Wordfence, or a tuned WAF in front of WordPress, use it to block suspicious reflected payloads and high-risk query patterns. This is especially useful when the vendor has no fixed version; for LOW, deploy as backlog hygiene unless the site is especially sensitive.
  4. Harden admin browsers — Use secure web gateways, URL rewriting, browser isolation for high-risk admins, and keep WordPress operators out of day-to-day browsing while authenticated. This attacks the actual exploit path — the click and the browser session — rather than treating the CVSS number as destiny.
  5. Watch for anomalous admin actions — Review WordPress logs for sudden plugin/theme changes, unexpected content edits, new admin users, or cache/CDN configuration changes originating from legitimate admin accounts. This is your best chance to spot successful browser-side abuse after the fact.
What doesn't work
  • MFA on the WordPress login does not stop an already-authenticated admin browser from executing injected JavaScript after the click.
  • Updating WordPress core alone does not fix a vulnerable plugin sink.
  • A generic external vulnerability scan may miss this entirely because plugin identification and reflected-XSS route discovery are often incomplete.
  • Waiting for a vendor patch is not a strategy here because no official fixed version is published.
06 · Verification

Crowdsourced verification payload.

Run this on the target WordPress host or from a config-management shell with filesystem access to the WordPress install. Invoke it as bash check-cve-2025-22326.sh /var/www/html and use an account that can read wp-content/plugins; root is not required if the plugin files are readable.

noisgate-verify.sh
BASHREAD-ONLYSAFE
#!/usr/bin/env bash
# check-cve-2025-22326.sh
# Detect likely exposure to CVE-2025-22326 in the WordPress 5centsCDN plugin.
# Usage: bash check-cve-2025-22326.sh /path/to/wordpress
# Exit codes:
#   0 = PATCHED (plugin absent / not affected)
#   1 = VULNERABLE
#   2 = UNKNOWN

set -u

WP_ROOT="${1:-}"
PLUGIN_DIR=""
MAIN_PHP=""
README=""
VERSION=""

if [[ -z "$WP_ROOT" ]]; then
  echo "UNKNOWN - missing WordPress root path argument"
  exit 2
fi

PLUGIN_DIR="$WP_ROOT/wp-content/plugins/5centscdn"
README="$PLUGIN_DIR/readme.txt"

if [[ ! -d "$PLUGIN_DIR" ]]; then
  echo "PATCHED - plugin directory not present"
  exit 0
fi

# Try common plugin entry file names first.
for f in "$PLUGIN_DIR/5centscdn.php" "$PLUGIN_DIR/index.php"; do
  if [[ -f "$f" ]]; then
    MAIN_PHP="$f"
    break
  fi
done

# Fallback: first PHP file in the plugin root.
if [[ -z "$MAIN_PHP" ]]; then
  MAIN_PHP=$(find "$PLUGIN_DIR" -maxdepth 1 -type f -name '*.php' | head -n 1)
fi

# Extract version from plugin header or readme stable tag/changelog.
if [[ -n "$MAIN_PHP" && -f "$MAIN_PHP" ]]; then
  VERSION=$(grep -iE '^\s*Version:\s*' "$MAIN_PHP" | head -n 1 | sed -E 's/^\s*Version:\s*//I' | tr -d '\r')
fi

if [[ -z "$VERSION" && -f "$README" ]]; then
  VERSION=$(grep -iE '^\s*Stable tag:\s*' "$README" | head -n 1 | sed -E 's/^\s*Stable tag:\s*//I' | tr -d '\r')
fi

if [[ -z "$VERSION" && -f "$README" ]]; then
  VERSION=$(grep -E '^=\s*[0-9]+\.[0-9]+\.[0-9]+\s*=$' "$README" | head -n 1 | sed -E 's/^=\s*([^ ]+)\s*=$/\1/' | tr -d '\r')
fi

if [[ -z "$VERSION" ]]; then
  echo "UNKNOWN - plugin present but version could not be determined"
  exit 2
fi

# Version comparison helper using sort -V.
version_le() {
  local a="$1"
  local b="$2"
  [[ "$(printf '%s\n%s\n' "$a" "$b" | sort -V | head -n 1)" == "$a" ]]
}

# Public sources disagree on cutoff (24.8.16 vs 25.4.15). Use the broader, later public record.
# There is no official fixed version, so >25.4.15 is UNKNOWN rather than PATCHED.
if version_le "$VERSION" "25.4.15"; then
  echo "VULNERABLE - detected 5centsCDN version $VERSION (public records indicate <= 25.4.15 is affected; no official fix published)"
  exit 1
fi

echo "UNKNOWN - detected 5centsCDN version $VERSION, but no authoritative fixed version is published"
exit 2
07 · Bottom Line

If you remember one thing.

TL;DR
Monday morning, inventory WordPress hosts for wp-content/plugins/5centscdn and make an explicit keep/remove decision. For a LOW noisgate rating there is no noisgate mitigation SLA — treat as backlog hygiene and go straight to removal, disablement, or documented acceptance in the next normal change window; there is likewise noisgate remediation SLA beyond backlog hygiene because there is no published vendor fix to target. If the plugin is absent, close the ticket; if it is present on a production internet-facing site, do not let it sit unowned waiting for a patch that may not come.

Sources

  1. NVD CVE-2025-22326
  2. Patchstack advisory for 5centsCDN
  3. Wordfence Intelligence entry
  4. WordPress.org plugin page
  5. CISA Vulnerability Summary for the Week of January 6, 2025
  6. OpenCVE mirror of CVE record and CISA ADP enrichment
  7. BuiltWith 5centsCDN usage statistics
Peer Review

What defenders are saying.

Submit a review attribution: handle + country only
0 flags selected · stored anonymously
Validation Results

Crowdsourced verification outputs.

Results submitted by users who ran the verification payload against their environment.