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

Cross-Site Request Forgery

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

This is a booby-trapped sticky note on an abandoned admin desk, not a crowbar at the front door

CVE-2025-22325 affects the WordPress plugin autocompleter by nchankov in versions up to and including 1.3.5.2. The flaw is a CSRF on a state-changing admin function with downstream stored XSS potential: if an attacker can get a logged-in WordPress administrator to visit a crafted page or click a malicious link, the browser can submit a forged request that changes plugin settings and stores attacker-controlled script content.

The vendor-style HIGH 7.1 label overstates real enterprise urgency. In practice this chain requires a logged-in admin session, user interaction, and the continued presence of an old plugin that public sources show as removed from the WordPress directory with only about 40 active installs. That is heavy friction, narrow population, and tiny reachable blast radius compared with true internet-facing unauthenticated bugs.

"This is a click-dependent admin CSRF on a nearly extinct plugin, not a fleet-wide fire drill."
02 · The Attack Path

4 steps from start to impact.

STEP 01

Find a site still running autocompleter

The attacker first needs a WordPress site that still has the legacy autocompleter plugin installed at version <= 1.3.5.2. Public telemetry here is weak because this is a plugin-level flaw, not a cleanly fingerprintable edge service; the best population clue is Wordfence's plugin metadata showing only 40 active installs and a removed status.
Conditions required:
  • Target runs WordPress
  • Plugin autocompleter is installed
  • Version is <= 1.3.5.2
Where this breaks in practice:
  • Very small exposed population according to public plugin metadata
  • Removed/unmaintained plugin reduces prevalence in better-managed environments
  • Not easily mass-fingerprinted from internet edge telemetry
Detection/coverage: Most network scanners will not identify this reliably. Asset/SBOM, WordPress inventory tooling, or filesystem inspection is the practical detection path.
STEP 02

Lure a logged-in administrator

Weaponization is trivial: a generic HTML form or JavaScript auto-submit page can forge the request. But the attacker still needs a currently authenticated WordPress administrator to load that page while their browser carries valid cookies to /wp-admin/.
Conditions required:
  • Administrator is logged in to the vulnerable site
  • Administrator visits attacker-controlled content or clicks a crafted link
  • Browser can reach the admin endpoint
Where this breaks in practice:
  • Requires social engineering and timing
  • Requires admin-level victim, not any random visitor
  • Modern email security, browser isolation, and user awareness often break this step
Detection/coverage: Email/web gateway telemetry, browser isolation logs, and unusual admin-originated POSTs to plugin settings pages can sometimes expose the lure stage.
STEP 03

Submit forged settings update

The forged request abuses missing or incorrect nonce validation in the plugin's admin function. The attacker can make the admin's browser submit a settings change that stores attacker-controlled content, turning a nominal CSRF into a persistent script injection foothold.
Conditions required:
  • The targeted plugin action lacks effective nonce/origin validation
  • The admin account has permission to modify plugin settings
Where this breaks in practice:
  • Only reachable after successful admin interaction
  • Scope is constrained to what the vulnerable settings function actually writes
  • Reverse proxies, custom admin protections, or security plugins may interfere with the request
Detection/coverage: Application logs may show settings changes from a legitimate admin session. Signature-based vuln scanners may flag the CVE, but verification usually needs plugin-version inspection plus code/path review.
STEP 04

Trigger stored XSS impact

If malicious script lands in a rendered setting or output path, the payload executes later in the browser context of admins or visitors who hit the affected page. Typical follow-on abuse is session theft, nonce theft, forced admin actions, content defacement, or pivoting to broader WordPress compromise.
Conditions required:
  • Injected payload is rendered somewhere reachable
  • Victims browse the affected admin or front-end page
  • Browser-side protections do not neutralize the payload
Where this breaks in practice:
  • Impact depends on where the plugin actually renders stored data
  • CSP, output encoding, or sanitization elsewhere can reduce payload reliability
  • Blast radius is one site, not a shared appliance or domain-wide service
Detection/coverage: CSP violation reports, DOM/XSS detections, suspicious JavaScript in plugin settings or database content, and anomalous admin actions after page views are the best hunting points.
03 · Intelligence Metadata

