Übersicht
Betroffenes Produkt: Qiata von SECUDOS Version 4.00.00–4.17.00
CVSS-Bewertung (v3.1): 5.3 (Medium)
Zugewiesene CVE: in Erstellung
Empfehlung: Update zu Version 4.18.00
Credit: Nina Wagner von der MindBytes GmbH
Benutzer können auf Dateien bzw. deren Vorschau (Preview) zugreifen, für die sie nicht berechtigt sind. Dadurch wird die Vertraulichkeit der Inhalte der Dateien gefährdet.
Um unbefugt an Dateien zu gelangen, benötigt man Zugriff auf eine angemeldete Session eines (Gast-)Benutzers. Der Zugriff auf Dateiinhalte ist auf drei verschiedene Weisen möglich. Jeder Fall bringt eigene Vorbedingungen mit sich, die in den technischen Details genauer beschrieben sind. In allen Fällen müssen 1–2 IDs, die zur Datei gehören, bekannt sein:
- Diese IDs bestehen je aus 32 Zeichen der Zeichensätze 0-9 und a-f (16 mögliche Zeichen). Somit gibt es 16^32 mögliche IDs. Das Erraten von gültigen IDs ist somit unwahrscheinlich.
- IDs werden in der Anwendung teils als Bestandteil von URLs verwendet, sodass diese nicht als geheim angesehen werden können.
- Nach unserer Analyse werden in der Anwendung UUIDs in Version 4 verwendet. UUIDs sollten nicht als Sicherheitsmechanismus bspw. im Sinne von Zugriffsschutz betrachtet werden, wie auch in RFC 4122 – Security-Hinweise beschrieben: Do not assume that UUIDs are hard to guess; they should not be used as security capabilities (identifiers whose mere possession grants access), for example. A predictable random number source will exacerbate the situation.
Technische Details
Zum Aufdecken der Schwachstellen haben wir folgendes Setup verwendet:
Ein Benutzer mit der Rolle „Mitarbeiter“, nachfolgend Mitarbeiter-Benutzer genannt, hat eine Datei hochgeladen und mit einem Gast-Benutzer geteilt. Die Abbildung zeigt die hochgeladene Datei mit ihrer Vorschau in einer Session des Mitarbeiter-Benutzers. Insbesondere wurde die Datei für den Gast-Benutzer nicht freigegeben.

Datei, die im Beispiel verwendet wird
Der Zugriff auf den Inhalt einer hochgeladenen Datei ist über den Download derselbigen Datei und, abhängig vom Dateityp, über zwei verschiedene Preview-Versionen möglich:
- Vorschau über das Auge oben rechts im Bereich von Mitarbeitern
- Vorschau über eine Preview-Funktion im Bereich von Gast-Benutzern
Für den unbefugten Zugriff in den verschiedenen Varianten werden die IDs id
und transferId
benötigt, die einer Datei zugeordnet sind. Die IDs können bspw. aus der Download-URL entnommen werden (siehe nachfolgende Abbildung):
- Parameter
id
(im Beispiel0b0a0676-3daa-4ccf-90dd-781b9b302ea5
).
Dieser Wert wird in anderen Requests auch an folgenden Stellen verwendet:- im Parameter
fileId
- im Parameter
id
in URLs der folgenden Form: /v2/preview?id=/TRANSFERFILE/<id/fileId>&[…]
- im Parameter
- Parameter
transferId
(im Beispiel47f1c9b7-bd63-4b4f-95ff-ab96275abf99
)

Extrahieren der zur Datei gehörigen IDs id und transferId in der URL über den Download
Nachfolgende Schritte beschreiben das Vorgehen, über das der Gast-Benutzer unbefugt auf den Inhalt der Datei zugreifen kann.
Möglichkeit 1: Preview aus Gast-Bereich
Über folgende Schritte kann der Gast-Benutzer unbefugt über die Preview aus dem Gast-Bereich auf die Datei zugreifen:
- Verwenden von Burp Suite oder einem ähnlichen Programm, über das das Editieren von HTTP-Anfragen aus dem Browser vor der Weiterleitung zum Server möglich ist. Burp Suite agiert als Proxy, sodass die HTTP-Kommunikation zwischen Browser und Server mitgelesen und verändert werden kann.
- Einloggen mit Gast-Benutzer
- Extrahieren des aktuellen Access Tokens sowie CSRF-Tokens des Gast-Benutzers
- Generieren eines neuen Transfer Tokens für den Parameter
tokenValue
. Transfer Tokens sind genau einmal gültig. - Zusammenstellen der URL für den Zugriff auf die Datei-Preview über eine URL der folgenden Form:
https://example.com/v2/transfers?fileId=<ID der Datei>&transferId=<Transfer ID der Datei>&getPreview=1&tokenValue=<Transfer Token zur einmaligen Verwendung, kann jeder Benutzer für sich anfragen>&access=<gültiges Access Token des Benutzers>
Beispiel fertige URL:https://example.com/v2/transfers?fileId=0b0a0676-3daa-4ccf-90dd-781b9b302ea5&transferId=47f1c9b7-bd63-4b4f-95ff-ab96275abf99&getPreview=1&tokenValue=5995c918-f38d-4d42-a941-11dd797b5761&access=ey<gekürzt>ck
- Download der Preview-Version der Datei über Aufruf der URL im Browser in der Session des Gast-Benutzers

