Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an dieHackTricks und HackTricks Cloud GitHub-Repositories einreichen.
Grundlegende Informationen
Gemäß ihrer Startseite: Supabase ist eine Open-Source-Alternative zu Firebase. Starten Sie Ihr Projekt mit einer Postgres-Datenbank, Authentifizierung, sofortigen APIs, Edge Functions, Echtzeit-Abonnements, Speicher und Vektoreinbettungen.
Subdomäne
Im Grunde erhält der Benutzer bei der Erstellung eines Projekts eine Supabase.co-Subdomäne wie: jnanozjdybtpqgcwhdiz.supabase.co
Datenbankkonfiguration
Diese Daten können über einen Link wie https://supabase.com/dashboard/project/<project-id>/settings/database abgerufen werden
Diese Datenbank wird in einer AWS-Region bereitgestellt, und um eine Verbindung dazu herzustellen, wäre es möglich, dies über die Verbindung zu tun: postgres://postgres.jnanozjdybtpqgcwhdiz:[DEIN PASSWORT]@aws-0-us-west-1.pooler.supabase.com:5432/postgres (dies wurde in us-west-1 erstellt).
Das Passwort ist ein Passwort, das der Benutzer zuvor eingegeben hat.
Daher, da die Subdomäne bekannt ist und als Benutzername verwendet wird und die AWS-Regionen begrenzt sind, könnte es möglich sein, zu versuchen, das Passwort brute forcen.
Dieser Abschnitt enthält auch Optionen zum:
Zurücksetzen des Datenbankpassworts
Konfigurieren des Verbindungspoolings
Konfigurieren von SSL: Ablehnen von Klartextverbindungen (standardmäßig aktiviert)
Konfigurieren der Festplattengröße
Anwenden von Netzwerkbeschränkungen und Sperren
API-Konfiguration
Diese Daten können über einen Link wie https://supabase.com/dashboard/project/<project-id>/settings/api abgerufen werden
Die URL zum Zugriff auf die Supabase-API in Ihrem Projekt wird wie folgt aussehen: https://jnanozjdybtpqgcwhdiz.supabase.co.
Anonyme API-Schlüssel
Es wird auch einen anon API-Schlüssel generieren (Rolle: "anon"), wie z.B.: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6ImpuYW5vemRyb2J0cHFnY3doZGl6Iiwicm9sZSI6ImFub24iLCJpYXQiOjE3MTQ5OTI3MTksImV4cCI6MjAzMDU2ODcxOX0.sRN0iMGM5J741pXav7UxeChyqBE9_Z-T0tLA9Zehvqk, den die Anwendung verwenden muss, um den in unserem Beispiel freigegebenen API-Schlüssel zu kontaktieren.
Es ist möglich, die API-REST zu finden, um diese API in den Dokumenten zu kontaktieren, aber die interessantesten Endpunkte wären:
</details>
So, wann immer Sie einen Client entdecken, der Supabase mit dem ihm gewährten Subdomain verwendet (es ist möglich, dass eine Subdomain des Unternehmens über ihrer Supabase-Subdomain ein CNAME hat), könnten Sie versuchen, **ein neues Konto in der Plattform über die Supabase-API zu erstellen**.
### Geheime / service\_role API-Schlüssel
Ein geheimer API-Schlüssel wird auch mit **`role: "service_role"`** generiert. Dieser API-Schlüssel sollte geheim gehalten werden, da er in der Lage sein wird, die **Zeilen-Ebene-Sicherheit** zu umgehen.
Der API-Schlüssel sieht so aus: `eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6ImpuYW5vemRyb2J0cHFnY3doZGl6Iiwicm9sZSI6InNlcnZpY2Vfcm9sZSIsImlhdCI6MTcxNDk5MjcxOSwiZXhwIjoyMDMwNTY4NzE5fQ.0a8fHGp3N_GiPq0y0dwfs06ywd-zhTwsm486Tha7354`
### JWT Secret
Ein **JWT Secret** wird auch generiert, damit die Anwendung **benutzerdefinierte JWT-Token erstellen und signieren** kann.
## Authentifizierung
### Registrierungen
<div data-gb-custom-block data-tag="hint" data-style='success'>
Standardmäßig erlaubt Supabase **neuen Benutzern, Konten** in Ihrem Projekt zu erstellen, indem sie die zuvor genannten API-Endpunkte verwenden.
</div>
Diese neuen Konten müssen jedoch standardmäßig **ihre E-Mail-Adresse validieren**, um sich in das Konto einloggen zu können. Es ist möglich, **"Anonyme Anmeldungen zulassen"** zu aktivieren, um Personen das Einloggen ohne Überprüfung ihrer E-Mail-Adresse zu ermöglichen. Dies könnte Zugriff auf **unerwartete Daten** gewähren (sie erhalten die Rollen `public` und `authenticated`).\
Dies ist eine sehr schlechte Idee, da Supabase pro aktiven Benutzer Gebühren erhebt, sodass Personen Benutzer erstellen und sich einloggen könnten und Supabase für diese Gebühren erheben würde:
<figure><img src="../.gitbook/assets/image (1).png" alt=""><figcaption></figcaption></figure>
### Passwörter & Sitzungen
Es ist möglich, die minimale Passwortlänge anzugeben (standardmäßig), Anforderungen (standardmäßig nicht) und das Verwenden von durchgesickerten Passwörtern zu verbieten.\
Es wird empfohlen, die Anforderungen zu verbessern, da die Standardanforderungen schwach sind.
* Benutzersitzungen: Es ist möglich zu konfigurieren, wie Benutzersitzungen funktionieren (Timeouts, 1 Sitzung pro Benutzer...)
* Bot- und Missbrauchsschutz: Es ist möglich, Captcha zu aktivieren.
### SMTP-Einstellungen
Es ist möglich, einen SMTP einzurichten, um E-Mails zu senden.
### Erweiterte Einstellungen
* Ablaufzeit für Zugriffstoken festlegen (standardmäßig 3600)
* Festlegen, um potenziell kompromittierte Auffrischungstoken zu erkennen und zu widerrufen und Timeout
* MFA: Angeben, wie viele MFA-Faktoren pro Benutzer gleichzeitig eingeschrieben werden können (standardmäßig 10)
* Maximale direkte Datenbankverbindungen: Maximale Anzahl von Verbindungen, die zur Authentifizierung verwendet werden (standardmäßig 10)
* Maximale Anforderungsdauer: Maximale Zeit, die für eine Authentifizierungsanforderung zulässig ist (standardmäßig 10s)
## Speicher
<div data-gb-custom-block data-tag="hint" data-style='success'>
Supabase erlaubt es, **Dateien zu speichern** und über eine URL darauf zuzugreifen (es verwendet S3-Buckets).
</div>
* Legen Sie das Upload-Dateigrößenlimit fest (Standardwert beträgt 50 MB)
* Die S3-Verbindung wird mit einer URL wie dieser bereitgestellt: `https://jnanozjdybtpqgcwhdiz.supabase.co/storage/v1/s3`
* Es ist möglich, **S3-Zugriffsschlüssel** anzufordern, die aus einer `Zugriffsschlüssel-ID` (z. B. `a37d96544d82ba90057e0e06131d0a7b`) und einem `geheimen Zugriffsschlüssel` (z. B. `58420818223133077c2cec6712a4f909aec93b4daeedae205aa8e30d5a860628`) bestehen
## Edge-Funktionen
Es ist auch möglich, **Geheimnisse** in Supabase zu speichern, die von Edge-Funktionen **zugänglich sind** (sie können über das Web erstellt und gelöscht werden, aber es ist nicht möglich, direkt auf ihren Wert zuzugreifen).