Es ist mal wieder ein Problem, dass niemand sonst kennt oder sieht. Aber ich finde, es ist ein ganz erhebliches Problem. Nur für eine sehr kleine Gruppe, aber die sollte Bescheid wissen, was da so falsch gemacht wird. Aber fangen wir am Anfang an: Für einen Kunden wollte ich den Zugang zu einem Netzwerk-Plugin auch für normale Administratoren (keine Super-Admins) erlauben. Das funktionierte über einen Filter ganz einfach, aber was ich in der Netzwerkverwaltung fand, war etwas erschreckend …
Neben dem Plugin, was ich freischalten wollte, fand ich mehrere andere Menüpunkte in der Netzwerkverwaltung für einen User, der überhaupt keine Zugriffsrechte für die Netzwerkverwaltung hat.
Nehmen wir also mal folgenden Fall: Wir haben eine Multisite und richten nun mehrere Kunden-Websites ein. Die Websites haben nichts miteinander zu tun. Sie teilen sich nur eine Installation, agieren aber inhaltlich komplett unabhängig. Die Kunden sind Administratoren in den jeweiligen Sites, aber keine Super-Admins.
Mit dem Administrator-Konto vom Kunden ist der Zugang zur Netzwerkverwaltung nicht verlinkt und beim Versuch, die URL direkt anzusteuern, sehen wir eine Fehlermeldung:
Sorry, you are not allowed to access this page.
Soweit alles korrekt. Aber ich sehe auch einen Menüpunkt des Plugins NinjaScanner. Folglich ist der Direktlink zu diesem Plugin durchaus möglich:/wp-admin/network/admin.php?page=NinjaScanner&nscantab=settings
Woran liegt das? Nun, beim Registrieren des Menüs wurde nur auf manage_options geprüft und auf einer Multisite sollte das gegebenenfalls besser auf manage_sites geändert werden, um nur den Super-Admin zu erlauben.
Wobei das nur die Anzeige des Menüpunktes betrifft. Die Seite selbst muss dann ebenfalls eine entsprechende Prüfung umsetzen:
This function takes a ‘capability’ (see Roles and Capabilities) which will be used to determine whether or not a page is included in the menu. The function which is hooked in to handle the output of the page must check that the user has the required ‘capability’ as well.
https://developer.wordpress.org/reference/functions/add_menu_page/#description
Sehr merkwürdig ist zusätzlich, dass dies beim NinjaScanner sogar im Code erwähnt wird. Es ist nur trotzdem falsch umgesetzt:
$menuhook = add_menu_page(
'NinjaScanner',
'NinjaScanner',
// In a multisite environment, only the superadmin can run it
'manage_options',
'NinjaScanner',
'nscan_main_menu'
);
Ein einfacher Weg, dies besser zu lösen, ist die Prüfung wie folgt anzugeben:
is_multisite() ? 'manage_sites' : 'manage_options';
Nun ist das ja kein großes Problem, wenn ein Scanner per Direktlink aufgerufen werden kann. Erhöhen wir also den Einsatz. Wie sieht es denn mit einem Backup-Plugin aus, wo einfache Admins das Gesamt-Backup der Multisite löschen können? Reicht das als Problem aus?
Offensichtlich nicht. Patchstack vergibt zwar ein CVE, aber es keine Bugbounty, wenn ein Admin-Konto als Vorbedingung existieren muss:
No points are given if the reported component has less than 500 active installs (sales if premium) or requires an admin/super-admin role as a prerequisite. However, these reports will still receive a CVE ID for the submitter.
https://patchstack.com/bug-bounty/ und https://patchstack.com/articles/bug-bounty-guidelines-rules/#privilege-requirement-coefficients
Ebenso die Konkurrenz von Wordfence, auch hier keine Bounty, wenn ein Admin existieren muss, um das Problem auszunutzen:
All issues in WordPress Plugins and Themes with a considerable impact to the confidentiality, integrity, and availability of a WordPress site are considered in scope of this program as long as they do not require high level permissions, such as administrator or editor (i.e. CVSSv3.1 PR:H) to exploit. The following is a list of some common vulnerabilities that will be accepted.
https://www.wordfence.com/threat-intel/bug-bounty-program/#scope
Leider ist das Beispiel nicht theoretisch. BackWPup ist bedauerlicherweise genau dafür anfällig. Sowohl die Anzeige wird nicht unterbunden als auch sämtliche Funktionen. So konnte ich in meinem Test ohne Probleme oder Widerstände das Gesamtbackup löschen.
Auch All-in-One-SEO war in meinem Fall zu sehen, wobei die Prüfung der jeweiligen Funktionen hier besser funktioniert. Ich sehe vor allem nicht freigeschaltete Premium-Funktionen (nur der Robots.txt-Editor scheint zugänglich zu sein). Hier wäre weiter zu testen, was passiert, wenn eine Lizenz aktiv ist und die Funktionen freigeschaltet sind.
Fazit
Leider prüfen viel zu wenige Plugins auf die richtigen Capabilities und testen das Plugin nicht in einer Multisite-Umgebung. Dadurch können Sicherheitslücken entstehen, die normalen Admins (und ggf. auch kleineren Benutzerrollen) den Zugang zu Funktionen erlauben, die in einer Multisite nur Super-Admins vorbehalten sein sollte.
Da dieser Fehler nicht einfach sichtbar ist, kann so ein Fehler unentdeckt vor sich hin schlummern und Probleme bereiten, wenn ein einzelner Admin in einem Multisite-Projekt böse wird oder gehackt wird und Schaden verursachen möchte.
Habt ihr noch mehr Plugins entdeckt, die unerwartet in der Netzwerkverwaltung auftauchen, wenn man als Nicht-Super-Admin einen Direktlink aufruft? (Beim Schreiben des vorherigen Satzes ist mir aufgefallen, wie unwahrscheinlich das ist … aber ich kann es ja trotzdem versuchen)
Wenn ja, dann freue ich mich riesig über einen Kommentar von euch mit den Details!
