← Back to Feed CACHED · 2026-05-17 09:42:19 · cache_key CVE-2025-29912
CVE-2025-22293 · 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 a bad backstage pass, not someone kicking in the front door

CVE-2025-22293 is a stored/DOM-style XSS issue in the WordPress gutentor plugin. Current public tracking converges on affected versions <= 3.4.3, with 3.4.4 listed as the fix; earlier CVE metadata originally said <= 3.4.0, then NVD shows that record was later updated to <= 3.4.3. Exploitation requires an authenticated WordPress user at Contributor+ level to place attacker-controlled content into Gutentor-managed page elements so script runs when another user views the injected page.

The vendor/CNA-style 6.5 MEDIUM score is defensible in a vacuum, but it overstates enterprise urgency. The decisive friction is attacker position: this is not unauthenticated internet exploitation, it is post-login abuse of a specific WordPress role on a specific plugin, with no KEV entry, very low EPSS, and no strong evidence of active campaigns. For most enterprises, the reachable population is the subset of sites that both run Gutentor and allow low-privilege content authors.

"Real bug, wrong priority: this is post-auth WordPress content abuse, not an enterprise fire drill."
02 · The Attack Path

4 steps from start to impact.

STEP 01

Get a Contributor foothold

The attacker first needs valid WordPress credentials with at least the Contributor role, obtained through password reuse, phishing, weak onboarding/offboarding, or intentionally open author registration. This is the real gate on the entire chain: no contributor session, no exploit path. Typical tooling is just the normal WordPress login flow or credential-stuffing kits rather than a bespoke exploit.
Conditions required:
  • Target site runs WordPress with the Gutentor plugin installed
  • Attacker has authenticated access as Contributor or higher
  • The relevant editor/plugin features are available to that role
Where this breaks in practice:
  • Many enterprise WordPress sites have no Contributor accounts at all
  • SSO, MFA, and closed registration sharply reduce reachable population
  • Contributor abuse usually implies an earlier identity-control failure or insider access
Detection/coverage: WordPress user/role audits, IdP login telemetry, and CMS account inventory can catch this stage; network scanners generally cannot.
STEP 02

Inject script through a Gutentor block

Using the block editor and a browser or an intercepting proxy such as Burp Suite, the attacker submits crafted content that the plugin fails to sanitize or safely escape. Public descriptions disagree on UI:R versus UI:N, but both agree the core problem is authenticated content injection into a stored page context. The weapon is not exotic: it is ordinary editor access plus a short payload.
Conditions required:
  • A vulnerable Gutentor version <= 3.4.3 is installed
  • The attacker can create or edit content that uses affected Gutentor functionality
  • Input reaches the vulnerable rendering path
Where this breaks in practice:
  • Not every site uses the affected widget/path in normal workflows
  • Some editorial review processes block unpublished or unapproved content
  • WAFs are inconsistent at stopping stored XSS embedded in authenticated CMS traffic
Detection/coverage: Static plugin version checks can flag exposure; content-security monitoring, WAF logs, and WordPress change review may catch suspicious payloads, but signature coverage is uneven.
STEP 03

Wait for a higher-value viewer

The stored payload matters only when another user loads the poisoned page. In the common abuse case, the goal is to hit an Administrator or Editor and steal a nonce, session token, or force privileged actions in the browser context. Browser-side payload frameworks or simple fetch()-based exfil are enough.
Conditions required:
  • A victim user visits the infected page
  • The victim browser executes inline or referenced attacker script
  • The payload can reach useful tokens or privileged workflows
Where this breaks in practice:
  • If only anonymous visitors view the page, impact may be limited to defacement or client-side abuse
  • Hardened cookie settings, CSP, and admin separation reduce post-XSS leverage
  • Unpublished drafts or low-traffic pages may never get a privileged viewer
Detection/coverage: Browser CSP reports, unusual admin actions after page views, and client-side telemetry can expose this stage; most VM scanners cannot.
STEP 04

Pivot to site-level abuse

Once script executes in a privileged browser session, the attacker can attempt admin action forgery, plugin/theme modification, SEO spam insertion, or persistence via new accounts. The blast radius is usually the single WordPress site or tenant, not the broader enterprise estate, unless that site itself is business-critical or federated with wider identity and secrets.
Conditions required:
  • An admin/editor context is successfully reached
  • WordPress nonces or privileged actions are accessible from the browser context
  • The site lacks secondary controls such as strict CSP or approval gates
Where this breaks in practice:
  • Cross-site scripting does not automatically become server RCE
  • Separate admin hosts, short session lifetime, and least-privilege roles can contain impact
  • Many enterprises can reimage or restore a marketing site quickly if abuse is confined there
