WordPress ist das derzeit am weitesten verbreitete Content Management System (CMS) im Web – fast 30 Prozent der meistbesuchten Websites verwenden es. Umso schwerer wiegen hier Sicherheitslücken.
Wie viele andere CMS auch besitzt WordPress ein Passwort-Reset-Feature für den Fall, dass ein Anwender sein Passwort vergessen hat. Dieses Feature enthält aber eine kritische Schwachstelle [1]. Ein entfernter Angreifer kann sie ausnutzen und an einen Passwort-Reset-Link gelangen, ohne sich vorher anzumelden. Damit kann er unberechtigt Zugriff auf andere WordPress-Accounts erlangen, indem er neue Passwörter für sie erzeugt. Verlangt ein Anwender ein Passwort-Reset, so generiert WordPress eine Mail mit einem entsprechenden Reset-Link. Die Mail wird in PHP gebaut. Dabei wird im Mail-Header auch ein »From-/Return-To«- Feld befüllt.
Das alles vollzieht sich im PHP-Code aus Listing 1 (»wp- includes/pluggable.php«). Die Mailadresse für das »From-/Return-To-Feld« extrahiert der Code aus dem Feld »SERVER_NAME«.
Listing 1
Mail-Zusammenbau
01 if ( !isset( $from_email ) ) {
02 // Get the site domain and get rid of www.
03 $sitename = strtolower( $_SERVER['SERVER_NAME'] );
04 if ( substr( $sitename, 0, 4 ) == 'www.' ) {
05 $sitename = substr( $sitename, 4 );
06 }
07
08 $from_email = 'wordpress@' . $sitename;
09 }
Die Idee leuchtet bereits auf den ersten Blick ein, allerdings funktioniert sie nicht immer. Die meisten Webserver, darunter Apache, schreiben in die »SERVER_NAME«-Variable nämlich einfach das, was ihnen der Webclient sagt. Damit kann der Angreifer den Hostnamen des »From-/Return-To«-Feldes auf einen beliebigen Wert setzen. Sollte jemand dann auf die Reset-Mail antworten, so würde diese Antwort an die vom Angreifer gewünschte Adresse geschickt.
Wie kommt der Angreifer aber nun an den sensiblen Reset-Link? Das Advisory beschreibt drei mögliche Wege. Alle Szenarien setzen voraus, dass der Angreifer zuerst auf der WordPress-Seite den Reset-Button drückt und anschließend das »SERVER_NAME«-Feld – wie oben beschrieben – auf einen von ihm gewünschten Hostnamen einstellt.
Die erste Möglichkeit besteht darin, im ersten Schritt eine Denial-of-Service-Attacke gegen den Mailserver des Anwenders auszuführen. Dann würde der einen Bounce-Back auslösen und die Reset-Mail zurückschicken. Aufgrund des modifizierten »From-/Return-To«-Feldes würde sie an den Angreifer geschickt, womit der direkt den Reset-Link erhielte. Dieses Szenario wird jedoch nicht funktionieren, wenn der Mailserver sich vor solchen Attacken schützt.
Alternativen
Doch kann der Angreifer darauf spekulieren, dass der Anwender aus dem einen oder anderen Grund einen Autoresponder aktiviert hat. Dann käme der Angreifer ebenfalls an den Reset-Link, denn die automatische Antwort würde dann an den Angreifer geschickt.
Sollte auch dies nicht gelingen, könnte der Angreifer einfach dafür sorgen, dass sehr viele Reset-Mails gesendet werden. Der Empfänger wundert sich dann eventuell über die vielen Mails und antwortet auf eine davon. In diesem Moment fiele die Antwort inklusive des Reset-Links dem Angreifer in die Hände.
In allen drei Szenarien gelangt der Angreifer an den Reset-Link und kann damit das Passwort des WordPress-Anwenders beliebig ändern. Damit hat er dann vollen Zugriff auf dessen Account.
Jedes der Szenarien mag recht unwahrscheinlich sein, aber es gibt derzeit mehr als 60 Millionen WordPress-Websites. Betroffen von diesem Problem sind die Versionen 4.7.4 und älter.





