Nextcloud: Schwachstelle in Passwords-App

​Für Nextcloud gibt es in den App-Stores für Android und iOS den Passwortmanager Passwords. Passwords verschlüsselt alle vertraulichen Informationen entweder serverseitig oder optional clientseitig. Die clientseitige Verschlüsselung empfiehlt sich insbesondere dann, wenn man dem Server oder seinem Betreiber nicht vollständig vertraut. Realisiert wird die clientseitige Verschlüsselung über ein zweites Passwort, welches nach der Anmeldung eingegeben wird. Dieses zweite Passwort verlässt den Client (Browser, Smartphone App, Browser Extension etc.) nicht und verschlüsselt Einträge des Passwortmanagers bevor sie zum Nextcloud-Server übertragen werden.

Gastbeitrag

Ein Gastbeitrag von Björn Voigt.

Allerdings wird beim Anlegen oder Ändern eines Passworts zusätzlich zum verschlüsselten Passwort vom Client auch ein SHA1-Hash des Passworteintrags an den Server geschickt und dort in der Nextcloud-Datenbank gespeichert.

Die Schwachstelle liegt nun darin, dass es unter bestimmten Voraussetzungen möglich ist, aus SHA1-Hashwerten eines Passworts wieder ein Klartext-Passwort zu ermitteln. Zunächst müsste ein Angreifer Zugriff auf die Nextcloud-Datenbank bekommen oder die Kommunikation zwischen Client und Server mitschneiden bzw. aufbrechen (bspw. mittels SSL-Inspection). Der Angreifer kann danach versuchen, die erbeuteten SHA1-Hashwerte in Klartext-Passworte zurückzuverwandeln. SHA1 gilt seit 2005 als unsicher, zudem wird hier ein Unsalted-Hash verwendet.

An einem kleinen Beispiel soll der Angriff demonstriert werden. Ein User mit der ID maxmustermann legt für sein Google-Konto maxmustermann@google.com im Passwortmanager das Passwort maxmax21 an. In der Datenbank landet der SHA1-Hashwert von maxmax21:

mysql> select id, user_id, hash from oc_passwords_entity_password_revision where deleted <> 1;
+----+---------------+------------------------------------------+
| id | user_id       | hash                                     |
+----+---------------+------------------------------------------+
|  9 | maxmustermann | 929cfc07c5d6c23f3d35af227f4342e015f3e225 |
+----+---------------+------------------------------------------+
1 row in set (0,00 sec)

Mit einem passenden Brute-Force-Passwort-Cracker (bspw. Hashcat) und einem entsprechenden Wörterbuch/Rainbow-Table lässt sich das Passwort je nach Rechenpower schnell ermitteln: maxmax21

Der Angreifer hat noch das Problem, das er allein mit der Datenbank nicht ermitteln kann, wie Webseite und Username des Passworteintrags von maxmustermann lauten, denn beide Informationen liegen verschlüsselt vor. Beides muss er auf anderen Wegen ermitteln.

Die Schwachstelle der Passwords App ist seit Oktober 2018 bekannt und wird in Bug Report 83 diskutiert. Aktuell wird der SHA1-Hash serverseitig verwendet, um serverseitig prüfen zu können, ob bestimmte Passworte in der HIBP-Passwortsammlung aufgetaucht sind. Alle Tests erfolgten mit Nextcloud 21, Nextcloud Passwords 2021.5.0 je mit clientseitiger und serverseitiger Verschlüsselung, mit dem integrierten Webclient und mit der Android App Nextcloud Passwords 21.4.0 von joleaf.

Unterstütze den Blog mit einem Dauerauftrag! Mitmachen ➡