Login

WordPress – CVE-2018-6389 Lücke absichern

Wer eine WordPress-Webseite betreibt, hat vielleicht schon einmal die Datei “load-scripts.php” im Verzeichnis wp-admin gesehen und Aufrufe davon in seinen Logfiles. Diese Datei dient dazu, mehrere JS-Dateien zusammen auszuliefern. Dadurch wird die Menge der vom Client/Browser gesendeten Anfragen an die Webseite reduziert. Wenn der Browser also mehrere Javascript oder auch CSS-Dateien laden muss, werden dazu zwei Load-Skripte verwendet (load-scripts.php und load-styles.php).

Dadurch erhält der Browser mehrere Dateien durch eine einzige Anfrage zurück. Dies reduziert die Anfragen und die Seite wird prinzipiell schneller geladen.

Allerdings wird diese Funktionalität der Load-Scripte regulär nur im WordPress-Backend, also für den Admin und die Redakteure eingesetzt, sowie auf der Login-Seite (wp-login.php). Letzteres ist auch der Grund, warum für diese Dateien und deren Aufruf keine Authentifizierung erforderlich ist.

Zur Veranschaulichung und wenn Sie diese Funktion bei Ihrer Seite selbst testen wollen, rufen Sie folgende URL mit Ihrer Domain auf:
https://ihredomain.endung/blog/wp-admin/load-scripts.php?c=1&load%5B%5D=jquery-ui-core

Das Ergebnis sollte dann in etwa so aussehen:

wp-load CVE-2018-6389 jquery-core

Problembeschreibung: CVE-2018-6389

Anfang Februar wurde mit CVE-2018-6389 eine Schwachstelle in WordPress beschrieben, die genau diese Funktion betrifft. Der Aufruf wird dadurch problematisch, dass nicht nur der jQuery UI Core ausgeliefert werden kann, sondern Sie sämtliche jQuery-Module in WordPress (ca. 180 Stück) gemeinsam laden können. Dies sind immerhin mit nur einem Aufruf rund 4 MB. Für die Zeit bis zur vollständigen Auslieferung dieser zusammengestellten Datei müssen Sie, je nach Server, mit gut 2 Sekunden rechnen.

Ein Angreifer kann nun einfach die “load-scripts.php” sehr oft hintereinander aufrufen und die Performance Ihrer Webseite deutlich beeinträchtigen und sogar komplett überlasten, so dass nur noch die Fehlercodes 500/502 bzw. 503 ausgeliefert werden. Wie schon erwähnt, ist für diese Aufrufe keine Authentifizierung erforderlich und diese Load-Skripte tun eigentlich genau das, wofür Sie auch entwickelt wurden.

Es fehlt jedoch mindestens eine Option der Beschränkung, wie viele JS- oder CSS-Dateien gleichzeitig geladen werden und eine Authentifizierung, denn diese Skripte werden ja nur im Backend verwendet und könnten daher erst nach einem erfolgreichen Login durch den jeweiligen Benutzer ausgeführt werden.

Kein offizieller Bugfix von WordPress in Sicht

Aktuell ist für dieses Szenario laut WordPress kein Bugfix in Arbeit; die offizielle Aussage dazu: “This kind of thing should really be mitigated at the server or network level rather than the application level, which is outside of WordPress’s control.”

Details zum Problem in englischer Sprache mit weiteren Links finden Sie u.a. auf der Seite des NIST: https://nvd.nist.gov/vuln/detail/CVE-2018-6389

Es gibt theoretisch zwei direkt denkbare Möglichkeiten zur Behebung auf Code-Ebene:
– Die Skripte so anpassen, dass diese nur als Admin bzw. im eingeloggten Zustand ausführbar sind. Nachteil hierbei, wie bei allen individuellen Anpassungen, dass diese mit jedem Update von WordPress erneut vorgenommen werden müssen.
– Alternativ die Funktionalität zu deaktivieren, was weniger Anpassungen erfordert allerdings zu Lasten der Performance gehen kann. Allerdings nur im eingeloggten Zustand und bei den initialen Aufrufen der Javascript- und CSS-Dateien, solange bis diese im Seiten oder Browser-Cache sind.

Neue Sicherheitsoption bei uns

Mit unserem WordPress-Toolkit, das bereits mehrere Optionen für die Prüfung und das Setzen von gängigen und empfohlenen Sicherheitsmaßnahmen besitzt, gibt es seit heute eine zusätzliche Einstellung für die zweite genannte Möglichkeit, der Deaktivierung.

Option: “Disable scripts concatenation for WP admin panel”
Diese Sicherheitsmaßnahme deaktiviert die Verkettung von Skripten, die über die “load-*.php” Dateien ausgeführt werden. Damit wird verhindert, dass die Webseite von bestimmten Denial of Service Angriffen z.B. CVE-2018-6389 betroffen ist. Diese Deaktivierung kann die Performance des WordPress-Admin-Backends allerdings leicht beeinträchtigen, sollte jedoch aus Sicht der Besucher Ihrer Webseite keine Auswirkung haben.

Sobald diese Option gesetzt ist, wird der oben genannte Test-Aufruf der Domain eine Fehlermeldung “403 Forbidden” ausgeben. Die neue Sicherheitsoption kann auch wieder rückgängig gemacht werden.

Zusätzliche Angriffserkennung aktiv

Als Kunde müssen Sie aber nicht zwingend aktiv werden und die Sicherheitsoption gegen CVE-2018-6389 setzen. Vielleicht wollen Sie auch die Load-Skripte weiterhin verwenden und auf deren Funktion nicht komplett verzichten. Daher sind bei uns seit wenigen Tagen auf allen Servern zusätzliche Firewallregeln aktiv.

Bei einer ungewöhnlich hohen Anzahl an Aufrufen der load-styles oder der load-scripts Datei in kurzer Zeit erfolgt die Blockierung der IP-Adresse für einen kurzen Zeitraum. Dadurch werden bei der normalen Benutzung des WordPress-Backends die Skripte nicht blockiert. Dennoch verhindert diese Maßnahme natürlich nicht einen Angriff selbst, dämmt die Auswirkungen aber ein.

Hinterlasse eine Antwort

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *
Bitte beachte, dass sich Dein Kommentar auf den Artikel beziehen sollte. Wenn Du ein persönliches Kundenanliegen besprechen möchtest, wende Dich bitte an unseren Kundenservice auf Facebook, Twitter oder über unsere Support-Seite.