← Back to Feed CACHED · 2026-07-13 15:09:35 · CACHE_KEY CVE-2026-5721
CVE-2026-5721 · CWE-79 · Disclosed 2026-04-20

The wpDataTables – WordPress Data Table

ASSESSED — NOISGATE V0.5
Vendor
Reassessed
Verdict:
Do you agree?
01 · The Real Story

A crooked spreadsheet cell that only bites when the boss opens the ledger

CVE-2026-5721 is a stored cross-site scripting flaw in the wpDataTables plugin for WordPress — the plugin used to render dynamic data tables and charts on tens of thousands of WordPress sites. An attacker who can reach the table-editing surface can inject JavaScript that gets persisted in table cell/config data and executed later in another user's browser session when the table is rendered or previewed. The vector is AV:N/AC:H/PR:N/UI:R/S:C/C:L/I:L/A:N — network reachable, high attack complexity, no privileges required, but user interaction is required and the impact is a *scope-changed* low confidentiality and integrity hit (typical of DOM/session-context XSS).

The vendor MEDIUM (4.7) rating is honest. This is not an unauth RCE, it is not an admin takeover primitive on its own, and the AC:H reflects real preconditions: the attacker needs a plausible path to inject into a table configuration, and a privileged user has to render or interact with the poisoned view. Stored XSS in a widely-deployed plugin still deserves attention because a triggered payload runs in the admin's browser context and can pivot to nonce theft or account creation, but the base severity is not being under-called.

"Stored XSS in wpDataTables admin plugin — requires victim interaction and high complexity. Vendor MEDIUM stands."
02 · The Attack Path

4 steps from start to impact.

STEP 01

Reach a wpDataTables input surface

Attacker identifies a WordPress site running a vulnerable wpDataTables build and finds a table-editing endpoint that accepts user-controlled input into a cell, column definition, or chart config. In some deployments this may be exposed via front-end submission forms (Gravity Forms / wpDataTables front-end editing add-on); in others it requires at least a contributor/editor role.
Conditions required:
  • Vulnerable wpDataTables version installed
  • Editable table or form-fed table configured on target site
Where this breaks in practice:
  • Most wpDataTables installs restrict table editing to admin/editor roles by default
  • Front-end editing is an opt-in add-on, not default
  • WAF rules for classic XSS payloads (<script>, onerror=) catch naive attempts
Detection/coverage: Wordfence and Patchstack signatures for the specific injection sink; generic XSS payload detection by WAFs (Cloudflare Managed Rules, AWS WAF Core).
STEP 02

Persist payload in table data

Attacker submits a crafted string containing JavaScript (e.g. an <img src=x onerror=fetch(...)> or an SVG event-handler payload) into the vulnerable field. The plugin stores it in the WordPress database (wp_options or a custom wpDataTables table) without adequate output-side encoding.
Conditions required:
  • Successful write to a persisted field
  • No server-side sanitization of the specific field
Where this breaks in practice:
  • Recent WordPress wp_kses_post filters strip many event handlers
  • Some sinks pass through KSES on save — CVE only lives in the sinks that don't
Detection/coverage: Audit-log plugins (WP Activity Log) will record the edit; database SELECT for <script, onerror, onload patterns in wpDataTables tables.
STEP 03

Victim triggers rendering

A logged-in administrator, editor, or subscriber navigates to the page or admin screen where the poisoned table renders. S:C means the script executes in the WordPress admin origin, granting access to admin cookies / nonces of the current session.
Conditions required:
  • Privileged user visits the affected view
  • Browser executes the injected script (no strict CSP)
Where this breaks in practice:
  • Admin-only tables limit the victim pool to actual admins visiting a specific screen
  • Modern browsers with strict Content-Security-Policy on the admin area (rare on WP) would block inline execution
Detection/coverage: Browser-side runtime XSS detection is minimal; server-side WAFs cannot see rendered output.
STEP 04

Session hijack / privilege abuse

Payload uses the victim admin's authenticated context to exfiltrate the WP REST nonce, create a new administrator via /wp-json/wp/v2/users, install a malicious plugin, or drop a webshell. This is where a MEDIUM XSS becomes an operational admin takeover on that single site.
Conditions required:
  • Victim is an administrator
  • No 2FA challenge on privileged mutations
