Technische Analyse der MEBIS-Schwachstellen
Zuletzt geändert: 23.01.2023
Updates:
21.08.2020, 10:41 Uhr: Erster Pressebericht taucht auf.
21.08.2020, 12 Uhr: Die XSS-Lücke wurde geschlossen.
21.08.2020, 15:14 Uhr: Bay. Landesbeauftragter für Datenschutz meldet uns, dass die XSS-Lücke geschlossen wurde. Berichtet auch, dass noch nicht alle gemeldeten Mängel behoben sind.
21.08.2020, 16:54 Uhr: client side validation Lücke wurde geschlossen.
22.08.2020: open redirect wurde geschlossen.
03.09.2020: Zerody findet noch weitere gravierende Sicherheitslücken (u.a. XSS, Open Redirects) und beschreibt diese in seinem Blog. Es gelingt ihm neben dem Phishing, zusätzlich auch die Cookies auszulesen. Zudem wurden noch ein paar weitere open redirects gefunden, welche noch nicht behoben sind (Stand 07.09.2020). Wir schließen uns seinem Fazit an, dass es in der Qualität und Sicherheit der Software starke Mängel gibt und professionelle Hilfe zur Beseitigung dieser Mängel nötig ist, welche die Hersteller nicht liefern können. Wir verweisen daher Nutzer:innen darauf, die Plattform so gut es geht zu vermeiden, bis dies passiert ist.
Was ist mebis und wie viele Nutzer sind betroffen?
mebis ist ein Internetportal des bayerischen Kultusministeriums, welches in bayerischen Schulen eingesetzt wird. Nach eigenen Angaben hat die Plattform im Jahr 2020 eine Millionen Nutzer und wird an 5428 Schulen genutzt (Quelle).
Betroffene Versionen
Die Software war zum Stand der Veröffentlichung (20.08.2020) von den Schwachstellen betroffen, trotz Responsible-Disclosure-Verfahren unsererseits (siehe Timeline unten). Da es sich um closed source Software handelt, ist uns die genauere mebis Versionsnummer nicht bekannt.
Beschreibung
Es wurden drei Schwachstellen (Open Redirect, Reflected XSS, Client-side only input validation) in mebis gefunden. Davon ist das Reflected XSS die schwerwiegendste, da Angreifer unter der mebis-Domain javascript-Code ausführen, und so u. a. Nutzer phishen können.
Reflected XSS
Das Reflected XSS tritt beim Logout-Prozess auf. Ursprung ist der Versuch, eine Weiterleitung zu erzeugen. Jedoch kann im Logout-Query dem Parameter return eine bösartige URL mitgegeben werden, welche direkt unescaped in den Quellcode der Seite eingebettet wird.
Durch das direkte Einbetten des Werts des return Parameters in den Quellcode, und das fehlende Escapen dieser Eingabe, entsteht eine ausnutzbare, reflected-XSS-Schwachstelle:
https://idp.mebis.bayern.de/idp/logout.jsp?return=http://"); alert("xss"); %3C!--
Zwar wird cookie-Stealing durch HttpOnly verhindert, jedoch lässt sich die gesamte Logout-Seite durch eine Phishing-Seite ersetzen (z.B. mit einer Kopie des mebis Login Formulars). Im Unterschied zum Open Redirect, sieht ein potentielles Opfer sogar die korrekte mebis-Domain, was die Accountdaten und somit den Datenschutz der Nutzer stark gefährdet.
Ein Proof-of-concept als Video:
Open Redirect
Unabhängig von der XSS-Lücke ist es möglich, von diversen Logout-Seiten auf eine beliebige externe URL umzuleiten. Im Logout-Query kann dem Parameter return eine beliebige URL mitgegeben werden. Auf diesen Link wird bei Aufruf sofort weitergeleitet.
https://mediathek.mebis.bayern.de/Shibboleth.sso/Logout?return=https://0x90.space
Dies kann verwendet werden, um zu einer fremden Malware- oder Phishing-Seite zu leiten (z.B. eine mit dem mebis Login Formular). Eine Liste an weiteren betroffenen URLs kann im Anhang eingesehen werden.
Client side only Input validation
Je nach Rolle des Benutzers, kann man im Benutzerprofil nur manche Werte verändern. So ist es bei Schülern nicht möglich, Werte wie Vorname oder Nachname zu verändern. Dies wir durch das Setzen von readonly Attributen auf die Felder implementiert. Durch lokale Veränderung des Quellcodes, ist es jedoch möglich, den Inhalt der readonly-Felder trotzdem zu verändern und somit unter anderem den Vornamen neu zu setzen. Die Validierung der Eingaben findet dabei nur auf Frontendseite statt. Es befinden sich im Benutzerprofil noch andere Felder wie Benutzername, Benutzertyp (z.B. Schüler), Rolle, Schule und Klasse, welche wir nicht versucht haben abzuändern, um den Betrieb der Seite nicht zu stören.
Responsible Disclosure Timeline
- 20.05.2020: Wir melden ein open redirect.
- 20.05.2020: Automatische Aufnahme ins Ticketsystem vom Mebis-Support
- 21.05.2020: Wir melden weitere open redirects, eine XSS-Sicherheitslücke und die client side only validation. Wir setzen eine 90 Tage Frist (bis 19.08.2020) zum Schließen der Sicherheitslücken.
- 22.05.2020: Support leitet Meldung an zuständige Stelle
- 27.07.2020: Wir fragen nach dem Status und erinnern an die Frist, da bisher keine weitere Antwort vom Support kommt.
- 28.07.2020: Zuständige Stelle teilt mit, dass noch nicht absehbar ist, wann sie sich um das Problem kümmern werden.
- 28.07.2020: Wir erinnern den Support an die Deadline und der Absicht, die Lücken nach der Frist zu veröffentlichen.
- 17.08.2020: Wir schreiben dem Bayerischen Landesbeauftragten für den Datenschutz, da der Herausgeber von Mebis das Bayerisches Staatsministerium für Unterricht und Kultus ist.
- 19.08.2020: Deadline. Wir haben keine weitere Nachricht erhalten und schreiben daher diesen Bericht.
- 20.08.2020: Der bayerische Landesbeauftragte für den Datenschutz bestätigt grundsätzlich die Sicherheitslücken und setzt sich mit den verantwortlichen Stellen umgehend in Verbindung.
- 21.08.2020, 10:41 Uhr: Erster Pressebericht taucht auf.
- 21.08.2020, 12 Uhr: Die XSS-Lücke wurde geschlossen.
- 21.08.2020, 15:14 Uhr: Bay. Landesbeauftragten für den Datenschutz meldet uns, dass die XSS-Lücke geschlossen wurde. Berichtet auch, dass noch nicht alle gemeldeten Mängel behoben sind.
- 21.08.2020, 16:54 Uhr: client side validation Lücke wurde geschlossen.
- 22.08.2020: open redirect wurde geschlossen.
Anhang
Weitere URLs betroffen vom Open Redirect
https://www.mebis.bayern.de/info-shib/Shibboleth.sso/Logout?return=https://0x90.space
https://lernplattform.mebis.bayern.de/Shibboleth.sso/Logout?return=https://0x90.space
https://idm.mebis.bayern.de/idm/Shibboleth.sso/Logout?return=https://0x90.space
https://mk-navi.mebis.bayern.de/mk-navi/Shibboleth.sso/Logout?return=https://0x90.space
https://tafel.mebis.bayern.de/tafel/Shibboleth.sso/Logout?return=https://0x90.space
https://lernplattform.mebis.bayern.de/auth/shibboleth/logout.php?action=logout&return=https://0x90.space
https://mediathek.mebis.bayern.de/cpCommon/scripts/auth/shibLogout.php?action=logout&return=https://0x90.space
https://mk-navi.mebis.bayern.de/shibboleth-slo?action=logout&return=https://0x90.space
https://lernplattform.mebis.bayern.de/auth/shibboleth/logout.php?action=logout&return=https://0x90.space
https://idm.mebis.bayern.de/selfservice/ldapportal.pl?mode=logout&action=logout&return=https://0x90.space
https://lernplattform.mebis.bayern.de/Shibboleth.sso/Logout?return=https://0x90.space
https://idm.mebis.bayern.de/adminportal/ldapportal.pl?mode=logout&action=logout&return=https://0x90.space