Detection/coverage: Look for unexpected user creation, plugin changes, post modifications, and admin-originated requests shortly after contributor edits.
03 · Intelligence Metadata

The supporting signals.

In-the-wild statusNo reviewed source showed active exploitation for this CVE, and it is not present in CISA KEV.
Proof-of-concept availabilityNo public weaponized GitHub PoC was surfaced in reviewed sources. That said, exploit development is low-complexity for anyone with a test site and a proxy like Burp Suite because the primitive is authenticated content injection.
EPSSUser-supplied EPSS is 0.00152, which is very low and consistent with niche, low-priority exploitation.
KEV statusNot KEV-listed as checked against the CISA Known Exploited Vulnerabilities Catalog.
CVSS vectorCVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:C/C:L/I:L/A:L from the CNA/NVD record implies network reachability but requires authenticated low privilege and user interaction, which is exactly why the raw score overstates broad enterprise urgency.
Affected versionsCurrent public consensus is Gutentor <= 3.4.3 affected. Note the CVE record originally said <= 3.4.0; NVD change history shows later expansion to <= 3.4.3.
Fixed version3.4.4 is the listed patched release. The WordPress plugin changelog for 3.4.4 on 2025-01-20 notes security fixes; distro backport guidance is not applicable here because this is a WordPress plugin, not an OS package.
Exposure populationWordPress.org shows 30,000+ active installations for Gutentor. That is meaningful plugin reach, but unlike an appliance CVE, external search engines cannot reliably fingerprint a site's Gutentor version from the internet.
Scanning / exposure dataShodan/Censys/FOFA-style counting is weak here: they can find WordPress sites, but not reliably confirm the plugin or version without deeper application inspection. Treat the WordPress.org install count as the best public exposure proxy.
Disclosure / creditPublicly disclosed on 2025-01-07; credited to João Pedro Soares de Alcântara (Kinorth) in Wordfence/Patchstack tracking.
04 · The Call

noisgate verdict.

Final Verdict
DOWNGRADED to LOW (3.9/10)

The single most important downgrading factor is that exploitation requires authenticated Contributor+ access on a site that specifically uses the vulnerable plugin path. That makes this a post-auth content-abuse bug with a constrained blast radius, not a broad internet compromise opportunity.

HIGH Attack-path friction assessment
MEDIUM Version-range mapping (`<= 3.4.0` versus `<= 3.4.3`) due to public record changes

Why this verdict

  • Downgrade for attacker position: exploitation starts at authenticated Contributor+, which already implies prior credential compromise, insider access, or open author registration.
  • Downgrade for exposure fraction: only organizations running WordPress, using Gutentor, and permitting low-privilege content authors are meaningfully exposed; that is a narrow slice of a 10,000-host enterprise.
  • Downgrade for threat evidence: no KEV listing, very low EPSS, and no solid public evidence of active campaign use in reviewed sources.

Why not higher?

This is not unauthenticated RCE, not a perimeter bypass, and not a one-packet internet-wide wormable issue. The chain depends on a low-privilege CMS foothold plus a victim viewing the poisoned content, which compounds real-world friction fast.

Why not lower?

It is still a real stored XSS bug in a plugin with 30,000+ installs, and Contributor is not an especially rare role on publishing-heavy sites. If an attacker can land on a multi-author site, stored XSS can absolutely become admin-session theft or site takeover, so dismissing it as IGNORE would be sloppy.

05 · Compensating Control

What to do — in priority order.

  1. Inventory Gutentor immediately — Identify every WordPress instance running gutentor and pull exact plugin versions. Because this is a LOW verdict, there is no mitigation SLA; do this in normal backlog hygiene and use it to separate <= 3.4.3 from patched estates.
  2. Clamp down Contributor access — Review who actually has Contributor/Author roles, disable public registration where unused, and remove dormant accounts. This directly attacks the exploit precondition and should be done as routine identity hygiene since there is no formal mitigation SLA for LOW findings.
  3. Enforce MFA and SSO for WordPress admins and authors — MFA will not fix the vulnerable code, but it materially reduces the easiest path to exploitation: stolen content-author credentials. Roll this out on vulnerable sites during the normal maintenance cycle.
  4. Add a restrictive CSP where practical — A sane Content Security Policy can reduce exploit reliability and token exfil paths for stored XSS, especially on admin and editor surfaces. Deploy as defense-in-depth in the same maintenance window if your theme/plugin stack tolerates it.
  5. Patch to 3.4.4 or later — Move vulnerable instances off <= 3.4.3 to the vendor-fixed release or newer. For a LOW verdict this is backlog hygiene, not an emergency, but it should still land on your standard plugin update cadence.