Where this breaks in practice:
  • Sites with 2FA on user-create actions (rare), or plugin-signature enforcement, blunt the chain
  • Wordfence / MalCare will alert on unexpected admin creation or plugin install
Detection/coverage: Wordfence, Sucuri, Jetpack Scan flag new admin accounts and unexpected plugin installs.
03 · Intelligence Metadata

The supporting signals.

In-the-wild statusNo confirmed exploitation as of 2026-07-13. Not observed in Wordfence attack telemetry campaigns.
Public PoCTypical Wordfence/Patchstack advisory patterns — technical detail withheld pending patch adoption; no public weaponized PoC on GitHub as of this writing.
EPSS0.00272 (~0.3%) — bottom half of the distribution, consistent with a stored XSS requiring authenticated context and UI.
KEVNot listed. CISA has not added CVE-2026-5721.
CVSS vectorCVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:C/C:L/I:L/A:N — network, high complexity, no privs, user interaction required, scope changed, low C/I, no A.
Affected versionswpDataTables — Data Tables, Dynamic Tables & Table Charts (Lite/Free plugin family), versions up to and including the last vulnerable build noted in the Wordfence/Patchstack advisory.
Fixed versionUpgrade to the vendor-patched release (see Wordfence Intelligence and the wpDataTables changelog for the exact fixed build).
Exposure datawpDataTables is on ~70k+ WordPress sites per wpdatatables.com marketing figures; WPScan/Wordfence enumerate several tens of thousands of installs. Only a subset expose editable table forms to unauthenticated users.
Disclosed2026-04-20
ReporterTypically credited via Wordfence Bug Bounty or Patchstack Alliance researchers — see advisory for named credit.
04 · The Call

noisgate verdict.

Final Verdict
= UNCHANGED to MEDIUM (4.5/10)

The vendor MEDIUM rating is accurate: the single most decisive factor is that exploitation requires both a plausible injection surface (typically authenticated) AND victim interaction by a privileged user, while impact is scope-changed low C/I rather than direct RCE or admin takeover. The blast radius is bounded to the individual WordPress site — wpDataTables is not a fleet-scale identity/hypervisor/backup role component.

HIGH Severity assessment (stored XSS with UI:R)
MEDIUM Exact injection sink and prerequisite roles (advisory details limited)
HIGH No active exploitation observed

Why this verdict

  • Vendor severity matches reality: AC:H and UI:R are load-bearing — the attacker cannot fire this at scale against unauthenticated visitors and expect reliable execution against an admin.
  • Role multiplier — bounded blast radius: wpDataTables runs on WordPress content sites; even worst-case chained-to-admin-takeover impact is single-site compromise, not fleet, identity, or supply-chain scale. This does NOT invoke a HIGH floor.
  • No KEV, low EPSS (0.00272), no observed campaigns — threat pressure is low.
  • Downgrade pressure from AC:H: most enterprise WordPress installs restrict wpDataTables editing to trusted roles, further shrinking the reachable population.

Why not higher?

Not HIGH because there is no unauthenticated primitive, impact is C:L/I:L not full compromise, user interaction from a privileged user is required, and wpDataTables is not a high-value-role component (not an IdP, hypervisor, PAM, backup, edge appliance, or kernel agent). No KEV listing and negligible EPSS reinforce that this is not near-term operationally urgent.

Why not lower?

Not LOW because stored XSS in a WordPress plugin used by an administrator can be chained to full site takeover (add-admin, install-plugin, drop-webshell) via nonce theft, and the plugin has a non-trivial install base. A defender who ignores it entirely accepts real single-site takeover risk on WordPress properties running the plugin.

05 · Compensating Control

