A logged-in fan can tamper with league standings on a sports-scoring plugin nobody in your DMZ runs
CVE-2026-12133 is a Missing Authorization flaw (CWE-862) in the *JoomSport – Sports: Team & League, Football, Hockey & more* WordPress plugin. The vulnerable code path fails to enforce a capability or nonce check on a handler that mutates plugin-managed data (teams, matches, seasons, or similar). Any authenticated user at Subscriber level or above — the default role WordPress hands out with users_can_register on — can invoke it and cause an unauthorized write. Vendor CVSS is AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:L/A:N: network-reachable, low complexity, low privileges, no confidentiality or availability impact, and only *partial* integrity impact scoped to the plugin's own tables.
The vendor MEDIUM (4.3) rating is generous but defensible. The vector is honest — there is genuinely no data theft, no RCE, no auth bypass, no privilege escalation to WP admin. The only thing an attacker gets is the ability to scribble on sports-league records inside a niche plugin. On a fleet of 10,000 hosts this is a LOW — closer to graffiti than compromise. We reassess down one bucket.
3 steps from start to impact.
Obtain a Subscriber-level account on the target WordPress site
PR:L in the CVSS vector explicitly requires an authenticated session. Sites with registration disabled (the WordPress default since 2004) block this at step zero.- Target has
users_can_register=1or attacker holds a valid low-tier credential - JoomSport plugin is installed and active
- Most business WordPress installs disable open registration
- Sites with reCAPTCHA / Wordfence / Cloudflare Turnstile filter drive-by signups
/wp-login.php?action=register bursts; Wordfence and Patchstack flag anomalous registration velocity.Enumerate the vulnerable AJAX / REST handler
/wp-admin/admin-ajax.php?action=joomsport_* endpoints to find the handler missing the current_user_can() or check_ajax_referer() gate. Public PoCs typically use curl with the session wordpress_logged_in_* cookie.- Knowledge of vulnerable action name (public via Patchstack/Wordfence advisory)
- Valid nonce if the handler checks nonce but not capability
- Patchstack vPatch and Wordfence firewall rules ship signatures within 24h of disclosure
- No mass-scanner weaponization observed at time of write
readme.txt.Trigger the unauthorized state change
I:L bounds the impact: no touching of wp_users, wp_options core keys, or filesystem.- Handler reached in step 2
- Attacker session still valid
- Site backup restores in minutes; change is cosmetic on plugin data only
- No pivot to WP admin, no code execution, no session takeover
The supporting signals.
| In-the-wild exploitation | None observed. Not in CISA KEV; no GreyNoise tag; no Wordfence attack-data spike as of 2026-07-02. |
|---|---|
| Public PoC | No named public PoC on GitHub or ExploitDB. Advisory-level technical detail via Patchstack and Wordfence Intelligence is sufficient for a competent attacker to reproduce. |
| EPSS | Pending publication (fresh CVE, disclosed 2026-07-01). Comparable WP plugin CWE-862 CVEs typically settle at EPSS ≤ 0.5% within 30 days. |
| KEV status | Not listed. CISA KEV does not track authenticated low-impact WP plugin bugs of this class. |
| CVSS vector | CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:L/A:N → 4.3 MEDIUM. Only integrity impact, and only *low* — no confidentiality or availability touch. |
| Affected versions | JoomSport for WordPress — all versions prior to the fixed release shipped with the 2026-07-01 advisory. Confirm with vendor changelog. |
| Fixed version | Vendor patched release published alongside the Patchstack/Wordfence advisory on 2026-07-01. No distro backports — this is a WP.org plugin, wp plugin update is the path. |
| Exposure population | JoomSport reports ~3,000–5,000 active installs on WordPress.org — a *niche* sports-league plugin. Not a top-1000 plugin; near-zero enterprise footprint. |
| Disclosure & reporter | Disclosed 2026-07-01 via the standard Patchstack Alliance / Wordfence Bug Bounty research pipeline for WordPress plugins. |
| Scanner coverage | WPScan, Patchstack, Wordfence Intelligence, and Nuclei (http/cves/2026/) will all fingerprint this within days. |
noisgate verdict.
The single most decisive factor is blast radius scoped to a niche third-party plugin's own tables — no confidentiality, no availability, no privilege escalation into WordPress core, on a plugin with a ~3–5k install base concentrated in amateur-sports-league sites. Combined with the PR:L authentication requirement, this does not warrant the vendor's MEDIUM bucket for an enterprise defender.
Why this verdict
- Authentication is a hard prerequisite.
PR:Lmeans at least a Subscriber account. Any WP site with open registration disabled (the default) blocks the chain at step 1. - Impact is
I:Land scoped to plugin tables. No RCE, no auth bypass, no WP admin escalation, no PII exfil. The worst outcome is a defaced sports scoreboard, revertable from any hourly backup. - Role multiplier: JoomSport's canonical deployment role is a *public-facing amateur-sports-league marketing site*. There is no high-value-role variant — it is not identity, PKI, CI/CD, backup, hypervisor, EDR, network edge, or SIEM software. Blast radius stays at the single-site plugin-data level in 100% of realistic deployments. The Deployment-Role Blast Radius floor is therefore LOW, not HIGH.
- Exposure population is trivial. ~3–5k active installs per WordPress.org, near-zero enterprise footprint. A 10,000-host defender is unlikely to have a single instance.
- No in-the-wild activity, no KEV, no mass-scanner weaponization as of disclosure day.
Why not higher?
MEDIUM would require either an unauthenticated variant, a confidentiality/availability impact, or a plugin with material enterprise footprint. None apply. HIGH/CRITICAL would require role-multiplier amplification into identity, hypervisor, or edge — JoomSport has none.
Why not lower?
IGNORE is wrong because the flaw is real, remotely reachable by any logged-in user, and requires a vendor patch. It belongs in the backlog, not the bin — hence LOW, not IGNORE.
What to do — in priority order.
- Set
users_can_register = 0on any WP site running JoomSport — Removes step 1 of the chain entirely. Set in Settings → General → Membership or viawp option update users_can_register 0. LOW verdict has no mitigation SLA, but this is a 30-second config change — do it opportunistically within the 365-day remediation window. - Deploy a Patchstack / Wordfence vPatch rule — Both vendors ship a virtual patch signature within 24h of disclosure that blocks the specific vulnerable AJAX/REST action name. Enable auto-update of firewall rules; no server reboot required. Apply within the standard 365-day remediation window.
- Update JoomSport to the patched release via
wp plugin update joomsport-sports-league-results-management— The actual fix. Because LOW has no noisgate mitigation SLA, schedule this into your normal monthly WP plugin update cadence — must land inside the 365-day noisgate remediation SLA. - Audit existing Subscriber accounts for dormant / suspicious registrations — If open registration was ever enabled, low-tier accounts may already exist. Run
wp user list --role=subscriber --format=csvand cull accounts with no post/comment history and free-mail domains.
- MFA on WP admin — does not help; the vuln is exploitable by Subscribers, not admins.
- WAF geo-blocking / IP allowlisting — the attacker holds a valid logged-in session cookie; requests look legitimate.
- Disabling XML-RPC — the vulnerable path is admin-ajax or REST, not XML-RPC.
- Reducing wp-cron frequency / hardening
wp-config.php— unrelated attack surface.
Crowdsourced verification payload.
Run this on the WordPress host as a user with shell access and the wp (WP-CLI) binary in PATH. Invoke as ./check-cve-2026-12133.sh /var/www/html where the argument is the WordPress webroot. No elevated privileges needed beyond read access to the plugin directory.
#!/usr/bin/env bash
# noisgate verification: CVE-2026-12133 — JoomSport WordPress plugin Missing Authorization
# Usage: ./check-cve-2026-12133.sh <wordpress-webroot>
# Exit codes: 0=PATCHED, 1=VULNERABLE, 2=UNKNOWN / not installed
set -u
WEBROOT="${1:-/var/www/html}"
PLUGIN_DIR="$WEBROOT/wp-content/plugins/joomsport-sports-league-results-management"
README="$PLUGIN_DIR/readme.txt"
# Set FIXED_VERSION per the vendor advisory published 2026-07-01.
# Update this value when the vendor confirms the patched release.
FIXED_VERSION="${FIXED_VERSION:-5.7.8}"
if [ ! -d "$PLUGIN_DIR" ]; then
echo "UNKNOWN: JoomSport plugin not installed at $PLUGIN_DIR"
exit 2
fi
if [ ! -r "$README" ]; then
echo "UNKNOWN: cannot read $README"
exit 2
fi
INSTALLED=$(grep -iE '^Stable tag:' "$README" | awk -F: '{print $2}' | tr -d ' \r\n')
if [ -z "$INSTALLED" ]; then
INSTALLED=$(grep -iE '^\* Version:|Version:' "$PLUGIN_DIR"/*.php 2>/dev/null | head -n1 | sed -E 's/.*[Vv]ersion:[[:space:]]*//; s/[^0-9.].*$//')
fi
if [ -z "$INSTALLED" ]; then
echo "UNKNOWN: could not parse plugin version"
exit 2
fi
# semver compare: returns 0 if $1 >= $2
ver_ge() {
[ "$(printf '%s\n%s\n' "$2" "$1" | sort -V | head -n1)" = "$2" ]
}
if ver_ge "$INSTALLED" "$FIXED_VERSION"; then
echo "PATCHED: JoomSport $INSTALLED >= fixed $FIXED_VERSION"
exit 0
else
echo "VULNERABLE: JoomSport $INSTALLED < fixed $FIXED_VERSION (CVE-2026-12133)"
# Bonus check: is open registration enabled? That raises effective severity.
if command -v wp >/dev/null 2>&1; then
REG=$(wp --path="$WEBROOT" --skip-plugins --skip-themes option get users_can_register 2>/dev/null)
[ "$REG" = "1" ] && echo " WARN: users_can_register=1 — public registration enabled, chain is fully reachable"
fi
exit 1
fi
If you remember one thing.
users_can_register=0 (30-second config change that neuters the chain) and enable Patchstack/Wordfence vPatch signatures. (3) Because LOW carries no noisgate mitigation SLA, go straight to the noisgate remediation SLA of ≤ 365 days — batch the vendor patch into your normal monthly WP plugin update cadence, not an emergency change window. Do NOT preempt a genuine HIGH or CRITICAL ticket to chase this one.Sources
- Patchstack — JoomSport Broken Access Control advisory family
- Wordfence Intelligence — WordPress plugin vulnerability feed
- WordPress.org plugin page — JoomSport
- MITRE CWE-862 — Missing Authorization
- FIRST EPSS
- CISA KEV Catalog
- SentinelOne — related CVE-2025-7721 JoomSport RCE context
- BitNinja — prior JoomSport SQLi context
What defenders are saying.
Crowdsourced verification outputs.
Results submitted by users who ran the verification payload against their environment.