Skip to main content

GeoDirectory EUVDEUVD-2026-91921

| CVE-2026-103913 HIGH
SQL Injection (CWE-89)
2026-10-03 Wordfence GHSA-285m-c668-wj9h
7.5
CVSS 3.1 · Vendor: Wordfence
View

Attack ChainAIDerived

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

  1. Access
    Register/obtain Subscriber account
  2. Delivery
    Create pending listing with SQL payload in lat/long
  3. Exploit
    Call geodir_widget_listings AJAX with set_post and sort_by=distance_asc
  4. Execution
    Injected SQL executes in distance sub-expression
  5. Impact
    Extract sensitive data from database

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A05:2025 - Injection
ASVS 5.0
V1 - Encoding and Sanitization Parameterized queries, prepared statements
MITRE ATT&CK

2 techniques across 2 tactics: Initial Access, Persistence

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 sites that disable open user registration are substantially protected. The attacker must be able to create a listing and store a crafted payload in the listing's latitude/longitude coordinate fields (which lack numeric validation and escaping), then invoke the wp_ajax_nopriv_geodir_widget_listings handler with set_post=<their-pending-listing-id> and sort_by=distance_asc to reach the vulnerable distance sub-expression in geodir_gps_query_part(). Affected versions are GeoDirectory ≤ 2.8.186; no user interaction from a victim is needed. Limiting factors: authentication requirement (Subscriber+), attacker must own a listing in pending state, and the specific sort_by=distance_asc/set_post request parameters must be supplied.

Impact

This is a genuine but conditional concern rather than a top-tier emergency. The CVSS 3.1 vector (AV:N/AC:L/PR:N/UI:N, score 7.5, confidentiality-only) models a network-reachable, low-complexity, no-interaction SQL injection with high data-exposure impact - which on its face looks like a drive-by credential/data theft bug. However, there is a direct and important conflict between the CVSS vector and the Wordfence-authored description: the vector asserts PR:N (unauthenticated), while the description explicitly states exploitation requires 'authenticated attackers, with Subscriber-level access and above.' The exploit path also requires a pending listing the attacker controls (set_post=<pending-listing-id>) plus sort_by=distance_asc against the wp_ajax_nopriv_geodir_widget_listings handler. The Subscriber-level requirement is a meaningful mitigant where open/self-registration is disabled, but it is a low bar on sites that allow public account creation (common for directory sites that use this plugin). No EPSS score, no CISA KEV listing, and no public POC are present in the provided data, so there is no evidence of active exploitation or weaponization - this reads as a high-severity-by-impact but not-yet-exploited issue. Net priority: patch promptly on internet-facing sites that permit user registration; lower urgency where registration is closed. Treat the PR:N in the vector as likely mislabeled - verify against Wordfence, because it materially changes the real exploitation bar.

Exploit ScenarioDerived

On a GeoDirectory site that permits user registration, an attacker registers a Subscriber account, creates a (pending) listing, and stores a crafted SQL payload in the latitude/longitude coordinate fields, which are interpolated unsanitized into the distance sub-expression of geodir_gps_query_part(). The attacker then calls the geodir_widget_listings AJAX endpoint with set_post set to their pending listing's ID and sort_by=distance_asc, causing the injected SQL to execute and return sensitive database contents (e.g., user data, password hashes). No public exploit code is identified at time of analysis, but the described path is deterministic and the vendor has detailed the exact trigger.

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

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

Alert me

AnalysisAIv1 – Oct 03, 2026

SQL injection in the GeoDirectory WordPress plugin (all versions up to and including 2.8.186) allows an attacker holding a Subscriber-level account or higher to store a crafted payload in a listing's latitude/longitude coordinate fields and then trigger it through the public wp_ajax_nopriv_geodir_widget_listings AJAX handler, resulting in arbitrary SQL being appended to existing queries and disclosure of sensitive database contents. Successful exploitation requires the attacker to create and own a listing (pending state) whose coordinates are saved without numeric validation or escaping, then request the handler with set_post=<their-listings-id> and sort_by=distance_asc; no victim interaction is needed. No public exploit code has been identified at the time of analysis, and the practical risk is conditional: sites that disable open user registration, thereby preventing attackers from obtaining Subscriber accounts, are substantially protected.

RemediationAI

