Die Liste der WordPress-Benutzer ist öffentlich zugänglich

Worum es geht

Der Endpunkt /wp-json/wp/v2/users gibt eine Liste aller Autoren der Website zurück — einschließlich user_login. Also genau das, was man für den Login-Bildschirm braucht. Zusätzlich leitet auch /?author=1 auf eine URL um, die den Namen des Autors enthält.

WordPress macht das absichtlich — die REST API soll Autoren öffentlich bereitstellen, damit Templates wissen, wer einen Beitrag geschrieben hat. Doch die Standardeinstellung zeigt auch den username an, nicht nur den Anzeigenamen.

Warum das ein Problem ist

Ein Brute-Force-Angriff auf WordPress hat zwei Hälften: den username erraten und das Passwort erraten. /wp-json/wp/v2/users liefert dem Angreifer die erste Hälfte gleich frei Haus. Er sucht nicht mehr nach admin, root oder info, sondern greift direkt und gezielt Ihre echten Konten an.

Wenn XML-RPC aktiv ist oder kein Rate-Limit auf /wp-login.php besteht, ist diese Kombination (User-Enum + Brute-Force) ein realistischer Angriff innerhalb weniger Stunden.

Wie man es behebt

Schritt 1 — den REST-API-Users-Endpunkt deaktivieren

In functions.php oder in ein site-spezifisches Plugin:

add_filter('rest_endpoints', function ($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;
});

Schritt 2 — den ?author=N-Redirect blockieren

add_action('template_redirect', function () {
    if (isset($_GET['author']) && !current_user_can('edit_posts')) {
        wp_redirect(home_url(), 301);
        exit;
    }
});

Schritt 3 — Anzeigenamen vom username trennen

Falls das User-Enum doch einmal durchsickert (Cache, Theme, Plugin), sollte user_nicename nicht identisch mit user_login sein. In der Benutzerverwaltung einzelner Benutzer:

Der Username lässt sich in WordPress nach der Erstellung nicht mehr über die UI ändern. Wenn Sie einen Admin namens admin haben, legen Sie einen neuen Admin an, weisen ihm alle Beiträge zu und löschen den alten admin (WP bietet beim Löschen an, „die Beiträge zu übertragen“).

Plugin-Alternative

WPS Hide Login + Stop User Enumeration lösen beides mit zwei Klicks.

Referenzen