What to do — in priority order.

  1. Upgrade wpDataTables to the patched release — Vendor patch is the definitive fix. No noisgate mitigation SLA for MEDIUM — schedule within the 365-day noisgate remediation SLA, prioritizing internet-facing WordPress properties first.
  2. Restrict wpDataTables edit capability to admin role only — Confirm manage_options (or the plugin's specific capability) is not granted to Contributor/Author roles. Removes the low-privilege injection path pending patch.
  3. Deploy Wordfence or Patchstack virtual patch rules — Both vendors publish signature-based virtual patches for wpDataTables XSS shortly after disclosure — enable auto-update of firewall rules on managed WP fleets.
  4. Enforce 2FA on all admin and editor accounts — Blunts the chain from XSS-in-admin-browser to add-admin by requiring a fresh 2FA challenge on privileged operations (with plugins like WP 2FA / miniOrange).
  5. Audit existing wpDataTables data for injected payloads — Query the plugin's tables for <script, onerror=, onload=, javascript: and <svg; treat any hit on a production site as an incident.
What doesn't work
  • Cloudflare 'Bot Fight Mode' alone — this is a stored XSS, not a bot problem; the payload is submitted once and lives in the DB.
  • httpOnly cookies — do not stop the payload from calling the REST API in the admin's session; the browser attaches auth automatically.
  • Rate limiting the login endpoint — irrelevant, attacker does not need to brute credentials.
  • Perimeter IPS on inbound traffic — cannot see the rendered admin-side execution, and encoded payloads bypass most generic XSS signatures.
06 · Verification

Crowdsourced verification payload.

Run on the WordPress host as a user with read access to the WP install directory and DB credentials in wp-config.php. Requires wp-cli installed. Invoke as: ./check-cve-2026-5721.sh /var/www/html. Exits 0 for PATCHED, 1 for VULNERABLE, 2 for UNKNOWN.

noisgate-verify.sh
BASHREAD-ONLYSAFE
#!/usr/bin/env bash
# check-cve-2026-5721.sh — detect vulnerable wpDataTables plugin
# Usage: ./check-cve-2026-5721.sh <wp-root>
set -u
WP_ROOT="${1:-/var/www/html}"
FIXED_VERSION="6.6.1"  # replace with vendor-confirmed fixed build

if [ ! -d "$WP_ROOT" ]; then
  echo "UNKNOWN: WordPress root $WP_ROOT not found"
  exit 2
fi

if ! command -v wp >/dev/null 2>&1; then
  echo "UNKNOWN: wp-cli not installed"
  exit 2
fi

INSTALLED=$(wp --path="$WP_ROOT" --allow-root plugin get wpdatatables --field=version 2>/dev/null || true)

if [ -z "$INSTALLED" ]; then
  echo "PATCHED: wpDataTables not installed"
  exit 0
fi

# semver compare
lowest=$(printf '%s\n%s\n' "$INSTALLED" "$FIXED_VERSION" | sort -V | head -n1)
if [ "$lowest" = "$FIXED_VERSION" ] && [ "$INSTALLED" != "$FIXED_VERSION" ]; then
  echo "PATCHED: wpDataTables $INSTALLED >= $FIXED_VERSION"
  exit 0
fi
if [ "$INSTALLED" = "$FIXED_VERSION" ]; then
  echo "PATCHED: wpDataTables $INSTALLED == fixed"
  exit 0
fi

echo "VULNERABLE: wpDataTables $INSTALLED < $FIXED_VERSION (CVE-2026-5721)"
exit 1
07 · Bottom Line

If you remember one thing.

TL;DR
This is a real but not urgent MEDIUM. Monday: inventory WordPress fleets for wpDataTables (wp-cli plugin list | grep wpdatatables), then triage internet-facing sites first. Per the noisgate mitigation SLA for MEDIUM there is no mitigation SLA — go straight to the noisgate remediation SLA of ≤ 365 days for the vendor patch, but pragmatically ship the patched build to production WordPress properties within the next monthly maintenance window. In the interim, verify wpDataTables editing capability is restricted to admin role, enable Wordfence/Patchstack virtual patch rules, and enforce 2FA on all admin accounts. If you find injected payloads in existing table data during your audit, escalate to an incident — that indicates prior exploitation.

Sources

  1. NVD — CVE-2026-5721
  2. Wordfence Threat Intelligence Vulnerability Database
  3. Patchstack Vulnerability Database — wpDataTables
  4. wpDataTables official changelog
  5. CWE-79: Improper Neutralization of Input During Web Page Generation
  6. FIRST EPSS model
  7. CISA KEV Catalog
  8. WPScan Vulnerability Database
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.