
Laboratoire basé sur Docker pour reproduire et valider CVE-2026-56011, une vulnérabilité XSS non authentifiée dans MapPress Maps pour WordPress, avec des cibles de comparaison vulnérables et corrigées.
Ce dépôt contient un laboratoire Docker local pour reproduire et valider la CVE-2026-56011, une vulnérabilité de Cross-Site Scripting non authentifié affectant MapPress Maps pour WordPress.
MapPress Maps pour WordPress est un plugin WordPress utilisé pour afficher des cartes dans les pages et articles WordPress. Le comportement vulnérable affecte le chemin de rendu de carte iframe accessible via le paramètre de requête mappress=embed.
Ce laboratoire compare deux versions de MapPress :
| Service | Version de MapPress | Objectif | URL |
|---|---|---|---|
| vuln | 2.97.3 | Cible de comparaison vulnérable | http://localhost:8081 |
| patched | 2.97.4 | Cible de comparaison corrigée | http://localhost:8082 |
Le chemin de validation démontré dans ce laboratoire local est :```text Unauthenticated browser request → GET /?mappress=embed → request supplies a crafted name value → vulnerable target renders name into an unquoted id attribute → injected onclick handler becomes a standalone HTML attribute → clicking the rendered MapPress component triggers alert(1) → patched target keeps the payload inside a quoted and escaped id attribute → clicking the rendered component does not trigger alert(1)
La cible vulnérable utilise cette URL de navigateur manuelle :```text
http://localhost:8081/?mappress=embed&name=cve56011%20onclick%3Dalert%281%29&width=400px&height=300px&zoom=5¢er=0%2C0
Résultat vulnérable attendu :```text Click on the rendered MapPress component → alert(1) pops up
La cible corrigée utilise la même charge utile contre MapPress 2.97.4 :```text
http://localhost:8082/?mappress=embed&name=cve56011%20onclick%3Dalert%281%29&width=400px&height=300px&zoom=5¢er=0%2C0
Résultat corrigé attendu :```text Click on the rendered MapPress component → no alert appears
Ce laboratoire utilise intentionnellement une validation manuelle uniquement dans le navigateur. Il n'inclut pas de script de preuve de concept (PoC), d'automatisation du navigateur, de vol d'identifiants, de rappels externes, de logiciels malveillants, de persistance, d'activité post-exploitation ou d'attaques contre des systèmes externes.
## Faits vérifiés
| Affirmation | Preuve | Comment vérifier dans ce laboratoire |
| -------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- |
| CVE-2026-56011 affecte MapPress Maps pour WordPress. | Les avis de vulnérabilité publics identifient le plugin WordPress concerné comme MapPress Maps pour WordPress. | Consultez la section Références et inspectez le plugin installé dans les deux cibles Docker. |
| La version vulnérable de comparaison dans ce laboratoire est MapPress 2.97.3. | Le service `vuln` construit le plugin en utilisant `MAPPRESS_VERSION: 2.97.3`. | Inspectez `docker-compose.yml` et `vuln/Dockerfile`. |
| La version corrigée de comparaison dans ce laboratoire est MapPress 2.97.4. | Le service `patched` construit le plugin en utilisant `MAPPRESS_VERSION: 2.97.4`. | Inspectez `docker-compose.yml` et `patched/Dockerfile`. |
| MapPress 2.97.4 a introduit le correctif d'échappement dans l'iframe. | Le journal des modifications officiel du plugin pour la version 2.97.4 indique `Added: escape in iframe`. | Consultez le journal des modifications officiel du plugin WordPress et comparez le code source vulnérable et corrigé. |
| Le code source vulnérable affiche le nom de la carte dans l'`id` du composant web sans guillemets. | Dans la version 2.97.3, `mappress_map.php` affiche `<mappress-map id={$name} ...>`. | Comparez le code source de la version 2.97.3 avec celui de la version 2.97.4. |
| Le code source corrigé encadre et échappe la valeur de l'`id`. | Dans la version 2.97.4, `mappress_map.php` affiche `id="` avec `esc_attr($name)`. | Comparez le diff de correctif entre les versions 2.97.3 et 2.97.4. |
| Le chemin de l'iframe est accessible sans authentification. | MapPress enregistre `template_redirect` lorsque `$_GET['mappress']` est présent. | Faites une requête `/?mappress=embed...` depuis un navigateur sans vous connecter. |
| Le chemin de l'iframe lit les attributs de la carte depuis la requête. | `template_redirect()` mappe `$_GET` dans les arguments de la carte et appelle le rendu de l'iframe. | Inspectez `mappress.php` et reproduisez l'URL manuelle. |
| La cible vulnérable permet l'injection d'attributs via le `name`. | La valeur `name` conçue peut s'échapper de l'attribut `id` non guillemeté et devenir `onclick=alert(1)`. | Ouvrez l'URL manuelle vulnérable et cliquez sur le composant MapPress affiché. |
| La cible corrigée bloque le comportement d'injection d'attribut testé. | La sortie corrigée conserve la charge utile complète à l'intérieur de l'attribut `id` guillemeté. | Ouvrez l'URL manuelle corrigée et cliquez sur le composant MapPress affiché. |
## Hypothèses et inconnues
Ce laboratoire utilise MapPress 2.97.3 comme cible vulnérable de comparaison car les avis publics identifient les versions jusqu'à et y compris 2.97.3 comme affectées, et le diff du code source montre le rendu vulnérable d'attribut non guillemeté dans cette version.
Ce laboratoire utilise MapPress 2.97.4 comme cible corrigée de comparaison car les avis publics identifient la version 2.97.4 comme la version corrigée, et le journal des modifications officiel indique que l'échappement a été ajouté dans le chemin de l'iframe.
Le comportement vulnérable testé est le chemin de rendu de l'iframe non authentifié :```text
GET /?mappress=embed&name=<crafted-value>
Ce laboratoire se concentre sur l'exécution manuelle dans le navigateur d'une charge utile d'alerte inoffensive :```text name=cve56011 onclick=alert(1)
Le laboratoire ne tente pas de prouver une chaîne de livraison persistante. Certains avis publics classent la vulnérabilité comme XSS stocké. Ce dépôt se concentre sur le sink de rendu iframe confirmé par la source et sur le comportement vulnérable versus corrigé qui peut être reproduit localement via la route non authentifiée `mappress=embed`.
Le laboratoire ne démontre pas :
* la persistance de la charge utile stockée,
* la compromission de compte WordPress,
* le vol de session administrateur,
* le vol de nonce,
* les rappels externes,
* la collecte de XSS aveugle,
* le vol d'identifiants,
* le vidage de base de données,
* les logiciels malveillants,
* la persistance,
* ni les attaques contre des systèmes hors laboratoire.
La validation manuelle par navigateur prouve la différence de rendu pertinente pour la sécurité :```text
MapPress 2.97.3:
crafted name value becomes executable onclick attribute