← Back to Feed CACHED · 2026-09-03 01:40:59 · CACHE_KEY CVE-2026-19949
CVE-2026-19949 · CWE-89 · Disclosed 2026-08-25

The All-in-One WP Migration and Backup plugin for WordPress is vulnerable to SQL Injection via archive…

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

A landmine buried in a trackback that only detonates if someone decides to move the house

CVE-2026-19949 is a second-order SQL injection in the All-in-One WP Migration and Backup plugin for WordPress, affecting all versions through 7.109 (fixed in 7.110, released August 20, 2026). The flaw lies in incorrect parsing of escaped backslashes and quotation marks during archive restoration. An unauthenticated attacker plants a crafted payload via WordPress trackbacks. That payload sits dormant until an administrator performs an export-then-import cycle — a core function of this migration plugin. When the restore runs, the injected SQL leaks the plugin's ai1wm_secret_key into a public comment. The attacker reads the key, then imports a malicious .wpress archive containing executable PHP, achieving full site takeover. The plugin has over 5 million active installations, and as of early September 2026, only ~35% have updated — leaving an estimated 3.25 million sites still running vulnerable versions.

The vendor score of 8.8 HIGH overstates the real-world risk. The CVSS vector (AV:N/AC:L/PR:L/UI:N) treats this as a straightforward authenticated network attack, but the actual chain is a *second-order* injection that requires (1) trackbacks/pingbacks to be enabled, (2) the admin to perform a migration or backup-restore cycle, and (3) the attacker to monitor public comments for the leaked key and then act on it before it's noticed. Each of these conditions introduces timing friction that CVSS cannot capture. Patchstack independently categorized this as 'low priority, unlikely to be exploited', and the EPSS score of 0.00538 sits well below the 95th percentile. There is no KEV listing and no confirmed in-the-wild exploitation. The 8.8 is a theoretical ceiling; the operational reality is a MEDIUM.

"Second-order SQLi needs an admin migration event to fire — most sites never trigger it."
02 · The Attack Path

5 steps from start to impact.

STEP 01

Plant payload via trackback

The attacker sends a crafted trackback or pingback to the target WordPress site containing SQL injection payload data embedded in the trackback content fields. WordPress stores this data in the wp_comments table. No authentication is required — trackbacks are an open XML-RPC feature enabled by default in many WordPress installations.
Conditions required:
  • Target site has trackbacks or pingbacks enabled
  • XML-RPC endpoint (/xmlrpc.php) is reachable
Where this breaks in practice:
  • Many hardened WordPress sites disable XML-RPC entirely via plugin (Wordfence, iThemes) or .htaccess rule
  • Some WAFs (Cloudflare, Sucuri) block or challenge XML-RPC traffic by default
  • WordPress 6.x+ shows declining trackback usage; some hosts disable it at the platform level
Detection/coverage: WAF rules for XML-RPC abuse; Wordfence firewall logs trackback attempts; ModSecurity CRS rules for SQL metacharacters in XML-RPC payloads
STEP 02

Wait for admin export+import cycle

The injected payload remains dormant in the database. It only executes when an administrator uses All-in-One WP Migration to export the site and then restore (import) the archive. During the restore, the plugin rewrites database content with flawed parsing of backslashes and quotes, activating the second-order SQL injection.
Conditions required:
  • Plugin must be version ≤ 7.109
  • Admin must perform a backup export followed by an import/restore
Where this breaks in practice:
  • Migration events are infrequent — most sites migrate during initial setup, hosting changes, or staging refreshes, not on a daily schedule
  • The attacker has no control over *when* this happens — exploitation is non-deterministic
  • Sites using external backup solutions (UpdraftPlus, host-level snapshots) may never trigger this plugin's restore path
STEP 03

Secret key leaks to public comment

When the second-order SQLi fires during restore, the injected query extracts the ai1wm_secret_key from the wp_options table and writes it into a publicly visible comment on the site. The attacker monitors the site's comments (or RSS feed) for the leaked key value.
Conditions required:
  • Comments must be publicly visible on the site
  • Attacker must be monitoring the site for the leaked value
Where this breaks in practice:
  • Sites with comment moderation enabled will hold the leaked key in a moderation queue, invisible to the attacker
  • Sites using Disqus or other external comment systems won't surface the wp_comments data publicly
  • Anti-spam plugins (Akismet) may filter or quarantine the generated comment
Detection/coverage: Database activity monitoring for unusual SELECT queries against wp_options during restore operations; comment anomaly detection
STEP 04

Import malicious .wpress archive

Armed with the ai1wm_secret_key, the attacker crafts a malicious .wpress archive containing a PHP webshell or backdoor. They use the plugin's import endpoint with the stolen key to upload and restore the malicious archive, overwriting site content and planting executable code.
Conditions required:
  • Valid ai1wm_secret_key obtained from step 3
  • Plugin import endpoint is accessible
Where this breaks in practice:
  • If the admin has already updated to 7.110 by the time the attacker obtains the key, the import endpoint behavior may differ
  • WAFs with file upload inspection may flag .wpress archives containing PHP code
  • Rate limiting on the import endpoint could slow brute-force attempts if the key is partial
