Mit Lernsieg zum Datenverlust: App Lernsieg im Security-Review

24. Februar 2020

Wir achten bei unseren Research Tätigkeiten darauf, dass wir keine fremden Daten einsehen und den Betrieb der App nicht stören. Daher sind hier lediglich so gennante Proof-of-concepts dargestellt, die an unseren eigenen Accounts zeigen, wie die App manipuliert und fremde Accounts übernommen werden können.

Lernsieg

Die App Lernsieg sorgte für Schlagzeilen und Diskussionen: Schüler können Lehrer und Schulen bewerten. Die Reaktionen waren durchmischt und tendenziell eher negativ. Missbrauchs- und Datenschutzbedenken dominierten die Berichte und Stimmen zu der App.
Bereits als die App ‘Lernsieg’ das erste Mal erschien, begannen wir mit der Analyse und konnten Fehler und Risiken erkennen – jedoch wurde die App offline genommen, bevor wir unseren Artikel veröffentlichen konnten. Wir beschlossen aufgrund des berichteten Mobbings und Hassnachrichten gegen den Gründer, Benjamin Hadrigan, von einer Publikation abzusehen.
Nun ist die App zurück – wurden die Schwachstellen eventuell auch ausgebessert? Spoiler: Nein, wurden sie nicht!

Authentifzierung via SMS

Lernsieg verwendet eine SMS Bestätigung um laut eigenen Angaben zu verhindern, dass mehrfach bewertet wird oder Missbrauch betrieben wird. Eine derartige SMS Verifikation der Rufnummer läuft normalerweise so ab:

  • Zu bestätigende (eigene) Nummer wird in App/Website/… eingegeben (1)
  • SMS mit Bestätigungscode wird vom Service an die Rufnummer gesendet (2,3,4)
  • Benutzer gibt Code in App zur Bestätigung ein (5)
  • Service vergleicht eigegebenen Code mit gesendetem Code und kann den Nutzer verifzieren (6)

Normale SMS Authentifzierung

Dieses Verfahren hat Schwachstellen, da bereits über sogenannte Sim Swapping Angriffe TANs und Bestätigungscodes in anderen Fällen abgegriffen wurden. Im Fall der App Lernsieg jedoch funktioniert das Verfahren grundlegend anders und ist daher im Design bereits unsicherer als das bekannte, oben vorgestellte Verfahren:

  • Zu bestätigende (eigene) Nummer wird in Lernsieg App eingegeben (1)
  • App zeigt SMS an, die mit einem Code an eine Nummer gesendet werden soll (2)
  • Benutzer sendet Code via SMS von seinem Handy an die angegebene Nummer (3,4)
  • Service vergleicht gesendeten Code mit angeziegtem Code und Absender der SMS (5)

Lernsieg SMS Authentifzierung

In diesem Fall dient also der Absender der SMS als Authentifzierungsmerkmal – nicht der Empfänger. Dies scheint ein kleines Detail zu sein, jedoch ist es sehr viel einfacher einen SMS Absender zu fälschen als einen Empfänger. Kurz gesagt:

Es ist einfacher den Absender einer SMS zu fälschen (nahezu trivial), als eine SMS für eine gefälschte/fremde Nummer zu empfangen. Der angezeigte Absender einer SMS kann (nahezu) beliebig geändert werden – ohne besondere Werkzeuge oder Mittel!

Aus diesem Grund verwenden auch Apps wie Signal oder WhatsApp das erste Standard-Verfahren und nicht das Lernsieg-Verfahren. Kurz gesagt:

Lernsieg hat die Eingangstüre verkehrt herum eingebaut.

Transparente Accounts

Im Untertitel haben wir die Erstellung beliebiger Accounts erwähnt. Doch gibt es bei Lernsieg überhaupt Accounts? Es gibt doch keinen Login und auch keine Account-Seite? Nichtsdestotrotz erstellt die App im Hintergrund transparent (also für den Benutzer nicht sichtbar) einen Account für jede Rufnummer.
Das muss sie auch, andernfalls wäre die Registrierung sinnlos.
Unseren Tests nach speichert die App bzw. der Server jedenfalls alle Bewertungen zu einer Rufnummer bzw. vice versa. Dies lässt sich einfach verifizieren:

  1. App Lernsieg installieren
  2. Bewertung durchführen: SMS Verifikation wird verlangt
  3. SMS Verifikation gemäß der Anleitung durchführen
  4. Schule/Lehrer bewerten
  5. App löschen
  6. App erneut installieren
  7. Bewertung durchführen: SMS Verifikation wird verlangt
  8. SMS Verifikation gemäß der Anleitung durchführen
  9. Schule/Lehrer aufrufen – es wird “Meine Bewertung” erneut angezeigt

