This is a forged sticky note slipped under an admin’s door, not a skeleton key
CVE-2025-22300 is a CSRF flaw in the WordPress plugin PixelYourSite – Your smart PIXEL (TAG) Manager. Affected versions are <= 10.0.1.2, and the fix landed in 10.0.2. Third-party analysis attributes the issue to missing or incorrect nonce validation in the plugin's init() path, which means an attacker can craft a request that changes plugin settings if a privileged WordPress user submits it while authenticated.
The vendor's MEDIUM 5.4 score is defensible in a vacuum, but for enterprise patch triage it overstates urgency. This is not unauthenticated internet-to-RCE; it is user-interaction-required admin-session riding against a single plugin's settings surface. Broad install base matters, but the practical exploit chain still depends on luring a logged-in admin and only yields configuration tampering, so this drops into LOW for most 10,000-host programs.
4 steps from start to impact.
Find a site running the plugin
wpscan or browser-source inspection. This is not a network-edge service exploit; the plugin usually rides behind the normal web application.- Target runs WordPress with PixelYourSite installed
- Attacker can reach the public site or otherwise profile it
- Plugin presence is not always cleanly fingerprintable from the internet
- Internet scanners like Shodan/Censys do not reliably expose plugin-version precision for WordPress plugins
Lure an authenticated admin
Burp Suite or raw curl is enough to build the request.- A site administrator or equivalent privileged user is authenticated to WordPress
- The attacker can deliver a link, page, or embedded content to that user
- This is post-delivery social engineering, not direct exploitation
- Email security, browser isolation, user caution, and short admin sessions all reduce success
- Many enterprises separate admin workstations from general browsing
Replay a forged settings request
- The forged request hits the vulnerable settings-changing endpoint or handler
- The victim session is still valid when the request is sent
- Any additional capability checks or workflow constraints can narrow what actually changes
- Admin nonce hardening elsewhere in the platform can limit adjacent abuse, even if this handler is weak
Modify plugin behavior
- The targeted setting is reachable through the vulnerable request
- The admin account used has permission to alter plugin options
- Impact stays bounded to the plugin's option space, not arbitrary code execution
- Modern configuration monitoring or content-change alerts may expose unexpected admin changes quickly
- A network firewall does not meaningfully help because the malicious request rides over the victim's legitimate browser session to the normal website endpoint.
- A signature-only WAF is weak here because the forged request can look like an ordinary authenticated admin form submission.
- MFA at login is good baseline hygiene but does not stop CSRF once the administrator is already logged in and the browser will send the session cookie.
The supporting signals.
| In-the-wild status | No public evidence of active exploitation found. OpenCVE surfaces CISA ADP SSVC metadata with Exploitation: none and Automatable: no, which matches the low-utility CSRF profile. |
|---|---|
| KEV status | Not KEV-listed per the user-supplied intel block; this also aligns with the absence of exploitation indicators in the public record and the non-automatable ADP assessment. |
| PoC availability | No widely indexed public PoC/exploit repo found in common public sources during review. This is easy to reproduce with a handcrafted HTML form or Burp Suite, but there is no notable mass-exploitation tooling signal. |
| EPSS | 0.0009 from the user-supplied intel block — effectively background noise. Public mirrors place it in the low-percentile range as well, reinforcing that attackers are not lining up for this bug. |
| CVSS vector | CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:L/A:L — the decisive term is UI:R. No user interaction, no bug. |
| Affected versions | All versions through 10.0.1.2 are affected. Patchstack, Wordfence, and the CNA record all agree on that range. |
| Fixed version | 10.0.2 is the first fixed release. The WordPress.org changelog dated 2024-12-04 notes Security enhancements, which lines up with the advisory's patched version. |
| Exposure population | The plugin currently shows 500,000+ active installations on WordPress.org, so the population is large. But exposure is application-level and admin-workflow dependent, not a directly scannable edge service. |
| Root cause / impact | Third-party analysis attributes the flaw to missing or incorrect nonce validation in init(), allowing settings modification via forged request if an attacker can trick a logged-in administrator. |
| Disclosure / credit | CVE published 2025-01-07 in NVD/CVE records; Patchstack lists report date 2024-11-27 and credits Dhabaleshwar Das. |
Sources.
Why this verdict
- Downgrade for attacker position: despite
PR:Nin CVSS, the real-world chain still needs an already-authenticated admin session, which implies the attacker must first reach a privileged user rather than the server itself. - Downgrade for population actually reachable by the exploit step: 500k+ installs is broad, but only the subset where admins can be lured while logged in is exploitable; that is a much narrower operational population than the install count suggests.
- Downgrade for tool friction: modern email security, browser isolation, short-lived admin sessions, and separate admin workstations often break the lure step before the forged request lands.
- Keep above IGNORE because blast radius is still real: Pixel/analytics settings can affect tracking integrity, privacy posture, and business reporting, so this is not a fake bug or a harmless edge case.
Why not higher?
There is no evidence here of unauthenticated code execution, privilege escalation on the server, or a direct internet-reachable edge exploit. The exploit chain is fragile because it depends on user interaction by a privileged admin and only changes plugin settings, so this does not belong in MEDIUM-or-higher Monday-morning fire-drill territory.
Why not lower?
This is still a legitimate, patched vulnerability in a plugin with a very large deployment base. If the writable options are abused, you can lose integrity in analytics and compliance-relevant tracking behavior, so documenting and eventually fixing it is warranted rather than dismissing it outright.
Crowdsourced verification payload.
Run this on the WordPress host or inside the container/VM that serves the site. Invoke it as bash check-pixelyoursite-cve-2025-22300.sh /var/www/html or point it directly at the plugin directory; it needs read access to the WordPress files only, not root.
#!/usr/bin/env bash
# check-pixelyoursite-cve-2025-22300.sh
# Detect whether the installed PixelYourSite plugin version is affected by CVE-2025-22300.
# Usage:
# bash check-pixelyoursite-cve-2025-22300.sh /var/www/html
# bash check-pixelyoursite-cve-2025-22300.sh /var/www/html/wp-content/plugins/pixelyoursite
# Exit codes:
# 0 = PATCHED
# 1 = VULNERABLE
# 2 = UNKNOWN
set -u
TARGET="${1:-}"
if [ -z "$TARGET" ]; then
echo "UNKNOWN - provide WordPress root or plugin directory path"
exit 2
fi
PLUGIN_DIR=""
MAIN_FILE=""
if [ -d "$TARGET/wp-content/plugins/pixelyoursite" ]; then
PLUGIN_DIR="$TARGET/wp-content/plugins/pixelyoursite"
elif [ -d "$TARGET" ] && [ -f "$TARGET/pixelyoursite.php" ]; then
PLUGIN_DIR="$TARGET"
else
echo "UNKNOWN - PixelYourSite plugin directory not found at target path"
exit 2
fi
MAIN_FILE="$PLUGIN_DIR/pixelyoursite.php"
if [ ! -r "$MAIN_FILE" ]; then
echo "UNKNOWN - cannot read $MAIN_FILE"
exit 2
fi
VERSION=$(awk -F': ' 'BEGIN{IGNORECASE=1} /^Version:[[:space:]]*/ {gsub(/\r/,"",$2); print $2; exit}' "$MAIN_FILE")
if [ -z "$VERSION" ]; then
VERSION=$(grep -Eoi "Version:[[:space:]]*[0-9]+(\.[0-9]+)+" "$MAIN_FILE" | head -n1 | sed -E 's/Version:[[:space:]]*//I')
fi
if [ -z "$VERSION" ]; then
echo "UNKNOWN - could not determine installed plugin version"
exit 2
fi
verlte() {
# returns 0 if $1 <= $2
[ "$(printf '%s\n%s\n' "$1" "$2" | sort -V | head -n1)" = "$1" ]
}
if verlte "$VERSION" "10.0.1.2"; then
echo "VULNERABLE - PixelYourSite version $VERSION (affected: <= 10.0.1.2, fixed: 10.0.2+)"
exit 1
fi
if verlte "10.0.2" "$VERSION"; then
echo "PATCHED - PixelYourSite version $VERSION"
exit 0
fi
echo "UNKNOWN - detected version $VERSION but comparison was inconclusive"
exit 2