CVE-2026-1928: Rank Math SEO PHP Object Injection Leads to Remote Code Execution
CVE-2026-1928 is a high-severity (CVSS 8.8) PHP Object Injection flaw in the Rank Math SEO WordPress plugin, versions 1.0.276 and earlier. Any user with Contributor access can abuse the updateMeta REST API endpoint to inject a serialized object, write a webshell and take over the site. Here is how to detect and fix it.

Key takeaways
- What: PHP Object Injection (CWE-502, deserialization of untrusted data) in the updateMeta REST API endpoint of Rank Math SEO.
- Severity: CVSS 3.1 base score 8.8 (High); network-exploitable, low complexity, no user interaction.
- Who can exploit it: any logged-in user with the Contributor role or above — a role many editorial sites hand out freely.
- Impact: a POP chain turns the injection into remote code execution by planting a webshell in wp-content/uploads.
- Affected: Rank Math SEO ≤ 1.0.276. Version 1.0.277 is the first release outside the affected range; confirm the fix in the plugin changelog.
- Exploitation status: not known to be exploited as of 28 October 2026, but authenticated plugin RCE bugs are typically weaponised quickly after disclosure.
- Action: patch now, audit Contributor+ accounts, hunt for PHP files in uploads, and block PHP execution in upload directories.
On this page
- CVE-2026-1928 at a glance
- What is CVE-2026-1928?
- How does the vulnerability work?
- Attack chain:
- Why does CVE-2026-1928 matter?
- Am I affected by CVE-2026-1928?
- How to detect exploitation attempts
- 1. Hunt for PHP files in uploads
- 2. Review access logs for the updateMeta route
- 3. Audit users and roles
- 4. Verify core and plugin integrity to spot modified files.
- How to fix CVE-2026-1928
- Temporary mitigations if you cannot patch immediately
- Block PHP execution in uploads (Nginx)
- Block PHP execution in uploads (Apache 2.4)
- Virtual patch with ModSecurity
- Secure coding lesson for plugin developers
- Conclusion
CVE-2026-1928 is a high-severity (CVSS 3.1 score 8.8) PHP Object Injection vulnerability in the Rank Math SEO plugin for WordPress, affecting all versions up to and including 1.0.276. An authenticated user with Contributor-level access or higher can send untrusted serialized data to the plugin's updateMeta REST API endpoint and, through an available POP chain, write a webshell to the uploads directory. Update Rank Math SEO to the latest release immediately.
CVE-2026-1928 at a glance
Attribute | Detail |
|---|---|
CVE ID | CVE-2026-1928 (EUVD-2026-111576, VDB-427685) |
Product | Rank Math SEO – AI SEO Tools to Dominate SEO Rankings (slug |
Affected versions | ≤ 1.0.276 |
Vulnerability type | PHP Object Injection → Remote Code Execution |
CWE | CWE-502: Deserialization of Untrusted Data |
CVSS 3.1 | 8.8 High (network vector, scope unchanged) |
Privileges required | Low - Contributor role or above |
Vulnerable component | updateMeta REST API endpoint |
CNA / reporter | Wordfence |
CVE reserved | 4 February 2026 |
Publicly disclosed | 28 October 2026 |
Known exploitation | None reported at publication; not in CISA KEV |
What is CVE-2026-1928?
Rank Math SEO is one of the most widely installed SEO plugins in the WordPress ecosystem. It exposes REST API routes so the block editor can save SEO metadata such as titles, descriptions and schema while an author writes a post.
CVE-2026-1928 exists because the updateMeta endpoint passes attacker-controlled input to PHP deserialization without restricting which classes may be instantiated. Any user allowed to edit their own posts, which includes Contributors, can reach that code path.
How does the vulnerability work?
PHP's unserialize() reconstructs objects from a string such as O:8:"Example":1:{...}. When the string comes from a user, the attacker chooses the class and its properties. On destruction or wake-up, PHP calls magic methods like __destruct() or __wakeup() on that object.
A POP (Property-Oriented Programming) chain links these magic methods across classes already loaded in WordPress, the plugin or other plugins. For CVE-2026-1928, a usable chain exists that writes attacker-supplied PHP to the uploads directory, turning object injection into full code execution.

Attack chain:
The attacker obtains or registers an account with the Contributor role (weak registration controls, credential stuffing, a compromised freelancer or guest-author account).
The attacker sends a crafted request to Rank Math's updateMeta REST endpoint containing a serialized PHP object in a metadata field.
The plugin deserializes the value, instantiating the attacker-chosen object.
Magic methods in the POP chain fire and write a PHP webshell into
wp-content/uploads/.The attacker requests the webshell over HTTP and executes arbitrary commands as the web server user.
No proof-of-concept is reproduced in this article. Defenders should rely on the detection guidance below rather than exploit code.
Why does CVE-2026-1928 matter?
The privilege bar is low. Contributor is the entry-level authoring role, and multi-author blogs, news sites, agencies and membership sites routinely create such accounts for guest writers. Once code runs on the server, the attacker can read wp-config.php, steal database credentials and session secrets, create administrator accounts, inject skimming JavaScript into checkout pages, or pivot into the hosting network.
For e-commerce sites running WooCommerce alongside Rank Math, RCE on the web tier can compromise payment pages. Under PCI DSS v4.0 Requirement 6.3.3, patches for critical vulnerabilities must be installed within one month of release, and Requirement 6.4.3 calls for control over payment-page scripts. SOC 2 environments should treat this as a CC7.1 vulnerability-management event with documented remediation evidence.
Am I affected by CVE-2026-1928?
You are affected if Rank Math SEO version 1.0.276 or earlier is installed and active, and at least one account holds the Contributor role or higher that you do not fully trust. Check the version with WP-CLI:
wp plugin get seo-by-rank-math --field=versionFor fleets of sites, loop across installs:
for d in /var/www/*/; do
v=$(wp --path="$d" plugin get seo-by-rank-math --field=version 2>/dev/null)
[ -n "$v" ] && printf '%s\t%s\n' "$d" "$v"
doneHow to detect exploitation attempts

1. Hunt for PHP files in uploads
Legitimate uploads should never contain executable PHP.
find /var/www/html/wp-content/uploads -type f \( -iname '*.php' -o -iname '*.phtml' -o -iname '*.phar' \) -mtime -60 -ls2. Review access logs for the updateMeta route
Especially requests from Contributor or Author sessions carrying serialized object markers such as O:<digits>:".
grep -E 'rankmath/v1/updateMeta|rest_route=%2Frankmath%2Fv1%2FupdateMeta' /var/log/nginx/access.log*Note that request bodies are not logged by default; enable WAF or application-level logging to inspect POST payloads.
3. Audit users and roles
Look for unexpected Contributor or Administrator accounts.
wp user list --role=contributor --fields=ID,user_login,user_email,user_registered
wp user list --role=administrator --fields=ID,user_login,user_registered4. Verify core and plugin integrity to spot modified files.
wp core verify-checksums
wp plugin verify-checksums --allIf you find a webshell, treat the site as compromised: isolate it, preserve logs and file timestamps for forensics, rotate database credentials and the salts in wp-config.php, reset all privileged passwords, and restore from a known-clean backup before patching.
How to fix CVE-2026-1928
Update Rank Math SEO to the latest version (1.0.277 or later) from the WordPress dashboard or with
wp plugin update seo-by-rank-math. Confirm with the version command above.Enable auto-updates for this plugin if your change-management policy allows:
wp plugin auto-updates enable seo-by-rank-math.Review Contributor+ accounts. Remove dormant accounts, disable open registration (
wp option update users_can_register 0) and set the default role to Subscriber.Enforce MFA for every account that can author content.
Run the detection steps above and document results as remediation evidence for audits.
Temporary mitigations if you cannot patch immediately
Block PHP execution in uploads (Nginx)
Place this inside the relevant server block, before the generic PHP location:
location ~* ^/wp-content/uploads/.*\.(php|phtml|phar)$ {
deny all;
return 403;
}Block PHP execution in uploads (Apache 2.4)
Add to wp-content/uploads/.htaccess:
<FilesMatch "\.(?i:php|phtml|phar)$">
Require all denied
</FilesMatch>Virtual patch with ModSecurity
Deny serialized PHP objects sent to the updateMeta route. Deploy in DetectionOnly mode first to confirm there are no false positives, then switch to blocking:
SecRule REQUEST_URI|ARGS_GET:rest_route "@rx /rankmath/v1/updateMeta" \
"id:1928001,phase:2,deny,status:403,log,\
msg:'CVE-2026-1928 serialized PHP object to Rank Math updateMeta',\
chain"
SecRule REQUEST_BODY|ARGS "@rx (?:^|[^A-Za-z0-9])[OC]:\d+:\"" \
"t:none,t:urlDecodeUni"This rule requires SecRequestBodyAccess On. Managed WAFs such as Wordfence and Patchstack typically ship rules for newly disclosed plugin flaws; confirm your rule set covers CVE-2026-1928.
These controls reduce the blast radius but do not remove the vulnerability. Patching remains mandatory.
Secure coding lesson for plugin developers
Never call unserialize() on data that a user can influence. Store and exchange structured data as JSON with json_decode(), which cannot instantiate objects. Where legacy serialized data is unavoidable, pass ['allowed_classes' => false] and validate the result against a strict schema.
// Unsafe: attacker chooses the class
$value = unserialize( $request['meta'] );
// Safer: data only, no objects
$value = json_decode( $request['meta'], true, 32, JSON_THROW_ON_ERROR );
// Legacy fallback: block object instantiation entirely
$value = unserialize( $raw, [ 'allowed_classes' => false ] );WordPress's maybe_unserialize() offers no class restriction, so it is equally dangerous on untrusted input. REST endpoints should also enforce field-level sanitize_callback and validate_callback handlers rather than relying on a capability check alone.
Conclusion
CVE-2026-1928 shows how a single unsafe deserialization call in a popular plugin can turn the lowest authoring role into a server takeover. Patch Rank Math SEO now, tighten who can hold Contributor access, and make "no PHP execution in uploads" a baseline control across every WordPress estate you manage.
Questions and answers
What is CVE-2026-1928?
A PHP Object Injection vulnerability in Rank Math SEO ≤ 1.0.276 that lets Contributor-level users achieve remote code execution via the updateMeta REST API endpoint.
How severe is CVE-2026-1928?
It has a CVSS 3.1 base score of 8.8, rated High, because it is remotely exploitable with low complexity and leads to full compromise of confidentiality, integrity and availability.
Which Rank Math version fixes CVE-2026-1928?
All versions up to and including 1.0.276 are vulnerable. Update to the latest release, 1.0.277 or later.
Can an unauthenticated attacker exploit CVE-2026-1928?
No. The attacker needs an authenticated account with at least the Contributor role. Sites with open registration or many guest authors face higher risk.
Is CVE-2026-1928 being exploited in the wild?
No active exploitation had been reported as of 28 October 2026, and it is not listed in the CISA KEV catalog. Monitor vendor and threat-intelligence feeds for changes.
How do I know if my site was compromised?
Look for PHP files in wp-content/uploads, unexpected administrator accounts, modified core or plugin files, and unusual requests to the Rank Math updateMeta REST route.
Sources
Stay Ahead with the Latest Insights
Subscribe to my newsletter for the latest insights on cybersecurity, technology, application security, and practical tips.



Discussion