Dies zeigt uns, dass im Hintergrund Accounts angelegt und die zugehörigen Daten gespeichert werden. Wie funktioniert diese Registrierung technisch? Dazu haben wir uns eines Proxies bedient – in unserem Fall BURP.

Zunächst sendet die App an den Server die eingegebene Nummer mit einem Request:

Beginn der Verifikation: Senden der Nummer und eines Token an den Server

Der Server beantwortet dies mit einer Nummer und einem Verifikationscode der an diese Rufnummer gesendet werden muss:

Antwort des Servers mit Verifikationscode und Rufnummer

Sobald die SMS von der richtigen Nummer – also jener die zuvor an den Service gesendet wurde – an die angegebene Nummer geschickt wurde, wird die App mittels Push-Nachricht benachrichtigt. Sie erhält dann einen One-Time-Token mit dem sie einen sogenannten Bearer Token abfragen kann.

Anfrage der App mit One-Time-Token

Server antwortet mit accessToken und refreshToken:

Bearer Token Antwort des Servers

Dieser Token besteht eigentlich aus zwei Token: Ein langfristig gültiger und ein kurzfristig gültiger Token. Nach Ablauf der angegeben Zeit muss die App mit dem langfristig gültigen Token einen neuen kurzfristigen Token anfordern. Gearbeitet, also Bewertungen abgegeben, wird mit dem kurzfristigen Token.

Doch wie trickst man diese Registrierung aus? Dazu kommen wir im nächsten Absatz!

Erstellung beliebiger Accounts

Wie bereits erwähnt ist es sehr einfach den Absender einer SMS zu fälschen. Eigentlich ist Fälschen das falsche Wort – denn der Absender kann (und das ist so vorgesehen) beliebig gewählt werden. Meistens wird die Rufnummer des Absenders gewählt – doch das ist nicht zwangsläufig der Fall. Zum Beispiel wenn ein SMS-Gateway verwendet wird um “InfoSMS” zu versenden. Wollen wir zum Beispiel einen Account für die (hoffentlich inexistente) Nummer 0664/666 666 66 erstellen, gehen wir wie folgt vor:

Anfrage im Interface der App (natürlich wäre dies auch via BURP oder (geskripteten) Python Request möglich – aber wozu schwierig, wenn es auch einfach geht?)

Unser Wunsch: Eine satanistische Nummer für die App

Nun geht es ans Eingemachte – die App fordert uns auf den Verifikationscode via SMS zu senden:

App Aufforderung: Den Code senden

Das machen wir an dieser Stelle nicht, denn der Absender wäre ja inkorrekt. Wir verwenden an dieser Stelle einen SMS Account beim SMS-Gateway “firmensms.at”. Dieses erlaubt uns den Absender weitgehend frei zu wählen:

SMS Interface von firmensms.at

Hier fügen wir die vorgefertigte Nachricht ein und wählen als Absender unsere erfundene, satanistische Nummer:

Versand des Codes via Firmensms.at mit geändertem Absender

Und schon sind wir verifiziert – mit der Nummer 0664/66666666:

Registrierung erfolgreich! 0664/66666666 meldet sich zum Bewerten ;-)

Um diesen Vorgang zu automatisieren benötigt es nur etwas Zeit und eine Skriptsprache nach Wahl – und schon könnte man beliebig viele Accounts erstellen. Da dies den Betrieb der App jedoch beeinflussen würde, verweisen wir an dieser Stelle nur auf die theoretische Möglichkeit innerhalb weniger Stunden tausende Stimmen zu generieren und die Bewertung nach Belieben zu manipulieren.

Kosten der Stimmveränderung

Dieser ‘Angriff’ kostet natürlich Geld – doch nicht besonders viel. Unserem Vertrag nach zahlen wir 0,065 EUR pro SMS bei firmensms.at. 6,5 cent pro Stimme ist durchaus preiswert – um 65 Euro erhält man so 1000 Stimmen. Für etwas mehr Kleingeld, nämlich für 650 EUR, erhält man 10.000 Stimmen zur freien Verwendung. Damit ließe sich die Bewertung nach Belieben verändern.

Hijacking von Accounts