What doesn't work
  • Perimeter firewalls alone do not help, because the exploit rides over normal HTTPS after a legitimate WordPress login.
  • Version-agnostic vulnerability scans often miss WordPress plugin issues; they can find the site but not reliably prove the Gutentor version.
  • MFA by itself is not a complete answer; it reduces stolen-credential risk but does nothing against malicious insiders or already-authenticated contributors.
06 · Verification

Crowdsourced verification payload.

Run this on the target WordPress host or inside the container/VM that serves the site. Invoke it as bash check_cve_2025_22293.sh /var/www/html and use an account with read access to the WordPress files; root is not required unless your web root is locked down.

noisgate-verify.sh
BASHREAD-ONLYSAFE
#!/usr/bin/env bash
# check_cve_2025_22293.sh
# Detect whether the WordPress Gutentor plugin version is vulnerable to CVE-2025-22293.
# Usage: bash check_cve_2025_22293.sh /path/to/wordpress
# Exit codes: 0=PATCHED, 1=VULNERABLE, 2=UNKNOWN

set -u

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

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

PLUGIN_DIR="$WP_ROOT/wp-content/plugins/gutentor"

if [ ! -d "$PLUGIN_DIR" ]; then
  echo "UNKNOWN: Gutentor plugin directory not found at $PLUGIN_DIR"
  exit 2
fi

extract_version() {
  local file="$1"
  if [ -f "$file" ]; then
    awk -F': ' 'BEGIN{IGNORECASE=1} /^Version:/ {print $2; exit}' "$file" | tr -d '\r'
  fi
}

# Try the main plugin file first, then readme.txt
for candidate in \
  "$PLUGIN_DIR/gutentor.php" \
  "$PLUGIN_DIR/readme.txt"; do
  VERSION="$(extract_version "$candidate")"
  if [ -n "$VERSION" ]; then
    break
  fi
done

if [ -z "$VERSION" ] && command -v wp >/dev/null 2>&1; then
  VERSION="$(wp plugin get gutentor --field=version --path="$WP_ROOT" 2>/dev/null | tr -d '\r')"
fi

if [ -z "$VERSION" ]; then
  echo "UNKNOWN: could not determine Gutentor version"
  exit 2
fi

# Normalize version string to first token that looks like digits.digits
VERSION="$(echo "$VERSION" | sed -E 's/^([^0-9]*)([0-9]+(\.[0-9]+)+).*/\2/')"

if [ -z "$VERSION" ]; then
  echo "UNKNOWN: parsed version is empty"
  exit 2
fi

# version <= 3.4.3 is vulnerable; >= 3.4.4 is patched
if [ "$(printf '%s\n' "$VERSION" "3.4.3" | sort -V | head -n1)" = "$VERSION" ] && [ "$VERSION" != "3.4.4" ]; then
  if [ "$VERSION" = "3.4.3" ] || [ "$(printf '%s\n' "$VERSION" "3.4.3" | sort -V | tail -n1)" = "3.4.3" ]; then
    echo "VULNERABLE: Gutentor version $VERSION (<= 3.4.3)"
    exit 1
  fi
fi

if [ "$(printf '%s\n' "$VERSION" "3.4.4" | sort -V | head -n1)" = "3.4.4" ] || [ "$VERSION" = "3.4.4" ]; then
  echo "PATCHED: Gutentor version $VERSION (>= 3.4.4)"
  exit 0
fi

# Fallback logic
if [ "$(printf '%s\n' "$VERSION" "3.4.3" | sort -V | head -n1)" = "$VERSION" ]; then
  echo "VULNERABLE: Gutentor version $VERSION (<= 3.4.3)"
  exit 1
else
  echo "PATCHED: Gutentor version $VERSION (> 3.4.3)"
  exit 0
fi
07 · Bottom Line

If you remember one thing.

TL;DR
Monday morning, pull a report of every WordPress site with gutentor <= 3.4.3, then split them by whether they allow Contributor/Author accounts or public registration. For this LOW verdict there is no noisgate mitigation SLA and no noisgate remediation SLA — treat it as backlog hygiene, patch on the normal plugin maintenance cadence, and document any internet-facing multi-author sites you choose to accelerate because their attacker precondition is easier to satisfy than a locked-down corporate brochure site.

Sources

  1. WordPress.org plugin page and changelog for Gutentor
  2. Wordfence vulnerability entry for CVE-2025-22293
  3. Patchstack advisory for CVE-2025-22293
  4. NVD entry and change history for CVE-2025-22293
  5. CISA Known Exploited Vulnerabilities Catalog
  6. OpenCVE record reflecting CNA metadata for CVE-2025-22293
  7. WordPress.org support discussion on CVE-2025-22293
  8. FIRST EPSS documentation
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.