WordPress Nutzernamen auslesen

War dir bewusst, dass du durch das bloße aufrufen einer URL alle deine User einer WordPress Seite auslesen kannst? und wusstest du, dass es keine gute Idee ist, dies auch zuzulassen?

𝗪𝗮𝗿𝘂𝗺 𝘀𝗼𝗹𝗹𝘁𝗲 𝗗𝗶𝗰𝗵 𝗱𝗮𝘀 𝗶𝗻𝘁𝗲𝗿𝗲𝘀𝘀𝗶𝗲𝗿𝗲𝗻?

Hab ich mir erstmal einen validen Nutzernamen „erschlichen“ spare ich mir bei der anschließenden Bruteforce Attacke 50% der Arbeit und muss „nur noch“ das Passwort herausfinden.

Jüngst habe ich circa 4500 WordPress Installationen mit einem simplen PHP Script, das gerade mal 20 Zeilen hat, geprüft. Dabei habe ich festgestellt, dass bei 99% der Seiten das Aufrufen der WPUser kein Problem war. Leider war viel zu Oft der 𝗨𝘀𝗲𝗿𝗻𝗮𝗺𝗲 „𝗮𝗱𝗺𝗶𝗻“ oder „𝗔𝗱𝗺𝗶𝗻𝗶𝘀𝘁𝗿𝗮𝘁𝗼𝗿“ dabei.

Bei diesen Sahnestücken ist das Erraten der Passwörter wesentlich leichter als bei anderen Seiten.

𝗝𝗮 𝗮𝗯𝗲𝗿 𝗱𝗮𝘀 𝗶𝘀𝘁 𝗷𝗮 𝗸𝗲𝗶𝗻𝗲 𝗦𝗶𝗰𝗵𝗲𝗿𝗵𝗲𝗶𝘁𝘀𝗹𝘂̈𝗰𝗸𝗲!

Ob es eine Sicherheitslücke ist, wenn ich Eure Anmeldenamen kenne überlasse ich Euch. Ich persönlich finde, dass man es Angreifern nicht unnötig leicht machen sollte. Und leichter, als eine URL aufzurufen um die Daten abzulesen geht ja schon nicht mehr.

𝗦𝗽𝗲𝗿𝗿𝘁 𝗱𝗶𝗲 𝗝𝗦𝗢𝗡 𝗥𝗘𝗦𝗧 𝗘𝗻𝗱𝗽𝘂𝗻𝗸𝘁𝗲 𝗲𝗶𝗻𝗳𝗮𝗰𝗵

function disable_rest_endpoints ( $endpoints ) {
if ( isset( $endpoints['/wp/v2/users'] ) ) {
unset( $endpoints['/wp/v2/users'] );
}
if ( isset( $endpoints['/wp/v2/users/(?P<id>[\d]+)'] ) ) {
unset( $endpoints['/wp/v2/users/(?P<id>[\d]+)'] );
}
return $endpoints;
}
add_filter( 'rest_endpoints', 'disable_rest_endpoints');

mit dem Code sperrt ihr das Aufrufen des User Endpunktes und es werden keine Nutzernamen mehr ausgegeben. Fügt den Code einfach in die „functions.php“ ein und vergesst nicht den Cache zu löschen.

Das Resultat sollte dann folgendermaßen aussehen:

{"code":"rest_no_route","message":"Es wurde keine Route gefunden, die mit der URL und der Request-Methode identisch ist.","data":{"status":404}}

Hast du schon einmal eine ähnliche Sicherheitslücke auf deiner WordPress-Seite entdeckt?