Nun haben wir gezeigt, wie man die Bewertung manipulieren könnte und beliebige Nummern registrieren. Aber wie sieht es aus, wenn man wissen möchte wie ein bestimmter Nutzer (Schüler) bewertet hat?

Auch in diesem Fall macht die App es einem einfach: Der oben gezeigte Vorgang kann auch mit einer bereits registrierten, existierenden Nummer durchgeführt werden!
Um nun das Bewertungsverhalten eines bestimmten Benutzers zu erfragen, muss man nur dessen Nummer kennen. Dies ist insbesondere für Lehrer, Mitschüler und sonstige dem Nutzer (Schüler) nahestehende Personen einfach. Statt der -wie oben gezeigten- erfundenen Nummer wird einfach die existierende Nummer des Nutzers verwendet.
Sobald die Registrierung abgeschlossen ist, kann auf den (transparenten) Account des Schülers in Lernsieg zugegriffen werden! Damit ist es nicht nur möglich, das Bewertungsverhalten abzufragen sondern auch es zu ändern.
Wir haben unsere eigenen Accounts übernommen um dies zu beweisen und konnten unsere eigenen Bewertungen abfragen:

Registierung erfolgreich! 0664/66666666 meldet sich zum Bewerten ;-)

Gemäß dem OWASP Mobile Top Ten Project würde diese Schwachstelle in die Kategorie “M4 Insecure Authentication” fallen – hier sind mehr Details dazu zu finden.

Fazit

Wir konnten zeigen, wie einfach die Authentifzierung der App Lernsieg umgangen werden kann. Das gibt von uns 1 von 5 Sternen für IT-Security. Konkret ist es mit unseren Findings möglich:

  • Accounts zu beliebigen Nummern zu erstellen
  • Beliebig viele Bewertungen in kurzer Zeit abzugeben und die Bewertung somit beliebig zu verändern
  • Die Bewertungen beliebiger Nutzer abzufragen

Dies war uns mit relativ einfachen und für jeden Interessierten zugänglichen Mitteln möglich. Es wäre kein Problem für Lehrer nachzuforschen, wie Schüler sie bewertet haben, wenn die Telefonnummer des Nutzers (Schülers) bekannt ist. Da die App unseres Wissens nach zur Zeit keine Möglichkeit zur Löschung eigener Bewertungen bereitstellt, ist diese Möglichkeit wohl längerfristig gegeben. Die Anonymität ist nicht wie versprochen gegeben, da die Nummer nur ein Pseudonym für eine Person ist – es handelt sich also um eine Pseudonymisierung statt einer tatsächlichen Anonymisierung. Während unserer Forschung sind uns weitere Schwachstellen aufgefallen, die wir demnächst publizieren werden. Solange die hier beschriebenen Schwachstellen nicht behoben sind bedeutet das im Fazit:

  • Die Bewertung ist nicht anonym – es ist ein Leichtes herauszufinden, wie jemand bewertet hat, wenn die Nummer bekannt ist
  • Die Bewertung ist nicht verlässlich, es ist einfach diese zu fälschen
  • Die Sicherheit der App kann an weiteren Stellen in Zweifel gezogen werden (Details folgen)

Anhand dieses Beispiels wurde veranschaulicht, dass man die sowieso bereits lückenhafte SMS-Authentifzierung durch schlechte Designentscheidungen noch weiter schwächen kann. Wird der SMS Absender als Authentifzierungsmerkmal verwendet, gleicht dies einem Login nur mit Benutzername – ohne Passwort.

Es ist nicht unser übliches Vorgehen, Schwachstellen direkt zu veröffentlichen: Normalerweise weisen wir die Hersteller zunächst diskret auf Schwachstellen hin. Wir sind in diesem Fall jedoch der Überzeugung, dass Lernsieg ein direktes, ungefiltertes Feedback sehr schätzt.

Update 26.02.2020

Dieser Blogpost löste etwas mehr Reaktionen aus, als wir uns erwartet haben. Wir nehmen Feedback ernst, insbesondere erreichte uns Feedback aus der Security-Community, warum wir hier den sonst von uns eingeschlagenen Weg des Coordinated Disclosure nicht genommen haben. Unsere -zugegebenermaßen- etwas flapsige Begründung bezüglich direktem, ungefiltertem Feedback ist nicht der Hauptgrund.

Der Hauptgrund ist: Diese Schwachstelle war bereits öffentlich bekannt. Mehrere Security-Forscher haben sie unabhängig voneinander gefunden bzw. veröffentlicht (teilweise deutlich früher als wir), in Blogs waren bereits Diskussionen im Gange.

