Skip to main content

PostX EUVDEUVD-2026-96224

| CVE-2026-96840 HIGH
Cross-site Scripting (XSS) (CWE-79)
2026-10-10 Wordfence GHSA-8pf3-qx3w-w4jg
7.2
CVSS 3.1 · Vendor: Wordfence
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Register Subscriber account on site
  2. Delivery
    Store double-quote payload in display_name
  3. Exploit
    Payload breaks out of alt attribute
  4. Execution
    Victim loads archive title block
  5. Impact
    Arbitrary script executes in browser

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A05:2025 - Injection
ASVS 5.0
V1 - Encoding and Sanitization Output encoding, context-aware escaping
MITRE ATT&CK

2 techniques across 2 tactics: Initial Access, Execution

The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up.

Exploitation Conditions

Requires an authenticated Subscriber-level (or higher) account, so the site must have open user registration or allow attacker-controlled low-privilege accounts; the attacker sets a double-quote-bearing value in their display_name via /wp-admin/profile.php, relying on WordPress core's pre_user_display_name filter using ENT_NOQUOTES (encodes &, <, > but not double-quotes). Exploitation further requires the site to render the PostX Archive Title block, where display_name is output into the alt="" attribute at Archive_Title.php:144 without sufficient escaping. Limiting factors: authentication is needed (Subscriber), so it is not truly unauthenticated despite the stated PR:N; sites that disable registration or do not use the Archive Title block are not exploitable in this path.

Impact

This is a moderate-priority stored XSS (CWE-79) in a popular WordPress plugin, but the signals conflict in a way defenders must reconcile. The input CVSS of 7.2 (CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:L/I:L/A:N) encodes PR:N (unauthenticated), yet the description itself states the payload is stored by 'a Subscriber-level user' via /wp-admin/profile.php - meaning an authenticated Subscriber account is actually required. This is a direct contradiction: CVSS vector says unauthenticated but the described mechanism requires authentication, so the true privilege requirement is PR:L, not PR:N - verify with Wordfence. No EPSS score, no CISA KEV listing, and no public exploit code are present in the provided data, so there is no public exploit identified at time of analysis and no evidence of active exploitation. The scope-change (S:C) and network vector are legitimate because the stored script executes in the browser of any visitor to the rendered archive page, crossing a trust boundary from a low-privileged user to other users/admins. Net assessment: a real but not emergency issue - exploitation depends on open user registration and use of the PostX Archive Title block, which lowers real-world risk below what the 7.2 base score alone suggests.

Exploit ScenarioDerived

An attacker registers a free Subscriber account on a site where registration is open, then edits their profile at /wp-admin/profile.php to set a display_name containing a double-quote payload that WordPress's pre_user_display_name filter (ENT_NOQUOTES) fails to encode. When any visitor or administrator loads a page rendering the PostX Archive Title block, the stored payload breaks out of the alt="" attribute at Archive_Title.php:144 and executes arbitrary JavaScript in their session. No public exploit code is identified at time of analysis.

This Week Schedule remediation this week. Why: HIGH severity (CVSS 7.0-8.9).
No patch listed yet 0.2% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – Oct 10, 2026

Stored cross-site scripting in the Post Grid Gutenberg Blocks - PostX WordPress plugin, affecting all versions up to and including 5.1.0, allows an attacker holding a Subscriber-level account to plant JavaScript in the user display_name field that executes for any visitor viewing a page where the plugin renders its Archive Title block. The bypass works because WordPress core's pre_user_display_name filter uses ENT_NOQUOTES, encoding ampersands, angle brackets and greater-than signs but leaving double-quotes intact, so a crafted display_name breaks out of the alt="" attribute at Archive_Title.php:144. Reported by Wordfence with a CVSS v3.1 base score of 7.2; no public exploit identified at time of analysis, though the published CVSS vector claims PR:N while our assessment holds PR:L, since the attack requires an authenticated Subscriber-or-higher account created through open registration or an attacker-controlled low-privilege user.

RemediationAI

