The front door is wide open, the key is taped to the doorbell, and burglars are already inside
CVE-2026-14894 is an unauthenticated arbitrary file upload in the Super Forms – Drag & Drop Form Builder WordPress plugin, versions ≤ 6.3.313. The super_submit_form nopriv AJAX handler accepts file uploads without checking authentication, file type, extension, or MIME magic bytes. Worse, the nonce that gates the upload is freely obtainable by any visitor via a second nopriv AJAX action (super_create_nonce). The result: two unauthenticated HTTP requests — one to mint a nonce, one to drop a PHP webshell into /wp-content/uploads/superforms/ — give an attacker full remote code execution on the underlying server. The fix landed in 6.3.314 on July 8, 2026.
The vendor's CRITICAL / 9.8 rating is accurate and, if anything, generous to defenders by not being a flat 10.0 (Patchstack independently scored it 10.0). There is zero friction: no authentication, no user interaction, no exotic configuration, a trivially automatable two-step chain, a public GitHub PoC, and confirmed mass exploitation with 250,000+ blocked attempts logged by Wordfence since July 14. Every unpatched instance reachable from the internet is assumed compromised until proven otherwise.
4 steps from start to impact.
Mint a valid nonce
/wp-admin/admin-ajax.php?action=super_create_nonce. This nopriv endpoint returns a valid sf_nonce and sets a session cookie — no authentication or prior interaction required. Automated scanners hit this endpoint at scale to fingerprint vulnerable installs.- Target runs Super Forms ≤ 6.3.313
- WordPress AJAX endpoint is reachable (default)
action=super_create_nonce from external IPs. Wordfence released a rule on July 14, 2026.Upload PHP webshell
/wp-admin/admin-ajax.php?action=super_submit_form with a crafted data payload containing a Base64-encoded PHP file in a datauristring field. The handler writes the file to /wp-content/uploads/superforms/ without any extension or content-type validation. The observed payload is Mushr00w_upl.php, a compact browser-based uploader for staging additional malware.- Valid sf_nonce from Step 1
- uploads directory writable (default WordPress behavior)
wp-content/uploads/superforms/ directory. Nuclei template available via ProjectDiscovery.Execute arbitrary commands
https://target/wp-content/uploads/superforms/shell.php?c=<command>. The webshell runs under the web server user (typically www-data or apache), providing OS-level command execution. From here the attacker can exfiltrate the wp-config.php database credentials, pivot to the database, dump user data, or move laterally if the host shares credentials or network segments.- PHP execution enabled in uploads directory (common default)
.htaccessor Nginx rules blocking PHP execution inuploads/would stop this step, but this is *not* a WordPress default and most hosts do not enforce it
www-data spawning shells or unexpected outbound connections. GreyNoise and Wordfence have published IOC IPs.Post-exploitation: persistence and lateral movement
wp-config.php. If the WordPress host shares database servers, SSH keys, or is on a flat internal network, lateral movement follows. On managed hosting, blast radius is typically contained to the site; on self-managed VPS/bare-metal, the entire server is compromised.- Successful webshell execution from Step 3
- Containerized or managed WordPress hosting (WP Engine, Kinsta, Pantheon) limits OS-level pivot
- Network segmentation between web tier and internal assets
The supporting signals.
| In-the-Wild Exploitation | Active. Wordfence blocked 250,000+ exploitation attempts since July 14, 2026. Top source IPs: 103.168.147.235 (106K requests), 103.168.146.131 (82K requests). Payload: Mushr00w_upl.php stager. |
|---|---|
| Proof of Concept | Public. shinthink/CVE-2026-14894 on GitHub — fully weaponized two-request exploit script. Nuclei template available via ProjectDiscovery. |
| EPSS Score | 0.03484 — top ~3.5 percentile. Given confirmed mass exploitation this is likely lagging; expect rapid increase. |
| KEV Status | Not listed by CISA as of 2026-09-04. Patchstack independently labels it as *Known to be exploited*. KEV listing is expected given active campaign evidence. |
| CVSS Vector | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H — 9.8. Network-accessible, no privileges, no user interaction, full CIA impact. Patchstack scored 10.0. |
| Affected Versions | Super Forms ≤ 6.3.313 (free and premium editions). Super Forms Bundle premium ≤ 4.9.700 also affected per earlier advisory. |
| Fixed Version | 6.3.314 (released July 8, 2026). Bundle: 4.9.703+. |
| Installed Base | ~13,000 active installations per Patchstack; GitHub PoC claims 600,000 (likely inflated). SecurityWeek reported 300,000 *potentially exposed* sites. |
| Disclosure Timeline | Patched July 8, 2026 → Publicly disclosed July 9, 2026 → Mass exploitation began July 14, 2026. |
| Researcher / Reporter | Patchstack research team. PoC by shinthink (GitHub). |
noisgate verdict.
The single most decisive factor is the zero-friction, unauthenticated remote code execution chain with confirmed mass exploitation in the wild. Two HTTP requests with a public PoC give an attacker a webshell on any reachable unpatched instance — there are no authentication, configuration, or user-interaction prerequisites to narrow the exposure population.
Why this verdict
- Zero authentication friction: The entire chain — nonce minting through shell upload — requires no credentials, no cookies, no user interaction. Every internet-facing instance of Super Forms ≤ 6.3.313 is in the blast radius with no narrowing conditions.
- Active mass exploitation: 250,000+ blocked attempts logged by Wordfence since July 14, 2026, with named IOC IPs and a known payload (
Mushr00w_upl.php). This is not theoretical — campaigns are running *right now*. - Public weaponized PoC: The shinthink GitHub repository provides a turnkey exploit. Nuclei templates exist. The barrier to entry for any script kiddie is near zero.
- Role multiplier: WordPress is deployed across the full role spectrum. (a) *Low-value:* dev/staging blogs — exploit succeeds, blast radius limited to site. (b) *Typical:* corporate marketing sites, customer portals — exploit succeeds, risk of data exfiltration and brand damage. (c) *High-value:* WordPress instances serving as e-commerce (WooCommerce with payment data), customer-facing portals with PII, or sites on shared hosting where
www-datacompromise pivots to neighboring tenants. On self-managed servers, a webshell under the web user can reachwp-config.phpDB credentials, SSH keys, and flat internal networks. While WordPress itself is not a canonical high-value-role component (it is not a DC, hypervisor, or IdP), the *unauthenticated RCE with active exploitation* independently sustains the CRITICAL floor without needing the role multiplier. - No compensating defaults: WordPress does not block PHP execution in
uploads/by default. The nonce mechanism that was supposed to gate the upload is trivially bypassable via the noprivsuper_create_nonceendpoint. There is no built-in defense that stops this chain.
Why not higher?
A 9.8 is already near-ceiling. The only gap to 10.0 is Scope (S:U) — exploitation compromises the vulnerable component's server but does not inherently cross a security boundary to affect other components in a formally scoped sense. Patchstack did score it 10.0, which is defensible, but NIST's S:U is technically correct for a single-server compromise.
Why not lower?
There is no friction to discount. Every prerequisite in the chain is satisfied by default on any reachable WordPress install running the plugin. Authentication: none required. User interaction: none. Configuration dependency: none — the vulnerable AJAX endpoints are registered on plugin activation with no admin toggle. Exposure: the plugin's entire purpose is to serve public-facing forms, so the endpoints are internet-accessible by design. Active exploitation confirms that real-world conditions match the theoretical maximum severity. Downgrading would require evidence that the attack chain fails in a meaningful fraction of deployments, and no such evidence exists.
What to do — in priority order.
- Block AJAX actions at the WAF layer — Add a WAF rule (ModSecurity, Cloudflare, Sucuri, or Wordfence firewall) to block requests to
admin-ajax.phpwithaction=super_submit_formoraction=super_create_noncefrom unauthenticated sessions. Deploy within the noisgate CRITICAL mitigation SLA of ≤ 3 days. Wordfence released a free firewall rule on July 14, 2026. - Disable PHP execution in uploads directory — Add an
.htaccessrule (php_flag engine off) or Nginx directive (location ~* /uploads/.*\.php$ { deny all; }) to thewp-content/uploads/directory. This breaks the chain at Step 3 even if a file is uploaded. Deploy immediately as defense-in-depth. - Deactivate the Super Forms plugin if not business-critical — If the form functionality can be temporarily replaced or taken offline, deactivating the plugin removes the vulnerable AJAX handlers entirely. This is the most reliable mitigation short of patching.
- Scan for existing compromise — Check
/wp-content/uploads/superforms/for any.phpfiles — there should be none. Search web server access logs foraction=super_submit_formfrom external IPs. Look for theMushr00w_upl.phpfilename. If found, treat the host as compromised: rotate all credentials including DB passwords inwp-config.php, review for persistence in theme/plugin files, and rebuild if possible. - Apply the patch (6.3.314) — Update Super Forms to version 6.3.314 or later. This is the definitive remediation. On managed WordPress hosts, check if auto-updates applied it. On self-managed hosts, update via WP CLI:
wp plugin update super-forms. Must be completed within the noisgate CRITICAL remediation SLA of ≤ 90 days, but given active exploitation, treat this as immediate.
- WordPress nonce validation alone — the nonce mechanism is part of the vulnerability; the plugin exposes a nopriv endpoint that mints valid nonces for unauthenticated users, so WordPress's built-in CSRF protection provides zero value here.
- IP-based rate limiting — attackers are distributing attempts across many source IPs (see IOC list); rate limiting per IP will not stop determined exploitation and creates false confidence.
- File upload size limits — the PHP webshell payload is typically under 1 KB; upload size restrictions will not block it.
- Generic WordPress hardening (hiding wp-admin, renaming login) — the vulnerable endpoint is
admin-ajax.phpwhich must remain accessible for legitimate front-end AJAX functionality; hiding or restricting/wp-admin/does not block AJAX requests.
Crowdsourced verification payload.
Run this on each WordPress host (or via SSH across your fleet). Requires read access to the WordPress plugin directory. Example: bash check_cve_2026_14894.sh /var/www/html where the argument is the WordPress root. No elevated privileges needed beyond file read access.
#!/usr/bin/env bash
# CVE-2026-14894 Checker — Super Forms Arbitrary File Upload
# Usage: bash check_cve_2026_14894.sh /path/to/wordpress
set -euo pipefail
WP_ROOT="${1:-/var/www/html}"
PLUGIN_DIR="$WP_ROOT/wp-content/plugins/super-forms"
PLUGIN_FILE="$PLUGIN_DIR/super-forms.php"
UPLOAD_DIR="$WP_ROOT/wp-content/uploads/superforms"
FIXED_VERSION="6.3.314"
if [ ! -d "$PLUGIN_DIR" ]; then
echo "UNKNOWN — Super Forms plugin not found at $PLUGIN_DIR"
exit 2
fi
if [ ! -f "$PLUGIN_FILE" ]; then
echo "UNKNOWN — Cannot read $PLUGIN_FILE"
exit 2
fi
# Extract version from plugin header
VERSION=$(grep -i '^[[:space:]]*\*[[:space:]]*Version:' "$PLUGIN_FILE" | head -1 | sed 's/.*Version:[[:space:]]*//' | tr -d '[:space:]')
if [ -z "$VERSION" ]; then
echo "UNKNOWN — Could not parse version from $PLUGIN_FILE"
exit 2
fi
echo "Detected Super Forms version: $VERSION"
echo "Fixed version: $FIXED_VERSION"
# Version comparison
if [ "$(printf '%s\n' "$FIXED_VERSION" "$VERSION" | sort -V | head -1)" = "$FIXED_VERSION" ]; then
echo "PATCHED — Super Forms $VERSION >= $FIXED_VERSION"
STATUS=0
else
echo "VULNERABLE — Super Forms $VERSION < $FIXED_VERSION (CVE-2026-14894)"
STATUS=1
fi
# Check for IOCs
if [ -d "$UPLOAD_DIR" ]; then
PHP_FILES=$(find "$UPLOAD_DIR" -name '*.php' 2>/dev/null | head -20)
if [ -n "$PHP_FILES" ]; then
echo "WARNING — PHP files found in uploads/superforms/ (possible compromise):"
echo "$PHP_FILES"
STATUS=1
fi
fi
exit $STATUSIf you remember one thing.
/wp-content/uploads/superforms/ for PHP files — if you find any, initiate incident response immediately. (3) Apply the WAF block on super_submit_form and super_create_nonce AJAX actions as an emergency compensating control per the noisgate mitigation SLA of ≤ 3 days for CRITICAL findings. (4) Update to Super Forms 6.3.314 as the definitive fix — given active exploitation, do not wait for the noisgate remediation SLA of ≤ 90 days; patch this week. If you cannot patch immediately, deactivate the plugin. Rotate wp-config.php database credentials on any host where compromise indicators are found.Sources
- NVD – CVE-2026-14894 Detail
- Patchstack – Super Forms Unauthenticated Arbitrary File Upload
- GitHub PoC – shinthink/CVE-2026-14894
- GBHackers – Critical Super Forms Flaw Actively Exploited
- ProjectDiscovery – CVE-2026-14894 Nuclei Template
- SecurityWeek – 300,000 WordPress Sites Exposed
- Malware News – Attackers Actively Exploiting Super Forms
- IONIX Threat Center – CVE-2026-14894
What defenders are saying.
Crowdsourced verification outputs.
Results submitted by users who ran the verification payload against their environment.