Die WordPress-API zeigt den User an

Firewall-Plugins für WordPress haben meist eine Funktion die Anmeldeversuche zu überwachen. So kann man eine Regel konfigurieren, damit man nach x fehlgeschlagenen Loginversuchen eine Email bekommt und die entsprechende IP geblockt wird. Mit entsetzen stellen einige Seitenbetreibern fest, dass der potenzielle Angreifer den richtigen Benutzernamen „erraten“ hat. War es einfach Glück oder steckt da eine Sicherheitslücke dahinter?

Nun, in den meisten Fällen war es weder Glück, noch ist es eine Sicherheitslücke in der Softare. Der Angreifer hat ganz einfach die REST-API von WordPress mit bösen Absichten für seinen eigenen Vorteil genutzt. Mit dieser, in der Version 4.7 im Core eingeführten Schnittstelle wird es ermöglicht, von anderen Systemen aus auf die Datenbank zuzugreifen.

Die Abfrage für die Ausgabe der Benutzerdaten ist sehr einfach durchzuführen. Dazu gibt man im Browser die URL https://www.deine-website.de/wp-json/wp/v2/users ein und bekommt umgehend die gewünschten Informationen angezeigt. Dies natürlich nur, solange die API für den nicht authentifizierten Zugriff freigeschaltet ist. Je nach Anzahl der vorhandenen User ist die Ausgabe kürzer oder länger. Keine Angst, Passwörter werden nicht aufgelistet.

Funktionen wie das Bearbeiten oder Löschen von Posts sind ohne Authentifizierung nicht möglich. Für diese Endpoints muss man jeweils einen Benutzer mit dem entsprechenden Passwort mitgeschicken. Wer sich vertieft mit der WordPress API befassen möchte, liest sich am Besten in die Dokumentation ein.

Deaktivierung der WordPress Schnittstelle?

Wie so oft gibt es auch bei der Deaktivierung der REST-API mehrere Möglichkeiten. Möchte man die gesamte API ausschalten, trägt man ganz einfach den untenstehenden Code in die functions.php ein. Die beiden Filter sorgen dafür, dass der Zugriff über die API nicht mehr möglich ist. Wer sich mit der Bearbeitung der functions.php nicht auskennt und auch keine Lust hat sich einzuarbeiten, verwendet ein Plugin. Seid euch aber bitte bewusst, dass jedes Plugin aktualisiert werden muss das System verlangsamen kann. Daher macht es durchaus Sinn, kleinere Anpassungen welche nicht laufend angepasst werden, in die functions.php zu verschieben und auf ein Plugin zu verzichten.

add_filter('rest_enabled', '_return_false');
add_filter('rest_jsonp_enabled', '_return_false');

Möchtest du trotzdem ein Plugin verwenden, ist die Erweiterung „Disable REST API“ dazu perfekt geeignet. Die Handhabung ist äusserst einfach. Ein weiterer Vorteil an dieser Erweiterung ist die granulare Konfiguration. Damit lässt sich nicht nur die gesamte Schnittstelle deaktivieren, sondern man bekommt auch die Möglichkeit einzelne Endpoints auszuschalten. Ein Endpoint ist einfach gesagt der Eintrittspunkt für einen bestimmten Anfragetyp. So existiert zum Beispiel ein Endpoint für Anfragen bezüglich Posts oder ein anderer für die Useranfragen.

Braucht man die WordPress-API

Ob die WordPress-Api aktiv verwendet wird muss von Fall zu Fall angeschaut werden. Zum einen stellt sich da die Frage, ob man von anderen Servern aus auf die Datenbank zugreift. Dann wird dies wohl über die API erfolgen. Es gibt jedoch nicht nur die Zugriffe von externen Systemen, sondern auch Plugins, welche teilweise die REST-API verwenden. Daher sollte man mit einer kompletten Deaktivierung vorsichtig sein. Entscheidet man sich trotzdem für diesen Schritt, müssen man danach die Hauptfunktionen getestet werden.

Eine aktive REST-API kann auch ein Sicherheitsrisiko darstellen. Es gab bereits Sicherheitslücken in der Vergangenheit, welche die API genutzt haben um Schadcode in die WordPress-Installation einzuspielen. Ob die Anzeige der Userinformationen ein grosses Sicherheitsrisiko darstellt, muss jeder für sich entscheiden. Es sind erste Informationen die ein Hacker sehr einfach sammeln kann. Ein sicheres Passwort verwehrt ihm den Zugang über das Loginformular jedoch trotzdem.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

siebzehn + 11 =