CVE-2026-94676
Executive Summary
CVE-2026-94676 is a deserialization of untrusted data vulnerability (CWE-502) in the Tainacan community plugin, affecting all versions through 1.3.0. A high-privileged authenticated attacker can supply a crafted serialized object that the application unserializes without adequate validation, leading to PHP Object Injection with potential for remote code execution, file manipulation, or full site compromise. With a CVSS base score of 7.2 (High) and no vendor patch, exposed and outdated installations remain at risk.
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
The vulnerability is classified under CWE-502, Deserialization of Untrusted Data. Tainacan is a WordPress-based repository/collection management plugin; plugins of this class frequently accept structured data (settings, imports, index metadata, or inter-component messages) and reconstruct PHP objects from it. When untrusted input reaches a PHP unserialize() call, an attacker who controls the serialized string can instantiate arbitrary classes already loaded in the runtime and influence their properties.
The impact of PHP Object Injection derives from two factors:
- Magic method abuse. During unserialization, PHP automatically invokes magic methods such as __wakeup(), __destruct(), and __toString() on the reconstructed objects. If any class loaded by Tainacan, WordPress core, or another active plugin performs sensitive operations within these methods, an attacker can chain object instantiations into a "POP chain" (Property-Oriented Programming).
- Property injection. Even without a complete POP chain, an attacker can set arbitrary properties on instantiated objects, which may alter application logic, poison cached data, or subvert authorization checks.
The NVD description does not disclose the specific input vector (for example, an AJAX action, REST route, import handler, or shortcode parameter) through which the serialized payload is delivered, nor does it name any affected function, class, or parameter. Those specifics are therefore not asserted here. What can be stated from the CVE record is the vulnerability class (untrusted deserialization leading to object injection) and the affected product range (Tainacan through version 1.3.0).
Attack surface considerations for this class in a WordPress plugin context:
- Any endpoint that accepts serialized data — REST API request bodies, admin-post/AJAX handlers, import/export functionality, or data imported from external sources.
- The CVSS vector specifies AV:N (network-exploitable) with PR:H (High privileges required). This constrains exploitation to an authenticated principal holding a role or capability sufficient to reach the vulnerable input path. It does not reduce impact (C:H/I:H/A:H) — a successful exploit can fully compromise confidentiality, integrity, and availability.
The PR:H rating is significant defensively: it means the flaw is not directly reachable by anonymous visitors as scored. However, it is common for plugins to expose such functionality to Contributor, Author, or Editor roles, and to lower-privileged accounts in multi-author or membership-configured sites. Any privilege level above the public/anonymous tier should be treated as potentially sufficient until the exact capability check is confirmed by the vendor or independent researchers.
Exploitation Scenarios
No public proof-of-concept, exploit code, or Nuclei template is available for CVE-2026-94676. The attack chain below is inferred at the vulnerability-class level from the NVD description (Deserialization of Untrusted Data leading to Object Injection) and the CVSS vector (AV:N/AC:L/PR:H/UI:N). No specific endpoint names, function names, parameter names, or code paths are asserted, because the advisory does not disclose them.
1) Reconnaissance / target identification. An attacker identifies WordPress sites running the Tainacan plugin at a version at or below 1.3.0. Identification can be performed passively through HTTP response fingerprints (for example, static assets served under a plugin directory path containing the plugin slug) or actively through unauthenticated version enumeration. The attacker then determines which authenticated role they can obtain — stolen credentials, a self-registered account that is subsequently elevated in capability, a compromised low-privileged user, or an insider account.
2) Triggering the flaw class. With authenticated access at a privilege level sufficient to reach the vulnerable code path, the attacker locates the functionality that accepts serialized input. In deserialization vulnerabilities, this is typically a request body, form field, or imported data blob that the application passes to a PHP unserialize() operation. The attacker submits a serialized string of their own construction rather than legitimate data.
3) Payload / execution method. At the vulnerability-class level, the attacker crafts a serialized payload that instantiates classes already present in the application runtime and sets their properties to values that drive a gadget chain. On unserialization, PHP invokes magic methods on those objects, and if a viable chain of loaded classes exists, execution flows into a sensitive sink (for example, file write, code evaluation, or command execution) supplied through the attacker-controlled properties. Because the advisory does not enumerate the classes bundled with Tainacan or its dependencies, the existence and nature of any specific chain cannot be confirmed from the data provided. Where no usable gadget chain exists, the attacker may still achieve object injection effects such as logic subversion, data tampering, or denial of service via resource-exhausting object graphs.
4) Post-exploitation impact. Successful exploitation is rated as a full compromise of confidentiality, integrity, and availability (C:H/I:H/A:H). Depending on the resulting sink, an attacker could execute arbitrary code in the web server context, write or modify files on the host, exfiltrate repository content and user data, establish persistence within the WordPress installation, or pivot further into the hosting environment. Given the universally high CIA impact and the network attack vector, impacts should be planned for at the worst case until the specific gadget behavior is confirmed.
Impact Assessment
Affected systems. WordPress installations running the Tainacan plugin at versions up to and including 1.3.0. Because Tainacan is a repository/collection management plugin, affected sites are disproportionately likely to be institutional, academic, cultural-heritage, or public-sector deployments that host curated content — a profile that raises the value of confidentiality and integrity impacts.
Blast radius. The vulnerability class affects the application layer, but post-exploitation potential is not confined to the plugin. Because PHP object injection operates through classes loaded in the same process as WordPress core, a successful chain may reach beyond the plugin into the wider application and even the host, depending on the sink. One compromised high-privileged account is sufficient to attempt exploitation; no user interaction is required (UI:N).
CVSS 3.1 breakdown (base score 7.2, High).
- AV:N — exploitable over the network.
- AC:L — no special conditions required; the attack is repeatable and reliable once the input path is known.
- PR:H — the attacker must possess high privileges, which limits the initial access requirement but not the resulting damage.
- UI:N — no victim interaction is needed.
- S:U — impact is scoped to the vulnerable component's security authority.
- C:H / I:H / A:H — full loss of confidentiality, integrity, and availability.
Business impact. Data hosted in Tainacan repositories (documents, metadata, uploaded media, user records) could be read, altered, or destroyed. Site integrity loss can corrupt curated collections and undermine institutional trust. Code execution potential means the compromise may extend to defacement, malware distribution, SEO poisoning, or use of the host as a pivot point. Regulatory exposure follows from any personal data stored in the repository.
Exploitability context. EPSS has not yet been scored by FIRST.org; no value is fabricated here. No public PoC, exploit code, or Nuclei template exists at time of writing. CVE-2026-94676 is not listed in CISA KEV. The practical exploitability is currently gated by the PR:H requirement and the absence of a disclosed gadget chain, but deserialization flaws are frequently weaponized after public technical analysis, and the lack of a patch (0/4 confidence) means exposure will persist.
Detection Guidance
Sigma Rule
title: Tainacan CVE-2026-94676 PHP Object Injection Attempt - Serialized Payload in Request
id: 7c3f9a12-4d5b-4e8a-9f21-2b6c8d0e4a77
status: experimental
description: Detects HTTP requests containing PHP serialized object syntax targeting WordPress sites running the Tainacan plugin (CVE-2026-94676). Serialized object markers (O:, a:, s:) in request bodies or parameters are a strong indicator of object injection attempts.
references:
- https://nvd.nist.gov/vuln/detail/CVE-2026-94676
author: valtersit.com
date: 2026/01/01
tags:
- attack.t1190
- attack.initial_access
- cve.2026.94676
logsource:
category: webserver
detection:
selection_method:
cs-method:
- POST
- PUT
- PATCH
selection_serialized_object:
- cs-uri-query|contains: 'O:'
- cs-uri-query|re: 'O:\d+:"[A-Za-z_]'
selection_tainacan_path:
cs-uri-stem|contains:
- '/wp-content/plugins/tainacan'
- '/wp-json/tainacan'
- '/wp-admin/admin-ajax.php'
condition: selection_method and selection_serialized_object and selection_tainacan_path
falsepositives:
- Legitimate serialized data submissions by the plugin itself
- Backup/import tooling that posts serialized structures
level: high
YARA Rule
rule CVE_2026_94676_Tainacan_Object_Injection
{
meta:
description = "Detects PHP serialized object payload patterns associated with CVE-2026-94676 (Tainacan object injection via untrusted deserialization)"
author = "valtersit.com"
reference = "https://nvd.nist.gov/vuln/detail/CVE-2026-94676"
date = "2026-01-01"
severity = "high"
strings:
$php_ser_obj = /O:[0-9]{1,4}:"[A-Za-z_\\]{3,80}":[0-9]{1,4}:\{/
$php_ser_arr = /a:[0-9]{1,4}:\{/
$magic_wakeup = "__wakeup"
$magic_destruct = "__destruct"
$magic_tostring = "__toString"
$tainacan = "tainacan"
condition:
($php_ser_obj and any of ($magic_*)) or
($php_ser_arr and $tainacan and 2 of ($magic_*))
}
Suricata IDS Rule
alert http any any -> any any (msg:"CVE-2026-94676 Tainacan PHP Object Injection Attempt - Serialized Object in Request"; flow:established,to_server; http.method; content:"POST"; http.uri; content:"tainacan"; nocase; http.request_body; content:"O:"; content:"{"; distance:0; within:10; pcre:"/O:\d+:\"[A-Za-z_\\\\]+\"/"; reference:cve,CVE-2026-94676; reference:url,nvd.nist.gov/vuln/detail/CVE-2026-94676; classtype:web-application-attack; sid:202694676; rev:1;)
Elastic Detection
sequence by source.ip with maxspan=5m
[ network where event.action == "network_flow" and
http.request.method in ("POST", "PUT", "PATCH") and
stringContains(url.full, "tainacan") ]
[ network where event.action == "network_flow" and
http.request.body.text matches~ ".*O:[0-9]{1,4}:\"[A-Za-z_\\\\]{3,80}\":[0-9]{1,4}:\\{.*" ]
Splunk SPL Query
index=web sourcetype=access_combined
| eval method=upper(cs_method)
| where method IN ("POST","PUT","PATCH")
| where like(cs_uri_stem, "%/wp-content/plugins/tainacan%") OR like(cs_uri_stem, "%/wp-json/tainacan%") OR like(cs_uri_stem, "%/wp-admin/admin-ajax.php%")
| where match(cs_uri_query, "O:\d+:\"[A-Za-z_\\\\]") OR match(form_data, "O:\d+:\"[A-Za-z_\\\\]")
| stats count min(_time) as first_seen max(_time) as last_seen by src_ip, cs_uri_stem, cs_uri_query
| sort - count
Wazuh OSSEC Rule
<group name="web,wordpress,tainacan,cve-2026-94676">
<rule id="10094676" level="12">
<decoded_as>web-accesslog</decoded_as>
<field name="url">/wp-content/plugins/tainacan</field>
<field name="url">O:</field>
<description>CVE-2026-94676: Possible Tainacan PHP Object Injection attempt via serialized object in request.</description>
<mitre>
<id>T1190</id>
</mitre>
</rule>
<rule id="10094677" level="12">
<decoded_as>web-accesslog</decoded_as>
<field name="url">/wp-admin/admin-ajax.php</field>
<field name="url">O:</field>
<description>CVE-2026-94676: Serialized object marker submitted to admin-ajax on Tainacan-exposed host - possible object injection.</description>
<mitre>
<id>T1190</id>
</mitre>
</rule>
</group>
Mitigation & Patch Guidance
Patch confidence: 0/4 (UNPATCHED — no patch evidence from any tracked source). There is no vendor fix, no advisory fix version, and no workaround guidance published in the data provided. The following measures are generic to the vulnerability class and deployment context.
1) Immediate mitigations.
- If Tainacan is not required, deactivate and remove the plugin. This eliminates the attack surface entirely and is the only guaranteed mitigation for an unpatched deserialization flaw.
- If Tainacan must remain active, restrict access to the plugin's administrative and data-submission functionality to the smallest set of trusted users. Because the CVSS vector requires high privileges (PR:H), reducing the number of accounts that can reach the vulnerable input path directly shrinks exposure.
- Enforce least privilege on all WordPress accounts. Audit roles for unnecessary elevated capabilities (Editor, Administrator, or any custom role able to reach Tainacan functionality) and downgrade or remove them.
- Enforce strong authentication and MFA on all privileged accounts to reduce the probability of an attacker acquiring the access level needed (PR:H) to trigger the flaw.
- Apply a reverse-proxy or WAF rule that inspects request bodies for PHP serialized object signatures (for example, patterns matching
O:<length>:"ClassName") directed at Tainacan endpoints, and either block or alert on them. This disrupts naive exploitation but should be treated as defense-in-depth, not a fix. - Monitor web server, application, and authentication logs for the detection patterns in the previous section.
2) Patch / upgrade steps.
- Register with the vendor's release channels and monitor the Tainacan plugin repository for a security release addressing CVE-2026-94676. No fixed version exists at the time of this report.
- When a fix is published, test in a staging environment, then upgrade all production instances, and verify that the version in use is strictly newer than 1.3.0.
- If the vendor confirms a fixed version, treat any host running 1.3.0 or earlier as compromised if signs of exploitation appear in logs, and perform credential rotation and integrity verification.
3) Long-term hardening.
- Establish a vulnerability management process that tracks third-party WordPress plugins against NVD/OSV feeds and prioritizes unpatched flaws with no available remediation.
- Eliminate unsafe deserialization at the platform level where feasible: ensure PHP- and WordPress-side guidance against passing untrusted data to unserialize() is enforced in any custom code, and prefer formats such as JSON that cannot instantiate objects.
- Enforce network-layer segmentation so that application exploitation cannot trivially pivot to the database, internal services, or the host OS.
- Maintain offline, immutable backups of repository content to allow recovery from integrity-destroying compromise (I:H in this CVE).
- Reduce plugin footprint generally: remove unused plugins and disable unused features, since every active plugin contributes classes that can participate in object-injection gadget chains.
References
- NVD — CVE-2026-94676: https://nvd.nist.gov/vuln/detail/CVE-2026-94676
- MITRE CWE-502 — Deserialization of Untrusted Data: https://cwe.mitre.org/data/definitions/502.html
- OWASP — Deserialization of untrusted data / Insecure Deserialization: https://owasp.org/www-community/vulnerabilities/Deserialization_of_untrusted_data
- OWASP — PHP Object Injection (deserialization gadget chains): https://owasp.org/www-community/vulnerabilities/PHP_Object_Injection
- CISA Known Exploited Vulnerabilities Catalog (verify current status; CVE-2026-94676 was not listed at time of writing): https://www.cisa.gov/known-exploited-vulnerabilities-catalog
Exploit-in-the-wild status. No public PoC, exploit code, or Nuclei template was observed for CVE-2026-94676 at the time of this report, and the CVE is not in CISA KEV. No threat actor campaigns have been associated with this identifier in the available data. This should be reassessed as technical details become public, since deserialization vulnerabilities are frequently weaponized after disclosure.
What is this? Security researchers use these exact search queries on Shodan.io (a search engine for internet-connected devices) to find vulnerable systems globally. You can copy these dorks to see if your organization's IP space is exposed.
💣 PoC CODE AVAILABLE
Exploit code for this CVE is tracked in our database.
Access poc_code via API Pro.