Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessRegister/obtain Subscriber account
-
DeliveryCreate pending listing with SQL payload in lat/long
-
ExploitCall geodir_widget_listings AJAX with set_post and sort_by=distance_asc
-
ExecutionInjected SQL executes in distance sub-expression
-
ImpactExtract 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. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – 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
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
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
AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N
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.
Primary rating from Vendor (Wordfence).
CVSS VectorVendor: Wordfence
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
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.
Disable open user registration to prevent attackers from obtaining Subscriber accounts, and monitor listing activity for suspicious coordinate entries.
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
SQL injection exploits the way applications construct database queries by mixing user input directly into SQL statements.
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-91921
GHSA-285m-c668-wj9h
NVD
CVE.org
EPSS
Vulnrichment
Exploit-DB