Detection/coverage: WAF alerting on large file uploads to /wp-content/plugins/all-in-one-wp-migration/ endpoints; file integrity monitoring (OSSEC, Wordfence) detecting new PHP files after import
STEP 05

Webshell execution and site takeover

The imported archive's PHP payload executes with the web server's privileges (typically www-data or equivalent). The attacker now has arbitrary code execution on the WordPress host, enabling data exfiltration, defacement, lateral movement to co-hosted sites, or use as a spam/phishing relay.
Conditions required:
  • Malicious archive successfully imported and restored
  • PHP execution enabled in the webroot (standard WordPress config)
Where this breaks in practice:
  • Container-based or read-only filesystem hosting environments may prevent persistent file writes
  • PHP disable_functions hardening can limit post-exploitation capability
  • Network segmentation between web tier and backend databases limits lateral movement
Detection/coverage: EDR/HIDS detecting new PHP files in webroot; outbound C2 traffic detection; WordPress file integrity monitoring
03 · Intelligence Metadata

The supporting signals.

In-the-Wild ExploitationNo confirmed exploitation. Not listed on CISA KEV. No GreyNoise tags or Shadowserver alerts as of 2026-09-03.
Proof of ConceptTechnical details of the full chain (trackback → second-order SQLi → key leak → RCE) are publicly documented. No standalone weaponized PoC tool identified in public repos. Researcher Jack Taylor disclosed through Wordfence/Defiant.
EPSS Score0.00538 — low probability of exploitation in the next 30 days. Well below the 95th percentile threshold.
KEV StatusNot listed. No CISA KEV entry as of 2026-09-03.
CVSS VectorCVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H8.8 HIGH. The PR:L is debatable; the initial trackback injection is unauthenticated, but the CVSS may reflect the admin-action dependency as a privilege gate.
Affected VersionsAll-in-One WP Migration and Backup ≤ 7.109 (all versions since inception)
Fixed Version7.110 (released August 20, 2026). No distro backports — WordPress plugins update via wordpress.org repository.
Exposure Population~5.25 million active installations per wordpress.org. As of early September 2026, only ~35% have updated — ~3.25 million sites remain on vulnerable versions per BleepingComputer.
Disclosure Date2026-08-25 (public advisory). Patch released 2026-08-20 (5-day head start).
Researcher / OrgJack Taylor, reported through Wordfence / Defiant Inc.
04 · The Call

noisgate verdict.

Final Verdict
DOWNGRADED to MEDIUM (5.5/10)

The single most decisive downgrade factor is the timing-dependent second-order execution: the attacker's payload lies dormant until an administrator voluntarily performs a migration export+import cycle, an infrequent operational event over which the attacker has zero control. This non-deterministic trigger window, combined with multiple prerequisite conditions (trackbacks enabled, comments public, key monitoring), compresses the realistic exploitability far below what the 8.8 CVSS suggests.

HIGH Vulnerability existence and technical chain accuracy
MEDIUM Exposure population and patch adoption rate
HIGH Absence of in-the-wild exploitation

Why this verdict

  • Non-deterministic trigger: The entire chain depends on an administrator performing an export+import cycle — a migration event the attacker cannot force. Most WordPress sites perform this operation a handful of times per year at most, creating an exploitation window measured in weeks or months, not hours.
  • Compounding prerequisites: Trackbacks must be enabled (many hardened sites disable XML-RPC), comments must be publicly visible (moderation queues break the key leak), and the attacker must be actively monitoring the target — each condition independently narrows the exploitable population.
  • No exploitation momentum: Zero KEV listing, no GreyNoise tags, EPSS at 0.00538, and Patchstack independently assessed this as 'low priority, unlikely to be exploited.' The security ecosystem is not treating this as an active threat.
  • Role multiplier: WordPress sites are overwhelmingly (b) typical role — public web presence or line-of-business applications. Blast radius of successful exploitation is limited to one site/tenant. WordPress is not canonically a high-value-role component (not an IdP, hypervisor, DC, backup server, or CI/CD system). In rare shared-hosting scenarios, lateral movement to co-hosted sites is possible but requires additional privilege escalation beyond the webshell. No floor override applies.

Why not higher?

Despite 5 million active installations and an RCE end-state, upgrading to HIGH would require either active exploitation evidence, a deterministic trigger the attacker controls, or a high-value deployment role. None of these conditions are met. The second-order nature with an admin-dependent trigger fundamentally limits weaponization at scale — mass exploitation campaigns cannot reliably time the detonation.

Why not lower?

Dropping below MEDIUM would undercount the sheer exposure population (~3.25 million vulnerable sites) and the severity of the end-state (unauthenticated-to-RCE, even if timing-dependent). The full chain IS publicly documented, trackbacks ARE enabled by default in many WordPress installations, and a motivated attacker targeting a specific site could plant the payload and wait patiently. This is not a theoretical-only vulnerability — it is a viable targeted attack vector.

05 · Compensating Control

