Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessRegister subscriber-level account
-
DeliverySubmit listing via geodir_save_post AJAX
-
ExploitStore entity-encoded payload in text custom field
-
ExecutionBypass strpos() tag-strip on save
-
PersistVictim views injected listing page
-
ImpactScript executes in victim 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 account of at least subscriber level on a site running GeoDirectory <=2.8.181, plus the ability to save a listing carrying a text-type custom field (e.g., 'phone') through the AJAX geodir_save_post endpoint. The specific technique is submitting entity-encoded angle brackets (<img src=x onerror=alert(1)>) so the payload evades the plugin's strpos()-gated tag-stripping and is stored, then executes when any user renders the affected page. Limiting factors: an account is needed (PR:L), and the payload only fires when a victim views the injected listing (execution deferred to page render). Practical risk rises sharply on the common configuration where the site permits open user/lister self-registration, making the required subscriber account trivial to obtain. |
| Impact | This is a genuine but moderate-severity issue, not a top-tier emergency. The provided CVSS 3.1 vector (AV:N/AC:L/PR:L/UI:N/S:C/C:L/I:L/A:N = 6.4) accurately reflects a stored XSS: network-reachable and low-complexity, but gated by authentication (PR:L requires at least subscriber-level access) with a scope change (S:C) because injected script executes in the browsers of other users/visitors who view the page. Impact is limited to C:L/I:L with no availability impact, consistent with typical XSS. No EPSS score, no CISA KEV listing, and no public POC were supplied in the intelligence, so exploitation status is 'no public exploit identified at time of analysis.' The technical writeup is unusually detailed (naming the geodir_save_post AJAX endpoint and the entity-encoded-angle-bracket bypass of the strpos()-gated tag-strip), which lowers the bar for a researcher to reproduce, but that is not the same as active exploitation. There is a mild real-world amplifier: many GeoDirectory deployments allow open user registration so listers can submit business entries, meaning the required subscriber account is often trivially self-obtainable - this raises practical risk closer to unauthenticated than the PR:L metric alone implies. No signals conflict; the main gap is the absence of EPSS/KEV/POC data to gauge exploitation likelihood. Net: patch in the normal cycle, prioritize on sites with open registration. |
| Exploit ScenarioDerived | An attacker registers a subscriber (or contributor/lister) account on a GeoDirectory-powered site, then submits or edits a listing, placing an entity-encoded payload such as <img src=x onerror=alert(1)> into a text custom field like 'phone' via the geodir_save_post AJAX endpoint; the encoding slips past the plugin's strpos()-based tag-stripping check and is stored. When any visitor or administrator later views that listing page, the script executes in their browser, enabling session/cookie theft or admin-context actions. No public POC is referenced, but the advisory documents the exact bypass technique. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Sep 25, 2026
Stored cross-site scripting in the GeoDirectory WordPress business-directory and classified-listings plugin (all versions up to and including 2.8.181) lets an attacker with only a subscriber-level account plant arbitrary JavaScript that runs in the browser of any user who later views the injected listing. The payload is submitted through the AJAX geodir_save_post endpoint into a text-type custom field such as 'phone', using entity-encoded angle brackets to defeat the plugin's strpos()-gated tag-stripping check, and the assessed CVSS 3.1 vector (AV:N/AC:L/PR:L/UI:N/S:C, 6.4) reflects a scope change with limited confidentiality and integrity impact and no availability impact. There is no confirmed active exploitation (the issue is not in CISA KEV) and no public exploit code identified at time of analysis; practical risk rises sharply on sites that permit open user or lister self-registration, because obtaining the required subscriber account then becomes trivial, and impact is deferred until a victim renders the poisoned page.
RemediationAI
Upstream fix available (changeset 3705730 in the WordPress.org plugin Trac, referenced at https://plugins.trac.wordpress.org/changeset?reponame=&old=3705730%40geodirectory&new=3705730%40geodirectory); a specific released patched version was not independently confirmed from the supplied data, so administrators should update the plugin to the newest version published after 2.8.181 and verify the change is present rather than assuming the current install is fixed. Because patching may lag on managed hosts, compensating controls are worthwhile: the single most effective measure is to close the account prerequisite by disabling open self-registration and front-end listing submission for untrusted roles (Administrators > Settings > General 'Anyone can register' off, and restricting GeoDirectory submission to vetted roles), accepting the loss of community-submitted listings as the trade-off; next, remove or restrict access to text-type custom fields such as 'phone' for non-privileged roles, which reduces attack surface but degrades the listing form for legitimate users; require moderation/approval of every new or edited listing, which does not stop storage of the payload but prevents it from being rendered to the public until reviewed; and add a web application firewall or reverse-proxy rule that rejects or re-encodes requests to the geodir_save_post AJAX endpoint containing entity-encoded markup (<, <, or URL-encoded equivalents) in custom-field parameters, noting such rules can produce false positives on benign text and need tuning. Finally, since the payload executes only on render, deploying a restrictive Content-Security-Policy on listing pages can neutralize execution of injected inline scripts as a stopgap, though CSP rollout may break legitimate themes and third-party scripts. No vendor-released patch version is asserted here; consult the Wordfence advisory link above for the vendor's current fix guidance.
Affected VersionsENISA
Affected Packages
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
This is a classic CWE-79 improper-neutralization issue in a WordPress plugin rather than in WordPress core. GeoDirectory registers custom post types for business listings and lets site owners define custom fields, including free-text fields such as a phone number; values for those fields are written by the front-end AJAX action geodir_save_post and persisted as post meta, then echoed back when a listing page or directory view is rendered. The vulnerability chain spans several plugin files: input handling and the tag-stripping guard around includes/post-functions.php lines 1347 and 1803, normalization/formatting in includes/formatting-functions.php line 56, and the AJAX save path in includes/class-geodir-ajax.php line 821. The sanitization check is gated on a strpos() search for literal angle brackets, so a payload submitted in entity-encoded form such as <img src=x onerror=alert(1)> contains no literal '<' character, passes the strip check, is stored verbatim, and is reconstituted into executable markup when the stored value is output without adequate escaping. The affected component is the plugin distributed under the CPE cpe:2.3:a:paoltaia:geodirectory_-_wp_business_directory_plugin_and_classified_listings_directory, and the vulnerable code paths were published by Wordfence with direct links to the 2.8.181 tagged source, which is what makes the evasion technique reproducible for defenders writing detection rules.
Know when Wordpress Plugin 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
AV:N/AC:L/PR:L/UI:N/S:C/C:L/I:L/A:N
Network-reachable stored XSS needing a low-privilege (subscriber) account, so PR:L; scope changes (S:C) as script runs in other users' browsers with limited C/I and no availability impact.
Primary rating from Vendor (Wordfence).
CVSS VectorVendor: Wordfence
DescriptionCVE.org
The GeoDirectory - WP Business Directory Plugin and Classified Listings Directory plugin for WordPress is vulnerable to Stored Cross-Site Scripting via Text-type Custom Field (e.g., 'phone') in all versions up to, and including, 2.8.181 due to insufficient input sanitization and output escaping. This makes it possible for authenticated attackers, with subscriber-level access and above, to inject arbitrary web scripts in pages that will execute whenever a user accesses an injected page. The payload must be stored in a text-type custom field (such as a phone field) via the AJAX geodir_save_post endpoint, using entity-encoded angle brackets (e.g., <img src=x onerror=alert(1)>) to bypass the strpos()-gated tag-stripping check.
Threat Intelligence Overview
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.
What every action level means
SSVC AssessmentENISA
Priority Score
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 Wordpress Plugin
View allThe Backup Migration plugin for WordPress is vulnerable to Remote Code Execution in all versions up to, and including, 1
The Hash Form - Drag & Drop Form Builder plugin for WordPress is vulnerable to arbitrary file uploads due to missing fil
Authentication bypass in the LiteSpeed Cache WordPress plugin (versions prior to 6.5.0.1) allows unauthenticated remote
The Simple File List plugin for WordPress through version 4.2.2 contains an unauthenticated remote code execution vulner
The SureTriggers WordPress plugin through version 1.0.82 contains a privilege escalation vulnerability that allows unaut
The Ninja Forms plugin before 2.9.42.1 for WordPress allows remote attackers to conduct PHP object injection attacks via
The Business Directory Plugin - Easy Listing Directories for WordPress plugin for WordPress is vulnerable to time-based
SQL injection in the NotificationX WordPress plugin (versions up to and including 2.8.2) allows unauthenticated remote a
The POST SMTP Mailer - Email log, Delivery Failure Notifications and Best Mail SMTP for WordPress plugin for WordPress i
The MasterStudy LMS WordPress Plugin - for Online Courses and Education plugin for WordPress is vulnerable to union base
The Email Subscribers by Icegram Express plugin for WordPress is vulnerable to SQL Injection via the ‘hash’ parameter in
Remote code execution in the WP Query Console WordPress plugin (versions up to and including 1.0) by Ajit Bohra allows u
EUVD-2026-86533
GHSA-hg79-3mhg-pxqx
NVD
CVE.org
EPSS
Vulnrichment
Exploit-DB