Erraten Sie meinen geteilten Link

Die Linkfreigabe ist eine gängige Methode, um Dateien über öffentlich zugängliche freigegebene URLs für nicht authentifizierte Benutzer freizugeben. Haben Sie sich jemals gefragt, wie sicher das Teilen von Links ist?

Von Isaak Mtizwa, Veröffentlicht am 28. Oktober 2024 4 min Lesezeit

Guess My Secret Link

Dieser Post wurde geschrieben von Gaiëtan Renault.

Die Linkfreigabe ist eine gängige Methode, um Dateien über öffentlich zugängliche freigegebene URLs für nicht authentifizierte Benutzer freizugeben. Haben Sie sich jemals gefragt, wie sicher das Teilen von Links ist?

Betrachten wir die folgende URL im Format https://example.com/{valid token}, die weiterleitet auf einige sensible Webseiteninhalte für verschiedene gültige Token-Strings. Die gültigen Token sind im Allgemeinen wird vom Server zufällig mithilfe einer Hash-Funktion erstellt und sollte von einer externen Partei schwer zu erraten sein.

Die Frage ist dann, ob ein Angreifer durch Brute-Force-Angriff auf verschiedene Token in dieser URL ein {gültiges Token} finden kann und vertrauliche Informationen preisgeben? Genauer gesagt, wie groß ist die Wahrscheinlichkeit, nach n verschiedenen Versuchen zu finden:

Mindestens eine gültige URL, vorausgesetzt, es gibt k gültige und unterschiedliche URLs und die zugehörigen geheimen Token Sind Hex-Strings der Länge l und alle unterschiedlich und gleichmässig verteilt?

Definieren wir Surl, die Menge aller möglichen URLs der Form https://example.com/{token}, wobei token ist ein beliebiger Hex-String der Länge l. Daraus können wir eine Teilmenge von Sshared-Links erstellen (siehe Abb. 1), die Menge aller gültigen URLs der Form https://example.com/{valid token}, wobei gültiges Token eine Hexadezimalzeichenfolge der Länge l ist so dass https://example.com/{valid token} zu einigen vertraulichen Informationen weiterleitet.

Definieren wir die Zufallsvariablenfolge (Xi : i ∈ {1, …, k}) als die Folge der URLs, aus denen gezogen wird Surl nach k gleichmässig zufälligen Picks ohne Ersatz. Wir können die Wahrscheinlichkeit dann wie folgt berechnen:

Als Randbemerkung: Das in Gl. 1, kann aus dem Hyper Geometric Cumulative erhalten werden Verteilungsfunktion (CDF):

Lassen Sie uns nun ein reales Szenario erstellen und diese Wahrscheinlichkeit mithilfe eines Python-Skripts berechnen (siehe Skript 3). Mit Microsoft OneDrive können Sie Dateien oder Ordner (mit spezifischer Zugriffsberechtigung) über die Linkfreigabe freigeben.

Es wird eine URL erstellt, die aus einer eindeutigen ID der Länge 46 und einem Satz aus Groß- und Nicht-Großbuchstaben besteht. Zahlen, Bindestrich und Unterstrich, d. h. {a − z,A − Z, 1 − 9,−, }.

Wir gehen von folgenden Schätzungen aus:

1. Ein böswilliger Brute-Force-Angreifer stellt 10.000 Anfragen pro Sekunde und versucht es eine ganze Woche lang. Das ist
eine große obere Schätzung, dies entspricht etwa 1 TB HTTP-Datenverkehr.

2. Es gibt ungefähr |Sshared-Links| := 108 verschiedene geteilte Links, generiert von Surl, wobei |Surl| = (26 ∗ 2+10 + 2)^46

Wir erhalten eine Wahrscheinlichkeit von 4,9∗10−66. Wie man anhand eines Wahrscheinlichkeits-Risikoanalyse-Ansatzes sehen kann, ist das Ereignis sehr unwahrscheinlich und wir sind auf dieser Seite ziemlich sicher. Um es ins rechte Licht zu rücken:

Diese Wahrscheinlichkeit ist in etwa vergleichbar mit der Auswahl eines bestimmten Atoms aus allen Atomen unserer Galaxie (≈ 10^68).

 

In einem realen Szenario können jedoch verschiedene Dinge schiefgehen. Hier ist eine nicht erschöpfende Liste:

1. Fehlende SSL-Verschlüsselung beim Zugriff auf den freigegebenen Link. Dies führt dazu, dass die URL, auf die zugegriffen wird, verloren geht
Abhören. Heutzutage sind die meisten Verbindungen per SSL gesichert und die URLs somit verschlüsselt.

2. Token leicht zu erraten (z. B. Token wird von einem einfachen Iterator erzeugt;
https://example.com/0000,
https://example.com/0001 usw.)

3. Schlechte Qualität oder schlecht implementierter Token-Zufallsgenerator. Z.B. Siehe Blogbeitrag von Crazycontini [1]
Weitere Informationen hierzu finden Sie hier.

4. Der freigegebene Link (oder das Token) kann durchgesickert sein. Z.B. von Crawling-Bots, vom Referer-Header, vom Web
Protokolle, aus dem Browserverlauf, den Add-ons und dem Cache oder vom Schultersurfen.

5. In den meisten Fällen mangelt es beim Teilen von Links an der Verantwortung, z. Es fehlt das Ablaufdatum oder die Zugriffsprotokolle
Merkmale.

6. Jede Schwachstelle mit Pfadaufzählungsfunktion auf dem Webserver führt zum Verlust aller externen Links.

Referenzen

Crazycontini. Cautionary note: UUIDs generally do not meet security requirements.

https://littlemaninmyhead.wordpress.com/2015/11/22/cautionary-note-uuids-should-generally-not-be-used-for-authentication-tokens/

Bleib auf dem Laufenden mit unserem Newsletter!

Du suchst Bug Bounty News, Hackerportraits und Erfolgsgeschichten aus dem Unternehmensalltag? Bleib auf dem Laufenden mit unserem Newsletter.

Hast Du Fragen?

Nimm mit uns Kontakt auf - wir freuen uns auf Dich!

Termin vereinbaren