Konkrete Kritik an CVSS4
Marc Ruef
Im Rahmen von Source Code Analysen sollen Schwachstellen in Software identifiziert werden. Dabei konzentriert man sich klassischerweise auf die sequenziellen Abläufe, die nach der Übergabe einer spezifischen Benutzereingabe initiiert werden. Hierbei wird die Logik des Graphical User Interface (GUI) aber gerne ignoriert, wodurch Schwachstellen übersehen werden können.
Am 31. August 2017 haben wir eine Schwachstelle in der beliebten App Secure Private Browser der Firma Mirmay gefunden. Diese haben wir unverzüglich dem Entwicklerteam mitgeteilt.
Die App kann genutzt werden, um einen sicheren Browser betreiben zu können. Er funktioniert als dedizierte App, die sich durch eine Authentisierung (PIN oder Touch-ID) absichern lässt. Sobald die App verlassen wird, lassen sich sämtliche Seiten schliessen. Dies führt dazu, dass beim erneuten Öffnen der App zuerst wieder die lokale Authentisierung am Gerät erfolgen muss, um auf die Inhalte zugreifen zu können. Selbst wenn die App im Multitasking Switcher als Vorschau angezeigt wird, ist dann nur der Login-Screen ersichtlich. Drittpersonen können nach dem Schliessen der App also nicht mehr sehen, was zuvor konsumiert wurde. Ein Verhalten, das von Mobile Banking Apps bestens bekannt ist.
Aufgrund einer Race Condition ist es möglich, dass ungewollt ein Zustand erzeugt werden kann, in dem dieser automatische Lock nicht richtig funktioniert.
Um die Schwachstelle auszunutzen, sind die folgenden Schritte erforderlich:
Damit diese Schwachstelle auftreten und sie ausgenutzt werden kann, müssen verschidene Gegebenheiten erfüllt sein. Grundsätzlich ist eine Fehlnutzung des Anwenders zu einem gewissen Grad erforderlich. Dennoch kann dieser Zustand unabsichtlich erzeugt und damit die zentrale Sicherheitsfunktion der App ausgehebelt werden.
Der technische Hintergrund dieser Schwachstelle lässt sich ohne Einsicht in den Code nur schwer mit absoluter Genauigkeit rekonstruieren.
Es deutet sich aber an, dass die App die Reihenfolge der Aktivitäten in diesem spezifischen Punkt nicht richtig angeht: Wenn das Video minimiert und die App wieder geöffnet wird, sollte vor der initialen Authentisierung mittels LocalAuthentication ein Schliessen des Videos oder das Anzeigen eines Overlays durchgeführt werden. Erst dann gilt es den modalen Dialog der Authentisierung anzuzeigen.
let myContext = LAContext() let myLocalizedReasonString = <#String explaining why app needs authentication#> var authError: NSError? = nil if #available(iOS 8.0, OSX 10.12, *) { if myContext.canEvaluatePolicy(LAPolicy.DeviceOwnerAuthenticationWithBiometrics, error: &authError) { myContext.evaluatePolicy(LAPolicy.DeviceOwnerAuthenticationWithBiometrics, localizedReason: myLocalizedReasonString) { (success, evaluateError) in if (success) { // User authenticated successfully, take appropriate action } else { // User did not authenticate successfully, look at error and take appropriate action } } } else { // Could not evaluate policy; look at authError and present an appropriate message to user } } else { // Fallback on earlier versions }
Die Entwicklung von sicherer Software ist nicht einfach. Vor allem dann, wenn Parallelisierung, Multi-Threading und Multi-Tasking mitspielen. Dann nämlich wird konkret von einer rein sequentiellen Ausführung abgewichen, was das Problem von komplexen Race Conditions einführt. Das Entdecken, Analysieren und Beheben dieser Schwachstellenklasse ist aufgrund ihrer Schwierigkeit sehr unbeliebt (Dies dürfte mitunter auch der Grund sein, warum der Hersteller in keinster Weise auf unsere Mitteilung reagiert hat).
Doch genau deswegen sollte man sich intensiv und fokusiert auf dieser Ebene mit einer Software auseinandersetzen. Bei modernen GUIs gibt es eine Vielzahl an Events, die auf den verschiedenen Controls ausgeführt werden können. Wer Software mit GUIs sicher entwickeln will, muss diese alle im Griff haben. Das ist definitiv keine einfache Aufgabe.
Unsere Spezialisten kontaktieren Sie gern!
Marc Ruef
Marc Ruef
Marc Ruef
Marc Ruef
Unsere Spezialisten kontaktieren Sie gern!