So zum Beispiel in den Kommentaren in Martin Haunschmids Techblog, in dem er sich die App angesehen hat (ähnlich wie wir):

Kommentar zu Haunschmids Blogpost

Hier ist ersichtlich, dass diese Schwachstelle vor dem Re-Release der App bereits bekannt war – und zwar weitaus früher als von uns publiziert und gezeigt. Der Blog-Artikel von Martin Haunschmid ist vom 21.11.2019, das Kommentar, das diese Schwachstelle beschreibt vom 23.11.2019.
In Summe hätten die Entwickler also mehrere Monate zum Nachbessern gehabt – insbesondere die Releasepause hätte sich dafür angeboten. Es ist für uns schwer vorstellbar, dass ein Entwickler einen Blogpost nicht liest, der sich mit der Sicherheit seiner eigenen App beschäftigt.

Um über Artikel oder Seiten, die eigene Produkte thematisieren up-to-date zu bleiben empfehlen wir die Einrichtung von Google Alerts.

Lernsieg hat sich auch direkt geäußert, auch darauf möchten wir eingehen.

Die App ist aus Sicht von Hadrigan sicher, so wie sie sei. Allerdings werde man die Lernsieg-App jetzt binnen zwei Werktagen auf dasselbe SMS-Authentifizierungsverfahren wie WhatsApp umstellen, verspricht der Erfinder. “Das ist ein sehr aufwendiger Prozess, aber mittlerweile können wir das umändern.” Bisher sei die App “nicht gehackt” worden, heißt es. Die Forschung von SEC-Research hält Hardigan für “Dirty Campaigning”.

Statement von Benjamin Hadrigan in der Futurezone

Wir begrüßen die Änderung hin zu einem sichereren Verfikationsverfahren. Ob die App “gehackt” wurde oder nicht, können wir nicht beurteilen, verweisen aber auf das obige Blog-Kommentar. Den Vorwurf des Dirty Campaigning weisen wir aufs Schärfste zurück. Unsere Intention ist die Erhöhung der Sicherheit der Nutzer dieser App.

An SEC-Research üben die “Lernsieg”-Betreiber Kritik: Es entspreche nicht dem Industrie-üblichen Standard, Lücken direkt an Medien und nicht zuerst dem Betreiber zu melden.

Statement von Michael Steiner, derStandard.at

Zu dem sogennanten Coordinated Vulnerability Disclosure Verfahren, das auch wir üblicherweise einsetzen möchten wir folgendes sagen: Dieses Verfahren verwenden wir für neue, unbekannte Schwachstellen, bei denen im Falle einer Veröffentlichung eine Gefährdung für Nutzer oder Organisationen bestehen würde, so zum Beispiel im Fall der medizinischen Daten oder bei Apples iOS Schwachstellen.

Für eine Schwachstelle, die seit 3 Monaten öffentlich bekannt ist, setzen wir dieses Verfahren nicht ein.

Der Sinn des Coordinated Disclosure Verfahrens ist es in erster Linie die Nutzer zu schützen, nicht die Reputation des Herstellers. Das ist nur solange möglich, solange die Schwachstelle nur den Forschern und dem Hersteller bekannt ist bzw. nicht öffentlich bekannt ist. Ist die Schwachstelle bereits öffentlich bekannt (unerheblich in welchem Ausmaß) kann dieser Schutz durch ein Coordinated Disclosure Verfahren nicht mehr gewährleistet werden. Der einzige, mögliche Schutz ist dann die Warnung der Nutzer durch Veröffentlichung der Schwachstelle.

Zu guter Letzt möchten wir noch anmerken, dass es nicht besonders einfach ist, den Hersteller zu kontaktieren. Weder auf der Lernsieg Webseite noch in der App gibt es ein (funktionierendes) Impressum oder eine Kontaktmöglichkeit. In diesem Fall hätten wir den Hersteller lediglich über die Veröffentlichung informiert, mit dem Hinweis dass ein Coordinated Disclosure Verfahren nicht mehr sinnvoll erscheint.

Kontakt, Impressum?

Zusammenfassung:

  • Wir begrüßen die Verbesserungen an der Verifikation
  • Die Schwachstelle ist seit 3 Monaten öffentlich bekannt
  • Die Schwachstelle wurde unabhängig ebenfalls von anderen Forschern gefunden
  • Den Vorwurf des Dirty Campaignings weisen wir auf Schärfste zurück