What to do — in priority order.

  1. Disable XML-RPC and trackbacks — Block or disable /xmlrpc.php entirely via .htaccess, Nginx config, or a security plugin like Wordfence or Disable XML-RPC. This eliminates the unauthenticated injection vector completely. No noisgate mitigation SLA applies for MEDIUM — go straight to the 365-day remediation window, but this control is trivial to deploy immediately.
  2. Enable comment moderation for all comments — Set WordPress to hold all comments for manual approval (Settings → Discussion → Comment must be manually approved). This prevents the leaked ai1wm_secret_key from being publicly visible, breaking step 3 of the chain.
  3. Update to version 7.110 — The definitive fix. Update via the WordPress plugin repository. Per the noisgate remediation SLA for MEDIUM, complete within 365 days — but given the trivial update mechanism, there's no reason not to do it within your next maintenance window.
  4. Restrict plugin import endpoint access — If you don't actively use the migration/import feature, consider deactivating the plugin entirely on production sites. If needed only during migrations, activate it only for the migration window and deactivate afterward.
What doesn't work
  • Web Application Firewall (generic SQL injection rules): The injection payload is stored via trackback and only executes during a restore operation internal to the plugin. Standard SQLi WAF signatures inspect HTTP request parameters, not internal database rewrite operations during plugin restore cycles.
  • Database-level query logging without restore-context correlation: Logging all SQL queries will generate massive noise. Without context that the query originated from a plugin restore operation, the injection is indistinguishable from normal plugin database rewrites.
  • WordPress auto-updates alone: While WordPress supports auto-updates for plugins, many enterprise WordPress deployments disable auto-updates for stability. Do not assume auto-update is covering your fleet — verify the installed version explicitly.
06 · Verification

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_19949.sh /var/www/html/wordpress

noisgate-verify.sh
BASHREAD-ONLYSAFE
#!/bin/bash
# CVE-2026-19949 Checker — All-in-One WP Migration and Backup
# Usage: bash check_cve_2026_19949.sh <wordpress_root>
# Exit codes: 0=PATCHED, 1=VULNERABLE, 2=UNKNOWN

set -euo pipefail

WP_ROOT="${1:-/var/www/html}"
PLUGIN_FILE="${WP_ROOT}/wp-content/plugins/all-in-one-wp-migration/all-in-one-wp-migration.php"

if [ ! -f "$PLUGIN_FILE" ]; then
  echo "UNKNOWN — All-in-One WP Migration plugin not found at ${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 plugin version from ${PLUGIN_FILE}"
  exit 2
fi

echo "Detected All-in-One WP Migration version: ${VERSION}"

# Compare versions — vulnerable if <= 7.109
# Split version into major.minor components
MAJOR=$(echo "$VERSION" | cut -d. -f1)
MINOR=$(echo "$VERSION" | cut -d. -f2)

if [ "$MAJOR" -lt 7 ] 2>/dev/null; then
  echo "VULNERABLE — Version ${VERSION} is affected by CVE-2026-19949 (fixed in 7.110)"
  exit 1
elif [ "$MAJOR" -eq 7 ] && [ "$MINOR" -le 109 ] 2>/dev/null; then
  echo "VULNERABLE — Version ${VERSION} is affected by CVE-2026-19949 (fixed in 7.110)"
  exit 1
elif [ "$MAJOR" -eq 7 ] && [ "$MINOR" -ge 110 ] 2>/dev/null; then
  echo "PATCHED — Version ${VERSION} is not affected"
  exit 0
elif [ "$MAJOR" -gt 7 ] 2>/dev/null; then
  echo "PATCHED — Version ${VERSION} is not affected"
  exit 0
else
  echo "UNKNOWN — Could not compare version ${VERSION}"
  exit 2
fi
07 · Bottom Line

If you remember one thing.

TL;DR
This is a MEDIUM after reassessment — the vendor's 8.8 HIGH overstates the operational risk because the chain requires a dormant payload to survive until an admin voluntarily performs a migration restore. No noisgate mitigation SLA applies for MEDIUM, so go straight to the 365-day noisgate remediation SLA: update to version 7.110 via the WordPress plugin repository. That said, the update is a one-click operation — there's no reason to wait. Monday morning, run version checks across your WordPress fleet (use the verification script above), batch-update any instance still on ≤ 7.109, and disable XML-RPC/trackbacks on any site that doesn't explicitly need them. If you manage WordPress at scale with a fleet tool (WP-CLI, ManageWP, MainWP), push the update centrally. Prioritize production-facing sites first, staging/dev environments next. Given ~3.25 million sites are still vulnerable globally, commodity exploitation tooling could emerge if a weaponized PoC drops — don't let this linger past your next monthly maintenance window.

Sources

  1. BleepingComputer — WordPress backup plugin flaw exposes millions of sites
  2. Patchstack — All-in-One WP Migration SQLi to RCE
  3. FreshySites — CVE-2026-19949 Security Bulletin
  4. SentinelOne Vulnerability Database — CVE-2026-19949
  5. SOCRadar — CVE-2026-19949
  6. WPScan — All-in-One WP Migration Plugin Security History
  7. WordPress.org — All-in-One WP Migration Plugin Page
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.