The supporting signals.

In-the-wild statusNo evidence found that CVE-2025-22325 is in CISA KEV, and I found no credible reporting of active exploitation campaigns against this specific CVE.
Public exploit / PoCNo dedicated public exploit repo was found in primary-source review. That said, weaponization is trivial because a CSRF PoC is just a crafted HTML form or auto-submitting page.
EPSS0.00185 from your intel block, which is very low and consistent with the weak real-world exploitability of this chain.
KEV statusNot KEV-listed as of the CISA KEV catalog page reviewed.
CVSS baselineThere is source disagreement: Patchstack shows 7.1 / HIGH with CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:L, while Wordfence shows 6.1 / MEDIUM with availability impact A:N. Either way, the key operational read is the same: user interaction is required and the attacker needs an admin victim.
Affected versionsautocompleter <= 1.3.5.2.
Fixed versionNo official fix available in the public advisories reviewed; Wordfence marks the issue unpatched and the plugin record as removed.
Exposure / prevalenceWordfence's plugin metadata lists only 40 active installs and 18,172 total downloads, which is extremely small population for an enterprise prioritization context.
Disclosure timingPublic advisory pages show January 3, 2025 on Wordfence/Patchstack. Your intel block says January 7, 2025; that likely reflects downstream CVE/NVD publication timing rather than the first public WordPress-advisory date.
Reporter / researcherSOPROBRO is credited by both Wordfence and Patchstack.
04 · The Call

noisgate verdict.

Final Verdict
DOWNGRADED to LOW (3.2/10)

The decisive factor is attack-path friction: exploitation requires a logged-in administrator to be socially engineered into firing the request. That turns a scary-sounding CSRF-to-XSS chain into a narrow, post-browse opportunity on a plugin with tiny real-world deployment.

HIGH Downgrade driven by admin-interaction requirement
HIGH Very small affected population based on public plugin metadata
MEDIUM Exact downstream XSS blast radius on each site

Why this verdict

  • Baseline starts at vendor 7.1 HIGH, then drops hard because exploitation requires a logged-in admin to click or load attacker-controlled content. That is not unauthenticated remote compromise; it is a socially engineered browser-side action.
  • Population is tiny. Wordfence shows roughly 40 active installs, which is microscopic compared with vulnerabilities that matter at fleet scale.
  • This prerequisite implies prior opportunity, not initial access. The attacker either already has a path to influence an administrator or must win a phishing/social-engineering step first, and modern email security/browser controls should catch a meaningful share of those attempts.
  • Blast radius is local to one WordPress site. There is no evidence this becomes broad infrastructure takeover absent further site-specific chaining.
  • No KEV listing, no public campaign evidence, and a very low EPSS all point the same way: low probability, low prioritization pressure.

Why not higher?

It is not higher because this is not a clean internet-exposed pre-auth exploit. The attacker must line up a rare plugin, an authenticated admin session, and successful user interaction before any impact occurs. That is multiple compounding friction points, and each one should drag the score down.

Why not lower?

It is not IGNORE because, if the plugin is present, the weakness is real and there is no public patch. A successful hit can still land stored JavaScript in a WordPress site and create credential theft or admin-action abuse. That deserves cleanup, just not panic.

05 · Compensating Control

What to do — in priority order.

  1. Remove the plugin — If autocompleter is installed anywhere, remove or replace it because public sources show no official fix. For a LOW verdict there is no formal noisgate mitigation SLA, but this is still sensible backlog hygiene because leaving an unpatched, removed plugin in production buys you nothing.
  2. Restrict admin exposure — Put wp-admin behind VPN, IP allowlists, or SSO access controls where possible. This reduces the chance that a phished or casually browsing administrator can be used as the CSRF trigger.
  3. Harden browser-side script execution — Use a sane CSP and security headers to reduce stored-XSS reliability if a payload lands. This is not a full fix, but it meaningfully cuts follow-on abuse on public-facing sites.
  4. Watch for suspicious settings changes — Monitor WordPress admin actions, plugin-setting updates, and unexpected JavaScript in stored options/content. Do this during normal content-integrity review cycles; there is no urgent mitigation deadline for a LOW reassessment.
