Skip to main content

GeoDirectory EUVDEUVD-2026-86541

| CVE-2026-96766 MEDIUM
Cross-site Scripting (XSS) (CWE-79)
2026-09-25 Wordfence GHSA-qh46-923q-c94x
6.4
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 and own a listing
  2. Delivery
    Submit AJAX save with malicious business_hours payload
  3. Exploit
    Bypass authorship-only nonce check
  4. Execution
    Store script in listing page
  5. Impact
    Script executes in victim/admin 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 WordPress account with at least subscriber-level access on a site running GeoDirectory ≤2.8.183, and the attacker must own a listing (post authorship is the only check the AJAX save handler enforces besides a nonce). Exploitation therefore depends on the site permitting user registration and listing creation/ownership by low-privileged users - a common but not universal GeoDirectory configuration. The stored payload executes only when a user subsequently views the injected listing page (delayed, victim-side trigger). Limiting factors: authentication is mandatory (PR:L, no anonymous exploitation), impact is limited to script execution in browser context (C:L/I:L, no availability impact), and sites that restrict listing creation to trusted roles are not practically exploitable by arbitrary users.

Impact

This is a genuine but moderate-severity issue, not a top-priority emergency. The CVSS 3.1 vector (AV:N/AC:L/PR:L/UI:N/S:C/C:L/I:L/A:N = 6.4) indicates network-reachable, low-complexity exploitation but requires authentication at subscriber level (PR:L) and yields only low confidentiality/integrity impact with a scope change (S:C, reflecting XSS crossing into other users' browser context). The description reinforces this: the flaw is an authorization gap - the AJAX save handler checks only post authorship plus a nonce with no capability check, so any subscriber who owns a listing can inject persistent script. No EPSS score, KEV listing, or public POC is present in the provided data, so exploitation status is 'no public exploit identified at time of analysis.' The Wordfence threat-intel report confirms the vulnerability and its root cause but does not indicate active exploitation. Realistically this is a widespread-plugin stored-XSS that matters for sites accepting untrusted registrations, but the subscriber-ownership precondition and stored (rather than wormable unauthenticated) nature keep real-world urgency in the medium band. Note the S:C scope-change assignment is a defensible but debatable choice typical of Wordfence XSS scoring; no signal conflicts require vendor verification.

Exploit ScenarioDerived

On a GeoDirectory site that allows public/subscriber registration and listing ownership, an attacker registers a subscriber account and creates or claims a listing. They then send a crafted AJAX save request setting the 'business_hours' parameter to a malicious script payload, which is stored and later executes in the browser of any visitor or administrator who views the listing page. No public exploit code is identified in the provided data, but the technique is straightforward given the documented missing capability check.

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.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 – Sep 25, 2026

Stored cross-site scripting in the GeoDirectory WordPress business directory plugin (all versions up to and including 2.8.183) lets any authenticated subscriber-level user who owns a listing inject arbitrary JavaScript through the 'business_hours' parameter, which is then executed in the browser of any user who views the affected listing page. The AJAX save handler enforces only post authorship plus a nonce and performs no capability check or output escaping, so practical exploitability depends on whether the site allows low-privileged users to register and own listings, a common but not universal GeoDirectory configuration. Authentication is mandatory and impact is confined to browser-context script execution (CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:L/I:L/A:N), making this a genuine but moderate-severity issue rather than a top-priority emergency; no public exploit code has been identified at time of analysis.

RemediationAI

No patched release version number is independently confirmed in the provided data, but the vendor reference to plugins.trac.wordpress.org changeset 3710682 for the geodirectory repository points to an upstream fix, so administrators should apply the latest GeoDirectory release above 2.8.183 (or the changeset's resulting build) and verify the fix before relying on it - see the Wordfence advisory at https://www.wordfence.com/threat-intel/vulnerabilities/id/bc743651-cfbc-487b-9d1b-9aab6d3a57b7?source=cve and the changeset at https://plugins.trac.wordpress.org/changeset?reponame=&old=3710682%40geodirectory&new=3710682%40geodirectory. Where patching must be deferred, the most effective compensating control is to close the prerequisite rather than the payload: disable open user registration and restrict listing creation/ownership to trusted roles (editor, author, or a custom vetted role), which removes the attacker's ability to own a listing and neutralizes the authorship-only authorization check - the trade-off is loss of self-service directory submissions. Restricting or disabling the business hours custom field until patched also removes the injection vector at the cost of that feature's functionality, and sanitizing or escaping the 'business_hours' output via a small site-specific filter/mu-plugin is a viable stopgap but requires code maintenance and can be bypassed if other custom fields share the same weak handler. Finally, a WAF rule blocking script/event-handler payloads in business-hours POST bodies to admin-ajax.php provides defense in depth but should not be treated as a substitute for upgrading, since encoding variations can evade signature-based filtering.

Affected VersionsENISA

GeoDirectory – WP Business Directory Plugin and Classified Listings Directory 0 ≤2.8.183

Affected Packages

euvd geodirectory_wp_business_directory_plugin_and_classified_listings_directory 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 vulnerability is a classic CWE-79 improper neutralization of input during web page generation (stored/persistent XSS) in a WordPress plugin. GeoDirectory registers custom fields - including the 'business_hours' field - that are rendered on the front end and persisted through WordPress's admin-ajax.php AJAX entry points. According to the referenced source files (includes/business-hours-functions.php, includes/class-geodir-post-data.php, includes/class-geodir-ajax.php, and includes/custom-fields/input-functions-aui.php at tag 2.8.182), the AJAX save handler for that field validates only that the current user authored the target post and supplies a valid nonce; it never calls current_user_can() with an appropriate capability and never sanitizes the incoming 'business_hours' value on input or escapes it on output. Because WordPress nonces are available to any logged-in account and authorship is self-selectable by a subscriber who created the listing, the authorization boundary collapses to 'any registered user with a listing.' The untrusted string is then stored in postmeta and echoed into listing pages, so the injected markup executes in the session context of every subsequent visitor - including administrators reviewing the listing - with the CVSS S:C scope change reflecting that the script crosses from the plugin's stored data into the broader WordPress page context and could reach privileged sessions.

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

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

Network-reachable AJAX endpoint (AV:N), low complexity, but requires subscriber authentication owning a listing (PR:L); stored XSS crosses into other users' browsers (S:C) with low C/I and no availability 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:P/VC:N/VI:N/VA:N/SC:L/SI:L/SA:N

Primary rating from Vendor (Wordfence).

CVSS VectorVendor: Wordfence

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

DescriptionCVE.org

The GeoDirectory - WP Business Directory Plugin and Classified Listings Directory plugin for WordPress is vulnerable to Stored Cross-Site Scripting via the 'business_hours' parameter in all versions up to, and including, 2.8.183 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. This is possible because the AJAX save handler validates only post authorship and a nonce with no additional capability check, allowing any subscriber-level user who owns a listing to exploit this vulnerability.

Threat Intelligence Overview

EPSS Score
0.2%
Top 91% exploitable
Prevalence
High
GeoDirectory is a widely deployed WordPress business-directory plugin
Data Quality
3 sources
Confidence: Low

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 MEDIUM
CISA KEV No
Public POC No
EPSS 0.2%
Patch available No
Active threat No
Deciding rule
MEDIUM severity (CVSS 4.0-6.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· derived
Scheduled
Exploitation
None
System Exposure· derived
Open
Automatable
No
Human Impact· derived
High
Technical Impact
Partial

Priority Score

32
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +32
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.

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

CVE-2024-5084 CRITICAL POC
9.8 May 23

The Hash Form - Drag & Drop Form Builder plugin for WordPress is vulnerable to arbitrary file uploads due to missing fil

CVE-2024-44000 CRITICAL POC
9.8 Oct 20

Authentication bypass in the LiteSpeed Cache WordPress plugin (versions prior to 6.5.0.1) allows unauthenticated remote

CVE-2020-36847 CRITICAL POC
9.8 Jul 12

The Simple File List plugin for WordPress through version 4.2.2 contains an unauthenticated remote code execution vulner

CVE-2025-27007 CRITICAL POC
9.8 May 01

The SureTriggers WordPress plugin through version 1.0.82 contains a privilege escalation vulnerability that allows unaut

CVE-2016-1209 CRITICAL POC
9.8 May 14

The Ninja Forms plugin before 2.9.42.1 for WordPress allows remote attackers to conduct PHP object injection attacks via

CVE-2024-4443 CRITICAL POC
9.8 May 22

The Business Directory Plugin - Easy Listing Directories for WordPress plugin for WordPress is vulnerable to time-based

CVE-2024-1698 CRITICAL POC
9.8 Feb 27

SQL injection in the NotificationX WordPress plugin (versions up to and including 2.8.2) allows unauthenticated remote a

CVE-2023-6875 CRITICAL POC
9.8 Jan 11

The POST SMTP Mailer - Email log, Delivery Failure Notifications and Best Mail SMTP for WordPress plugin for WordPress i

CVE-2024-1512 CRITICAL POC
9.8 Feb 17

The MasterStudy LMS WordPress Plugin - for Online Courses and Education plugin for WordPress is vulnerable to union base

CVE-2024-4295 CRITICAL POC
9.8 Jun 05

The Email Subscribers by Icegram Express plugin for WordPress is vulnerable to SQL Injection via the ‘hash’ parameter in

CVE-2024-50498 CRITICAL POC
10.0 Oct 28

Remote code execution in the WP Query Console WordPress plugin (versions up to and including 1.0) by Ajit Bohra allows u

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