Anfragen eines neuen Transfer Tokens für den Gast-Benutzer

Heruntergeladene Preview-Version der Datei über Preview aus Gast-Bereich
Hinweise:
- Ob eine Preview-Datei für eine Datei verfügbar ist, hängt vom Datei-Typ ab.
- Für Bild-Dateien ist eine Preview möglich, für PHP-Dateien aber beispielsweise nicht.
- Die Preview-Datei ist verpixelt, weshalb Detail-Informationen aus der Original-Datei verloren gehen können.
Möglichkeit 2: Preview aus Mitarbeiter-Bereich
Die in Möglichkeit 2 genutzte Preview-Funktion aus dem Bereich von Mitarbeitern steht im Gast-Bereich nicht zur Verfügung, ggf. aufgrund der Umstellung von einer alten zu einer neuen UI. Über folgende Schritte kann der Gast-Benutzer unbefugt über die Preview aus dem Mitarbeiter-Bereich auf die Datei zugreifen:
- Einloggen mit Gast-Benutzer
- Zusammenstellen der URL für den Zugriff auf die Datei-Preview über eine URL der folgenden Form:
https://domain redacted/v2/preview?&id=/TRANSFERFILE/<ID der Datei>&encoding=base64&extension=PNG&width=464&height=407
Beispiel fertige URL:
https://domain redacted/v2/preview?&id=/TRANSFERFILE/0b0a0676-3daa-4ccf-90dd-781b9b302ea5&encoding=base64&extension=PNG&width=464&height=407 - Download der Preview-Version der Datei über Aufruf der URL mit Access Token des Gast-Benutzers
- Die Server-Antwort enthält eine base64-kodierte Version der Bilddatei. Dekodieren und Abspeichern des Bildes über bspw. folgenden Befehl:
echo "/9j/4A<Base64-kodierter Inhalt aus der Server-Antwort...>" | base64 -d > preview-transferfile.jpg

Download der Preview-Version aus Mitarbeiter-Bereich

Heruntergeladene Datei über Preview-Bereich
Möglichkeit 3: Download der Original-Datei
Für den Download von Original-Dateien ist ein Transfer Token erforderlich. Transfer Token sind einmalig zum Download von Dateien gültig und können von Benutzern in angemeldeten Sessions beliebig oft angefragt werden.
Über folgende Schritte kann ein Gast-Benutzer unbefugt die Original-Datei herunterladen:
- Einloggen mit Gast-Benutzer
- Zugriff auf ein Transfer Token für die Datei, das ein für die Datei berechtigter Benutzer erzeugt hat. Im Beispiel wird eines vom Mitarbeiter-Benutzer verwendet.
- Zusammenstellen der URL für den Zugriff auf die Datei-Preview über eine URL der folgenden Form:
https://example.com/v2/downloads?id=<ID der Datei>&transferId=<Transfer ID der Datei>&no-gzip&access=<Access Token des Gast-Benutzers>&tokenValue=<Transfer Token eines für die Datei berechtigten Benutzer>
Beispiel fertige URL:
https://example.com/v2/downloads?id=0b0a0676-3daa-4ccf-90dd-781b9b302ea5&transferId=47f1c9b7-bd63-4b4f-95ff-ab96275abf99&no-gzip&access=ey<gekürzt>oM&tokenValue=f8264abd-5dac-48df-b4c8-ae46f07cf38c
- Download der Original-Datei über Aufruf der URL im Browser in der Session des Gast-Benutzers

Download mit Access Token des Gast-Benutzers und Transfer Token des Mitarbeiter-Benutzers
Ergänzender Hinweis zur Nachvollziehbarkeit unbefugter Dateizugriffe
Über ein analoges Vorgehen können Dateien heruntergeladen werden, die über die Funktion Team Transfers geteilt wurden. In diesem Fall gibt es ein Zugriffs-Log. Der letzte im Screenshot sichtbare Download wurde mit einem Access Token des Gast-Benutzers zusammen mit einem Transfer Token des Mitarbeiter-Benutzers durchgeführt. Im Log wird der Download dem Mitarbeiter-Benutzer zugeordnet. Das heißt, die Eintragung in die Log-Datei findet vermutlich durch Zuordnung des Transfer Tokens statt. Damit gibt es auf dieser Ebene keine Nachvollziehbarkeit über unbefugte Zugriffe, wie in diesem Fall durch den Gast-Benutzer.

Zugriff durch Gast-Benutzer auf Datei aus Team Transfer wird im Log dem Mitarbeiter-Benutzer zugeordnet