Upgrade GeoDirectory beyond version 2.8.186 to the first release containing the upstream fix; the plugin Trac changeset at https://plugins.trac.wordpress.org/changeset?reponame=&old=3723536%40geodirectory&new=3723536%40geodirectory documents the code change, though a tagged patched build is not independently confirmed here, so verify the installed version against the vendor changelog rather than assuming a version number. If immediate upgrade is not possible, the highest-value compensating control is to disable open user registration and audit existing Subscriber accounts, since the attack requires an authenticated user able to create a listing - this is effective because the stored payload cannot be planted without that account, but it will break self-service directory submissions and community sign-ups. Additionally, remove or disable the GeoDirectory listings widget that renders the distance-based ordering, or otherwise block requests hitting wp_ajax_nopriv_geodir_widget_listings with sort_by=distance_asc and a set_post parameter, which removes the reachable sink at the cost of losing distance-sorted listing displays. Disabling the geolocation/distance-search feature entirely eliminates the vulnerable geodir_gps_query_part() code path but also removes proximity search functionality from the directory. Finally, a WAF or reverse-proxy rule rejecting SQL metacharacters in the set_post and sort_by parameters of that AJAX endpoint provides defense in depth if the above functional changes are unacceptable, though it is bypassable and should not be the sole control.

Affected VersionsENISA

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

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 flaw is a classic CWE-89 SQL injection caused by the intersection of two defects: missing numeric validation/escaping when listing coordinates are persisted (GeoDirectory post-data handling, general-functions.php and class-geodir-post-data.php in the 2.8.185 source tree), and direct string interpolation of those stored values into a distance sub-expression built by geodir_gps_query_part() (general-functions.php lines 1312 and 1394). Because the value is interpolated rather than parameterized or quoted through $wpdb->prepare(), an attacker-controlled coordinate string is compiled into the query verbatim. The injection is reachable from an unauthenticated AJAX route, wp_ajax_nopriv_geodir_widget_listings (class-geodir-ajax.php line 1464; widget rendering in class-geodir-widget-listings.php line 862), but the payload itself must already exist in the database, which ties the attack to the listing-creation step and therefore to an authenticated Subscriber-or-higher account. The backend is MySQL/MariaDB via WordPress's database abstraction layer, so the injected content can be used to UNION/extract data from wp_users and other sensitive tables.

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 7.5 HIGH
AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N
vuln.today AI 6.5 MEDIUM

Description requires Subscriber-level authentication so PR:L (not PR:N as input vector claims); network-reachable, low complexity, confidentiality-only data extraction, no integrity/availability impact.

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

Primary rating from Vendor (Wordfence).

CVSS VectorVendor: Wordfence

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

DescriptionCVE.org

The GeoDirectory plugin for WordPress is vulnerable to SQL Injection via the stored latitude/longitude coordinates of a listing in versions up to, and including, 2.8.186. This is due to insufficient escaping and the absence of numeric validation on coordinate values when a listing is saved, combined with the direct string interpolation of those values into a distance sub-expression in geodir_gps_query_part() that is later executed by the public wp_ajax_nopriv_geodir_widget_listings handler when a caller supplies set_post=<pending-listing-id> and sort_by=distance_asc. This makes it possible for authenticated attackers, with Subscriber-level access and above, to append additional SQL queries into already existing queries that can be used to extract sensitive information from the database.

Executive ViewAI

Why It Matters

The GeoDirectory WordPress plugin (all versions up to 2.8.186) contains a high-severity SQL injection vulnerability that allows attackers with a Subscriber-level account to disclose sensitive database contents. Organizations using this plugin with open user registration are at risk of unauthorized data access, which could lead to regulatory penalties and reputational harm. No vendor-released patch identified at time of analysis, so leadership should prioritize interim mitigations.

Business Impact: High
Compensating Controls

Disable open user registration to prevent attackers from obtaining Subscriber accounts, and monitor listing activity for suspicious coordinate entries.

Threat Intelligence Overview

EPSS Score
0.4%
Top 70% exploitable
Prevalence
Medium
popular but niche WordPress directory/classifieds plugin, not universally deployed
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.4%
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
Yes
Human Impact
High
Technical Impact
Partial

Priority Score

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

Attack Technique

SQL injection exploits the way applications construct database queries by mixing user input directly into SQL statements.

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