What doesn't work
  • A generic perimeter vulnerability scan alone does not solve this, because many scanners will miss a low-prevalence WordPress plugin installed behind a normal web app.
  • MFA on WordPress admin helps account takeover, but it does not stop CSRF if the admin is already logged in and tricked into loading the malicious page.
  • Relying only on WAF signatures is weak here; CSRF requests can look like legitimate admin traffic from a valid browser session.
06 · Verification

Crowdsourced verification payload.

Run this on the target WordPress host or on a mounted web root from an auditor workstation. Invoke it as bash verify-cve-2025-22325.sh /var/www/html and use an account that can read the WordPress plugin directory; root is not required unless file permissions are locked down.

noisgate-verify.sh
BASHREAD-ONLYSAFE
#!/usr/bin/env bash
# verify-cve-2025-22325.sh
# Detects whether WordPress plugin 'autocompleter' is installed and vulnerable to CVE-2025-22325.
# Usage: bash verify-cve-2025-22325.sh /path/to/wordpress
# Exit codes:
#   0 = PATCHED / not present
#   1 = VULNERABLE
#   2 = UNKNOWN / inspection error

set -u

TARGET_ROOT="${1:-}"
if [[ -z "$TARGET_ROOT" ]]; then
  echo "UNKNOWN: missing WordPress root path argument"
  exit 2
fi

PLUGIN_DIR="$TARGET_ROOT/wp-content/plugins/autocompleter"
if [[ ! -d "$PLUGIN_DIR" ]]; then
  echo "PATCHED: plugin 'autocompleter' not present"
  exit 0
fi

find_main_file() {
  local dir="$1"
  local f
  for f in "$dir"/*.php; do
    [[ -f "$f" ]] || continue
    if grep -qiE '^\s*Plugin Name\s*:' "$f"; then
      echo "$f"
      return 0
    fi
  done
  return 1
}

MAIN_FILE="$(find_main_file "$PLUGIN_DIR")"
if [[ -z "${MAIN_FILE:-}" || ! -f "$MAIN_FILE" ]]; then
  echo "UNKNOWN: plugin directory exists but main plugin file could not be identified"
  exit 2
fi

VERSION_LINE="$(grep -iE '^\s*Version\s*:' "$MAIN_FILE" | head -n1 || true)"
VERSION="$(echo "$VERSION_LINE" | sed -E 's/^\s*Version\s*:\s*//I' | tr -d '\r' | xargs)"

if [[ -z "$VERSION" ]]; then
  echo "UNKNOWN: could not parse plugin version from $MAIN_FILE"
  exit 2
fi

# Returns 0 if $1 <= $2 using sort -V semantics.
version_le() {
  local a="$1" b="$2"
  [[ "$a" == "$b" ]] && return 0
  local first
  first="$(printf '%s\n%s\n' "$a" "$b" | sort -V | head -n1)"
  [[ "$first" == "$a" ]]
}

AFFECTED_MAX="1.3.5.2"

if version_le "$VERSION" "$AFFECTED_MAX"; then
  echo "VULNERABLE: autocompleter version $VERSION found at $PLUGIN_DIR (affected: <= $AFFECTED_MAX)"
  exit 1
else
  echo "PATCHED: autocompleter version $VERSION is newer than $AFFECTED_MAX"
  exit 0
fi
07 · Bottom Line

If you remember one thing.

TL;DR
Monday morning: query your WordPress inventory for plugin slug autocompleter and treat any hits as cleanup work, not emergency response. For a LOW reassessment there is no noisgate mitigation SLA and noisgate remediation SLA says treat it as backlog hygiene; because there is no vendor fix, the practical remediation is to remove or replace the plugin during the next normal maintenance cycle and verify that no stored script payloads were left behind.

Sources

  1. Wordfence vulnerability entry for CVE-2025-22325
  2. Wordfence plugin metadata for Autocompleter
  3. Patchstack advisory for Autocompleter <= 1.3.5.2
  4. CISA Known Exploited Vulnerabilities catalog
  5. FIRST EPSS API documentation
  6. FIRST EPSS overview
  7. Wordfence CVE database overview showing removed status and active installs
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.