CVE-2026-84222
Executive Summary
CVE-2026-84222 is an authorization bypass vulnerability in the Kirki WordPress plugin, affecting all versions prior to 6.3.0. The plugin fails to verify whether a requesting user has permission to read a post before rendering and returning the post's page content. As a result, unauthenticated attackers can retrieve the content of WordPress posts that are not publicly accessible, including private, draft, pending, and trashed posts. This constitutes a significant confidentiality breach, potentially exposing sensitive business data, unreleased content, or internal communications. No CVSS score, EPSS score, public exploit, or patch evidence is currently available, leaving affected installations in an actively vulnerable state.
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 Kirki WordPress plugin (before version 6.3.0) contains an authorization bypass flaw rooted in a missing permission check. According to the NVD description, the plugin renders and returns page content without first checking whether the requester is allowed to read the target post. WordPress post statuses — public, private, draft, pending, and trashed — each have distinct visibility rules enforced by the WordPress core permission model. Public posts are readable by anyone; private posts are readable only by authors and editors; draft and pending posts are readable only by their author and users with appropriate edit capabilities; trashed posts are readable only by users with delete permissions. The vulnerability exists because the plugin's content-rendering routine bypasses the WordPress core wp_query and post-status visibility checks, directly fetching and rendering post content based solely on the post ID supplied by the requester, without invoking the standard map_meta_cap or capability-checking functions.
The attack surface is the WordPress HTTP request interface. An unauthenticated attacker can craft a URL that triggers the plugin's page-rendering functionality and supply a post identifier corresponding to a non-public post. Because the permission check is absent, the plugin retrieves the raw post content — including titles, body text, custom fields, and embedded metadata — and returns it as rendered HTML to the attacker. The root cause is an authorization flaw at the application layer (CWE-639, Authorization Bypass Through User-Controlled Key), where the post identifier is treated as a trusted input rather than validated against the requester's capabilities. Without knowing the internal function or endpoint names — which are not disclosed in the NVD description — the specific code path cannot be precisely enumerated, but the vulnerability class is clear: missing access control on a server-side read operation keyed by a user-controlled parameter. Given that the fix is slated for version 6.3.0, the flaw likely resides in a routine added or modified in earlier Kirki releases, possibly a custom layout or template-rendering feature that fetches pages by ID.
Exploitation Scenarios
The attack chain for CVE-2026-84222 is inferred from the vulnerability class, as no public exploit or PoC is currently available. The following steps represent the realistic exploitation path:
Step 1 — Reconnaissance and Target Identification: An attacker first identifies a WordPress site running the Kirki plugin with version < 6.3.0. This can be achieved through HTTP fingerprinting (e.g., inspecting the wp-content/plugins/kirki/ asset paths in page source or reading the plugin's version from CSS/JS file references) or by using WordPress vulnerability scanners that probe installed plugin versions. The attacker also needs to identify or enumerate internal post IDs. WordPress post IDs are sequential integers; the attacker can enumerate candidate IDs by requesting the vulnerable endpoint with sequential values or by observing ID patterns in public posts (e.g., ?p=123 in permalinks).
Step 2 — Triggering the Authorization Bypass: With a target post ID identified (e.g., one corresponding to a draft or private post), the attacker crafts an HTTP request to the vulnerable Kirki endpoint/parameter that causes the plugin to fetch and render the post's content. The specific URL structure and parameter names are not disclosed in the NVD description or CNA title; insufficient technical detail is available to state the exact trigger. At the vulnerability-class level, the request submits the post ID as a key and bypasses authentication and authorization checks — the attacker does not need a WordPress session or cookies.
Step 3 — Payload and Execution: No injection payload is required for this vulnerability class (CWE-639). The "payload" is simply the identifier of a restricted post. The attacker submits the ID and the server responds with the rendered page content. The vulnerability is server-side and requires no client-side interaction; the execution is the unauthorized read of database-stored post content, which the plugin's flawed logic outputs verbatim.
Step 4 — Post-Exploitation Impact: The attacker retrieves draft articles, private pages, scheduled posts, or trashed content. This may expose confidential business plans, unreleased product announcements, legal documents, internal policy pages, or user-generated content of a private nature. Successfully retrieved content can be leveraged for corporate espionage, competitive intelligence, or further targeted attacks (e.g., crafting phishing emails containing leaked internal information to increase credibility). Additionally, trashed posts may contain credentials, API keys, or other secrets embedded in content blocks. Note that this vulnerability does not directly grant administrative access or code execution; its impact is limited to confidentiality loss of non-public WordPress content.
Impact Assessment
The primary impact of CVE-2026-84222 is a confidentiality breach affecting WordPress sites running the Kirki plugin before version 6.3.0. Because exploitation is unauthenticated, the attack surface is broad — any internet-facing WordPress installation with this plugin version is exposed with no prerequisite access. The blast radius includes all non-public content types within the WordPress database that the plugin's rendering routine touches, specifically pages or posts in draft, pending, private, and trashed states. Sensitive business data, pre-release product information, internal corporate communications stored as WordPress posts, and customer data placed in private pages become readable to the public internet. No CVSS score has been assigned by the vendor, so quantitative scoring is unavailable; however, given the remote, unauthenticated nature and the confidentiality impact, this flaw could reasonably be expected to score in the 5.3–7.5 range (medium-to-high on CVSSv3.1, considering scope and attack vector) if scored. The flaw is not listed on CISA's Known Exploited Vulnerabilities (KEV) catalog, and there is no evidence of active exploitation in the wild as of this report. The absence of a patch (confidence 0/4) elevates the risk, as no mitigations exist at the source level and administrators must rely on compensating controls. There is no evidence of a public exploit release at this time, which marginally reduces immediate likelihood; however, exploitation for this vulnerability class is technically straightforward and may be weaponized quickly once details are more widely disseminated.
Detection Guidance
The following detection rules target anomalous HTTP requests to Kirki-related endpoints, unusual post-ID parameter patterns, and server responses returning non-public content. Since specific endpoint names are not disclosed in the NVD description, detection rules are written generically to flag patterns consistent with post-ID enumeration and unauthorized retrieval attempts on WordPress installations. Note that these rules infer behavior from the vulnerability class and may require tuning to the specific deployment to reduce false positives.
Sigma Rule
title: WordPress Plugin Kirki Pre-6.3.0 Authorization Bypass - Post Enumeration Attempt
id: 0fe2e5e8-9c3d-4b1a-b2f7-6d9f4c8a1e56
status: experimental
description: Detects sequential or out-of-range post ID requests to Kirki rendering endpoints, potentially indicative of the unauthenticated post content retrieval vulnerability (CVE-2026-84222).
author: Valter Security Threat Intelligence
date: 2026/05/15
logsource:
category: webserver
product: apache
definition: 'HTTP access logs from WordPress hosts. Adjust category/product for nginx or IIS.'
detection:
selection:
c-uri|contains:
- 'kirki'
- 'render'
- 'page'
c-uri|re: '(\?|&)(p|post|page[_]?id|id)=([0-9]{1,3})$' # Post ID parameter present
filter_known_good:
cs-method: 'GET'
sc-status: 200
c-uri|contains: 'wp-admin' # Legitimate admin-context access
condition: selection and not filter_known_good
falsepositives:
- Legitimate logged-in admin access to Kirki editor pages
- SEO or cache plugins fetching pages by ID
- Development/staging activities on production logs
level: medium
tags:
- attack.t1190
- attack.t1595.002 # Active Scanning: Vulnerability Scanning
- cve.2026-84222
- cwe.639
YARA Rule
/*
* YARA rule to detect web server log entries or HTTP request captures
* indicating attempts to exploit CVE-2026-84222 (Kirki WordPress plugin
* unauthenticated post content disclosure). Matches on post-ID parameter
* patterns combined with Kirki-related URI segments.
*/
rule CVE_2026_84222_Kirki_Post_Enumeration
{
meta:
author = "Valter Security Threat Intelligence"
description = "Detects candidate HTTP requests targeting Kirki plugin post-rendering and post-ID brute force / enumeration"
reference = "CVE-2026-84222"
date = "2026-05-15"
score = 60
strings:
$kirki_path = "kirki" nocase
$render_path = "render" nocase
$id_param = /(\?|&)(p|post|page_id|pid|id)=\d+/ nocase
$draft_content = /draft|private|pending|trash/ nocase
$post_type = "post_type=" nocase
$content_type = "text/html" nocase ascii
condition:
uint16(0) == 0x0D0A or filesize < 10KB
and any of ($kirki_path, $render_path)
and any of ($id_param)
and (any of ($draft_content) or any of ($post_type))
}
Suricata IDS Rule
alert http any any -> any any (msg:"CVE-2026-84222 Attempt - WordPress Kirki Plugin Unauthenticated Post Content Disclosure - Post ID Enumeration"; flow:to_server,established; content:"kirki"; http_uri; nocase; content:"/"; http_uri; within:40; pcre:"/(\?|&)(p|post|page_id|pid|id)=\d+/Ui"; reference:cve,2026-84222; classtype:attempted-recon; sid:8422201; rev:1; metadata:attack_target Web_Server, created_at 2026_05_15, deployment Perimeter, signature_severity Major, updated_at 2026_05_15, tag CVE-2026-84222;)
Elastic Detection
// EQL query to identify web requests that combine Kirki plugin URL segments
// with numeric post-ID parameters, filtering out known-good admin traffic.
sequence by source.ip with maxspan=10m
[network where event.category == "web" and
url.path : "*kirki*" and
url.query != null]
[network where event.category == "web" and
url.query : "*p=*" or url.query : "*post=*" or url.query : "*id=*" and
// substring-based numeric check pragmatically handled via wildcard
url.query : "*=*[0-9]" ]
Note: EQL does not natively support regex extraction of numeric digits; the above rule relies on wildcard matching for numeric terminals. For precise detection, prefer the Sigma rule with a URI regex or implement a Lucene query that applies a runtime field with grok pattern %{NUMBER:post_id}.
Splunk SPL Query
index=web sourcetype=access_combined
| eval uri_noquery = split(uri, "?")
| eval uri_path = mvindex(uri_noquery, 0)
| eval query_string = replace(uri, "^[^?]*\?", "")
| where like(uri_path, "%kirki%")
| rex field=query_string "(?:p|post|page_id|pid|id)=(?<post_id>\d+)"
| where isnotnull(post_id)
| stats count by src_ip, uri, post_id, status
| where count > 5
| table _time, src_ip, uri, post_id, status, count
| sort - count
This query identifies IP addresses sending more than 5 requests in aggregate that include a numeric post-ID parameter to a Kirki-related path, which is a strong indicator of post-ID enumeration against the vulnerable plugin.
Wazuh OSSEC Rule
<group name="web, wordpress,">
<!-- Detect repeated requests to Kirki-related URI paths with post-ID parameters,
indicative of CVE-2026-84222 enumeration activity. -->
<rule id="8422201" level="8">
<decoded_as>web</decoded_as>
<match>kirki</match>
<regex>(p|post|page_id|pid|id)=\d+</regex>
<description>CVE-2026-84222: Possible exploitation of Kirki plugin authorization bypass (WordPress post enumeration)</description>
<group>attack.t1190,</group>
<mitre>
<id>T1190</id>
</mitre>
<info type="cve">CVE-2026-84222</info>
<info type="cwe">CWE-639</info>
</rule>
<!-- Aggregate rule to raise alert after 5 such requests from same IP in 5 minutes -->
<rule id="8422202" level="12" frequency="5" timeframe="300" overwrite="yes">
<if_matched_sid>8422201</if_matched_sid>
<same_source_ip/>
<description>CVE-2026-84222: Aggregated enumeration attempts detected from a single source IP</description>
<group>attack.t1190,</group>
<mitre>
<id>T1190</id>
</mitre>
</rule>
</group>
Mitigation & Patch Guidance
Patch confidence for CVE-2026-84222 is 0/4 across all tracked sources, indicating that no patch evidence exists, and the vendor fix is not confirmed to be publicly available. Per the NVD description, the fix is expected in Kirki version 6.3.0; however, until an actual release is observed, the plugin must be treated as fully vulnerable. Immediate mitigations should prioritize limiting exposure:
Immediate Mitigations (to apply today):
- If the Kirki plugin is not actively required by the WordPress theme, deactivate and uninstall it immediately. This eliminates the vulnerable code path entirely and is the highest-confidence mitigation.
- If the plugin is required, restrict network-level access to the WordPress management and rendering endpoints. Use a Web Application Firewall (WAF) to block requests matching the suspected enumeration pattern (URI containing
kirkicombined with a numeric post-ID parameter). Note that this is a compensating control and does not address the root cause. - Review WordPress configuration to minimize the sensitivity of draft/pending/private content. Move any critical unpublished content offline to a staging environment that is not internet-facing, reducing the confidentiality impact if exploited.
- Monitor WordPress access logs and intrusion detection alerts (per the rules above) for anomalous post-ID enumeration patterns.
Patch and Upgrade Steps:
- Subscribe to the Kirki plugin's official update channel (WordPress.org plugin page) and any security mailing lists to be notified when version 6.3.0 is released. As of this report, 6.3.0 has not been observed as publicly available; do not assume the fix exists until a stable release is confirmed.
- Once version 6.3.0 is released, update the plugin via the WordPress administrative dashboard or by replacing the plugin directory with the new version. Verify the version number in
wp-content/plugins/kirki/kirki.phpreads6.3.0or higher after update. - After patching, audit themes and custom code for dependencies on the vulnerable behavior; some themes may rely on the ability to render restricted content (e.g., previewing drafts during theme customization). Test that these features still function through the intended, authenticated WordPress preview mechanism.
Long-Term Hardening:
- Establish a plugin update SLA — patch WordPress plugins within 7 days of a security release, prioritizing plugins with unauthenticated attack vectors.
- Deploy automated WordPress vulnerability scanning in the CI/CD pipeline to flag installed plugin versions against the WPScan or similar vulnerability databases.
- Implement principle of least privilege for content roles: restrict "draft/pending" creation to roles that strictly require it and remove unused author/editor accounts.
- Harden WordPress itself: use a security plugin, enable two-factor authentication for content editors, restrict
/wp-adminaccess by IP allowlist, and ensure the database account used by WordPress has no cross-tenant privileges. - Adopt a Web Application Firewall (WAF) with virtual patching capability; configure an emergency virtual patch rule for CVE-2026-84222 that is active until the vendor's official fix is confirmed and deployed.
- Conduct a content review after mitigation — any drafts, private pages, or trashed posts that may have been exposed should be assessed for sensitive data leakage; if sensitive content was present, treat it as compromised and invalidate any embedded credentials or tokens.
References
- NVD Entry — CVE-2026-84222: https://nvd.nist.gov/vuln/detail/CVE-2026-84222
- WordPress Plugin Repository — Kirki Customizer Framework: https://wordpress.org/plugins/kirki/ (monitor for version 6.3.0 release and changelog)
- CWE-639 — Authorization Bypass Through User-Controlled Key: https://cwe.mitre.org/data/definitions/639.html
- MITRE ATT&CK — T1190: Exploit Public-Facing Application: https://attack.mitre.org/techniques/T1190/
- CISA Known Exploited Vulnerabilities Catalog: https://www.cisa.gov/known-exploited-vulnerabilities-catalog (CVE-2026-84222 is NOT listed, confirming no federal in-the-wild evidence)
Threat Actor Campaign / Exploitation Evidence: As of the publication date of this report, there are no known threat actor campaigns, zero-day exploit disclosures, or evidence of exploitation in the wild associated with CVE-2026-84222. The vulnerability is not present in the CISA KEV catalog. The absence of a public exploit and the unpatched status combine to place this in a "high-risk, low-immediate-likelihood" category; however, the ease of exploitation for the underlying authorization-bypass class (simple HTTP GET requests with crafted post IDs) suggests that weaponization is probable once technical details spread within the security community. SOC teams should prioritize monitoring and compensating controls now, rather than waiting for exploit code to be published.
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.