
Laboratorio basato su Docker per riprodurre e validare CVE-2026-56011, una vulnerabilità XSS non autenticata in MapPress Maps per WordPress, con obiettivi di confronto vulnerabile e corretto.
Questo repository contiene un laboratorio Docker locale per riprodurre e validare la CVE-2026-56011, una vulnerabilità di Cross-Site Scripting non autenticata che colpisce MapPress Maps for WordPress.
MapPress Maps for WordPress è un plugin WordPress utilizzato per visualizzare mappe all'interno di pagine e articoli WordPress. Il comportamento vulnerabile interessa il percorso di rendering della mappa iframe raggiungibile tramite il parametro di richiesta mappress=embed.
Questo laboratorio confronta due versioni di MapPress:
| Servizio | Versione MapPress | Scopo | URL |
|---|---|---|---|
| vuln | 2.97.3 | Target di confronto vulnerabile | http://localhost:8081 |
| patched | 2.97.4 | Target di confronto con patch | http://localhost:8082 |
Il percorso di validazione dimostrato in questo laboratorio locale è:```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)
Il bersaglio vulnerabile utilizza questo URL del browser manuale:```text
http://localhost:8081/?mappress=embed&name=cve56011%20onclick%3Dalert%281%29&width=400px&height=300px&zoom=5¢er=0%2C0
Risultato vulnerabile previsto:```text Click on the rendered MapPress component → alert(1) pops up
Il target patchato usa lo stesso payload contro 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
Risultato atteso dopo la patch:```text Click on the rendered MapPress component → no alert appears
This lab intentionally uses manual browser validation only. It does not include a PoC script, browser automation, credential theft, external callbacks, malware, persistence, post-exploitation activity, or attacks against external systems.
## Fatti verificati
| Affermazione | Evidenza | Come verificarlo in questo laboratorio |
| -------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------- |
| CVE-2026-56011 colpisce MapPress Maps for WordPress. | Gli advisory pubblici di vulnerabilità identificano il plugin WordPress interessato come MapPress Maps for WordPress. | Esamina la sezione References e ispeziona il plugin installato in entrambi i target Docker. |
| La versione vulnerabile di confronto in questo laboratorio è MapPress 2.97.3. | Il servizio `vuln` compila il plugin utilizzando `MAPPRESS_VERSION: 2.97.3`. | Ispeziona `docker-compose.yml` e `vuln/Dockerfile`. |
| La versione corretta di confronto in questo laboratorio è MapPress 2.97.4. | Il servizio `patched` compila il plugin utilizzando `MAPPRESS_VERSION: 2.97.4`. | Ispeziona `docker-compose.yml` e `patched/Dockerfile`. |
| MapPress 2.97.4 ha introdotto la correzione relativa all'escaping dell'iframe. | Il changelog ufficiale del plugin per 2.97.4 riporta `Added: escape in iframe`. | Esamina il changelog ufficiale del plugin WordPress e confronta il codice sorgente vulnerabile con quello corretto. |
| Il codice sorgente vulnerabile inserisce il nome della mappa nell'attributo `id` del componente web senza virgolette. | In 2.97.3, `mappress_map.php` genera `<mappress-map id={$name} ...>`. | Confronta il codice sorgente 2.97.3 con quello 2.97.4. |
| Il codice sorgente corretto racchiude tra virgolette ed esegue l'escape del valore `id`. | In 2.97.4, `mappress_map.php` genera `id="` con `esc_attr($name)`. | Confronta il diff della patch tra 2.97.3 e 2.97.4. |
| Il percorso iframe è raggiungibile senza autenticazione. | MapPress registra `template_redirect` quando `$_GET['mappress']` è presente. | Richiedi `/?mappress=embed...` da un browser senza effettuare l'accesso. |
| Il percorso iframe legge gli attributi della mappa dalla richiesta. | `template_redirect()` mappa `$_GET` negli argomenti della mappa e chiama il renderer dell'iframe. | Ispeziona `mappress.php` e riproduci l'URL manuale. |
| Il target vulnerabile consente l'iniezione di attributi tramite `name`. | Il valore `name` appositamente costruito può fuoriuscire dall'attributo `id` senza virgolette e diventare `onclick=alert(1)`. | Apri l'URL manuale vulnerabile e fai clic sul componente MapPress renderizzato. |
| Il target corretto blocca il comportamento di iniezione degli attributi testato. | L'output corretto mantiene l'intero payload all'interno dell'attributo `id` tra virgolette. | Apri l'URL manuale corretto e fai clic sul componente MapPress renderizzato. |
## Ipotesi e incognite
Questo laboratorio utilizza MapPress 2.97.3 come target vulnerabile di confronto perché gli advisory pubblici identificano come interessate le versioni fino alla 2.97.3 inclusa, e il diff del codice sorgente mostra il rendering vulnerabile dell'attributo senza virgolette in quella versione.
Questo laboratorio utilizza MapPress 2.97.4 come target corretto di confronto perché gli advisory pubblici identificano la 2.97.4 come versione corretta, e il changelog ufficiale dichiara che l'escaping è stato aggiunto nel percorso iframe.
Il comportamento vulnerabile testato è il percorso di rendering dell'iframe non autenticato:```text
GET /?mappress=embed&name=<crafted-value>
Questo laboratorio si concentra sull'esecuzione manuale nel browser di un payload di avviso innocuo:```text name=cve56011 onclick=alert(1)
Il laboratorio non tenta di dimostrare una catena di consegna persistente. Alcune advisory pubbliche classificano la vulnerabilità come XSS persistente. Questo repository si concentra sul sink di rendering iframe confermato dal sorgente e sul comportamento vulnerabile-versus-patched che può essere riprodotto localmente attraverso la rotta non autenticata `mappress=embed`.
Il laboratorio non dimostra:
* persistenza del payload stoccato,
* compromissione dell'account WordPress,
* furto della sessione admin,
* furto del nonce,
* callback esterni,
* raccolta XSS cieca,
* furto delle credenziali,
* dumping del database,
* malware,
* persistenza,
* o attacchi a sistemi non di laboratorio.
La validazione manuale del browser prova la differenza di rendering rilevante per la sicurezza:```text
MapPress 2.97.3:
crafted name value becomes executable onclick attribute
MapPress 2.97.4:
crafted name value remains inside the quoted id attribute
La causa principale di CVE-2026-56011 è la codifica di output errata per il valore name della mappa quando MapPress esegue il rendering di un componente web all'interno del percorso di output della mappa iframe.
Il percorso di codice vulnerabile accetta attributi di rendering della mappa dalla richiesta e alla fine esegue il rendering di un elemento HTML personalizzato:```html <mappress-map ...>
In MapPress 2.97.3, il nome della mappa viene inserito direttamente nell'attributo `id` senza virgolette e senza escaping nel contesto di attributo:```php
return "<div></div>\r\n<mappress-map id={$name} {$atts}>\r\n$pois\r\n</mappress-map>\r\n";
Questo non è sicuro perché il valore viene utilizzato in un contesto di attributo HTML. Se l'attaccante controlla name, un valore contenente uno spazio può terminare il valore id previsto e introdurre un nuovo attributo.