Upgrade PostX past 5.1.0 once a patched release is published; the supplied references include an upstream trunk changeset for Archive_Title.php (https://plugins.trac.wordpress.org/changeset/3727209/ultimate-post/trunk/addons/builder/blocks/Archive_Title.php), which indicates an upstream fix available (PR/commit) but does not by itself confirm a tagged, released patched version, so administrators should verify the plugin's changelog or the Wordfence advisory at https://www.wordfence.com/threat-intel/vulnerabilities/id/39472e87-174c-4abf-bc83-fed0939440af?source=cve before assuming a given version is safe. Where upgrading is not immediately possible, the tightest compensating control is to stop the sink from being reachable: remove or replace any page or template that uses the PostX Archive Title block, accepting the loss of that archive heading styling, since without that block the double-quote display_name has no attribute context to escape. A second control is to remove the attacker's ability to plant the payload at all by disabling open user registration and auditing/deleting untrusted Subscriber accounts, which carries the trade-off of blocking legitimate self-service signups and is ineffective on membership or multi-author sites where low-privilege accounts are the norm. Sites that must keep both the block and open registration can put a WAF or plugin-level guard in front of the profile update endpoint (and /wp-admin/profile.php generally) that rejects or strips double-quote characters from the display_name field after core's pre_user_display_name filter runs, understanding that this deviates from core behavior and can mangle legitimate names containing quotes. Finally, treat any historic display_name values as potentially tainted: scan wp_users.display_name (and the usermeta copies) for quote characters followed by markup and sanitize them, because patching the plugin does not retroactively clean already-stored payloads.

Affected VersionsENISA

Post Grid Gutenberg Blocks – PostX 0 ≤5.1.0

Affected Packages

euvd post_grid_gutenberg_blocks_postx no fix

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 1 package in euvd

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

The root cause is CWE-79 (Improper Neutralization of Input During Web Page Generation), specifically the context-confusion class of stored XSS where a value is escaped for one HTML context but emitted into another. The PostX plugin (WordPress slug ultimate-post) ships Gutenberg block renderers, including an Archive Title block whose code at addons/builder/blocks/Archive_Title.php outputs a user's display_name directly into an alt="" attribute (line 144, with related handling around line 98) without attribute-aware escaping. WordPress core does sanitize the display_name on save through the pre_user_display_name filter, but that filter is called with ENT_NOQUOTES, which encodes &, < and > while permitting the double-quote character to survive unmodified - the quote is harmless in a text node but is the single character required to terminate an unquoted or double-quoted HTML attribute. The chain therefore is: low-privileged user sets display_name containing a double-quote plus script/tag payload via /wp-admin/profile.php, core stores it, and the plugin's block markup later echoes it into alt="..." where the injected quote closes the attribute and the remaining markup is parsed as new HTML elements or event handlers. Because the payload is persisted in user metadata rather than a per-request parameter, it executes for every page view that renders the block, giving the site's own origin and its cookies and nonces to the attacker's script in the victim's browser. The relevant CPE (cpe:2.3:a:wpxpo:post_grid_gutenberg_blocks_-_postx) confirms the vendor as wpxpo and the package as the PostX plugin.

Know when PHP gets its next vulnerability

  • Watch products and get an email when something new is published
  • Check this CVE against your own stack and servers
  • Exploit and PoC references, threat intelligence from 22 sources

No credit card · 7-day full trial

Severity by source

Vendor (Wordfence) PRIMARY 7.2 HIGH
AV:N/AC:L/PR:N/UI:N/S:C/C:L/I:L/A:N
vuln.today AI 6.4 MEDIUM

PR:L because the description requires a Subscriber account to store the payload (contradicting the input PR:N); S:C as stored script executes in other users' browsers; C:L/I:L/A:N for typical XSS impact.

3.1 AV:N/AC:L/PR:L/UI:N/S:C/C:L/I:L/A:N
4.0 AV:N/AC:L/AT:N/PR:L/UI:N/VC:L/VI:L/VA:N/SC:L/SI:L/SA:N

Primary rating from Vendor (Wordfence).

CVSS VectorVendor: Wordfence

Attack Vector
Network
Attack Complexity
Low
Privileges Required
None
User Interaction
None
Scope
Changed
Confidentiality
Low
Integrity
Low
Availability
None

DescriptionCVE.org

The Post Grid Gutenberg Blocks - PostX plugin for WordPress is vulnerable to Stored Cross-Site Scripting via display_name User Field in all versions up to, and including, 5.1.0 due to insufficient input sanitization and output escaping. This makes it possible for unauthenticated attackers to inject arbitrary web scripts in pages that will execute whenever a user accesses an injected page. WordPress core's pre_user_display_name filter encodes &, <, and > but leaves double-quotes intact (ENT_NOQUOTES), allowing a Subscriber-level user to store a double-quote in their display_name via /wp-admin/profile.php that subsequently breaks out of the alt="" attribute at Archive_Title.php:144.

Executive ViewAI

Why It Matters

WordPress sites running the PostX (Post Grid Gutenberg Blocks) plugin versions up to and including 5.1.0 are exposed to stored cross-site scripting that can execute for visitors viewing pages that render the Archive Title block. A low-privilege Subscriber account is sufficient to inject the malicious payload, so sites with open registration or weak account controls face elevated risk of visitor session theft, malicious redirects, or content manipulation. No public exploit identified at time of analysis, and no vendor-released patch identified at time of analysis, making this a live operational and reputational risk to public-facing WordPress properties.

Business Impact: High
Compensating Controls

No vendor-released patch identified at time of analysis. Interim mitigations include disabling or removing the PostX plugin until fixed, restricting open registration and low-privilege account creation, sanitizing or validating display_name profile fields, deploying WAF rules to block XSS payloads and double-quote breakout attempts, and monitoring logs for suspicious profile changes or Archive Title block access.

Threat Intelligence Overview

EPSS Score
0.2%
Top 87% exploitable
Prevalence
Medium
popular WordPress Gutenberg blocks plugin, common but not universal
Data Quality
5 sources
Confidence: Medium

How this decision was reached

The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.

SignalValue
Severity HIGH
CISA KEV No
Public POC No
EPSS 0.2%
Patch available No
Active threat No
Deciding rule
HIGH severity (CVSS 7.0-8.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision
Scheduled
Exploitation
None
System Exposure· derived
Open
Automatable
No
Human Impact
High
Technical Impact
Partial

Priority Score

36
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +36
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Cross-Site Scripting occurs when an application accepts untrusted data and sends it to a web browser without proper validation or encoding.

More in PHP

View all
CVE-2019-11043 CRITICAL POC
9.8 Oct 28

In PHP versions 7.1.x below 7.1.33, 7.2.x below 7.2.24 and 7.3.x below 7.3.11 in certain configurations of FPM setup it

CVE-2012-1823 CRITICAL POC
9.8 May 11

sapi/cgi/cgi_main.c in PHP before 5.3.12 and 5.4.x before 5.4.2, when configured as a CGI script (aka php-cgi), does not

CVE-2016-1555 CRITICAL POC
9.8 Apr 21

(1) boardData102.php, (2) boardData103.php, (3) boardDataJP.php, (4) boardDataNA.php, and (5) boardDataWW.php in Netgear

CVE-2018-11138 CRITICAL POC
9.8 May 31

The '/common/download_agent_installer.php' script in the Quest KACE System Management Appliance 8.0.318 is accessible by

CVE-2024-11680 CRITICAL POC
9.8 Nov 26

ProjectSend versions prior to r1720 are affected by an improper authentication vulnerability. Rated critical severity (C

CVE-2025-49113 CRITICAL POC
9.9 Jun 02

Roundcube Webmail contains a critical PHP object deserialization vulnerability (CVE-2025-49113, CVSS 9.9) that allows au

CVE-2017-9841 CRITICAL POC
9.8 Jun 27

Util/PHP/eval-stdin.php in PHPUnit before 4.8.28 and 5.x before 5.6.3 allows remote attackers to execute arbitrary PHP c

CVE-2025-0108 HIGH POC
8.8 Feb 12

Palo Alto Networks PAN-OS management web interface contains an authentication bypass allowing unauthenticated attackers

CVE-2021-25298 HIGH POC
8.8 Feb 15

Nagios XI version xi-5.7.5 is affected by OS command injection. Rated high severity (CVSS 8.8), this vulnerability is re

CVE-2021-25296 HIGH POC
8.8 Feb 15

Nagios XI version xi-5.7.5 is affected by OS command injection. Rated high severity (CVSS 8.8), this vulnerability is re

CVE-2013-4983 CRITICAL POC
10.0 Sep 10

The get_referers function in /opt/ws/bin/sblistpack in Sophos Web Appliance before 3.7.9.1 and 3.8 before 3.8.1.1 allows

CVE-2023-6553 CRITICAL POC
9.8 Dec 15

The Backup Migration plugin for WordPress is vulnerable to Remote Code Execution in all versions up to, and including, 1

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy