Supabase Security

htARTE(HackTricks AWS Red Team Expert) を通じてゼロからヒーローまでAWSハッキングを学ぶ

HackTricksをサポートする他の方法:

基本情報

ランディングページによると、SupabaseはオープンソースのFirebaseの代替品です。Postgresデータベース、認証、インスタントAPI、Edge Functions、リアルタイムサブスクリプション、ストレージ、およびベクトル埋め込みを使用してプロジェクトを開始できます。

サブドメイン

基本的にプロジェクトが作成されると、ユーザーは次のようなsupabase.coサブドメインを受け取ります:jnanozjdybtpqgcwhdiz.supabase.co

データベース構成

このデータは、https://supabase.com/dashboard/project/<project-id>/settings/databaseのようなリンクからアクセスできます

このデータベースはAWSリージョンに展開され、それに接続するためには、postgres://postgres.jnanozjdybtpqgcwhdiz:[YOUR-PASSWORD]@aws-0-us-west-1.pooler.supabase.com:5432/postgres(これはus-west-1で作成されました)に接続することが可能です。 パスワードは、ユーザーが以前に設定したパスワードです。

したがって、サブドメインが既知であり、ユーザー名として使用され、AWSリージョンが限られているため、パスワードをブルートフォースで試すことが可能かもしれません。

このセクションには、次のオプションも含まれています:

  • データベースパスワードのリセット

  • 接続プーリングの構成

  • SSLの構成:プレーンテキスト接続を拒否する(デフォルトで有効になっています)

  • ディスクサイズの構成

  • ネットワーク制限と禁止の適用

API構成

このデータは、https://supabase.com/dashboard/project/<project-id>/settings/apiのようなリンクからアクセスできます

プロジェクト内のsupabase APIにアクセスするためのURLは次のようになります:https://jnanozjdybtpqgcwhdiz.supabase.co

anon apiキー

また、anon APIキーrole: "anon")が生成されます。例:eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6ImpuYW5vemRyb2J0cHFnY3doZGl6Iiwicm9sZSI6ImFub24iLCJpYXQiOjE3MTQ5OTI3MTksImV4cCI6MjAzMDU2ODcxOX0.sRN0iMGM5J741pXav7UxeChyqBE9_Z-T0tLA9Zehvqk。アプリケーションは、この例で公開されたAPIキーに連絡するために使用する必要があります。

このAPIに連絡するためのAPI RESTをドキュメントで見つけることができますが、最も興味深いエンドポイントは次のとおりです:

Signup (/auth/v1/signup)

``` POST /auth/v1/signup HTTP/2 Host: id.io.net Content-Length: 90 X-Client-Info: supabase-js-web/2.39.2 Sec-Ch-Ua: "Not-A.Brand";v="99", "Chromium";v="124" Sec-Ch-Ua-Mobile: ?0 Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6ImpuYW5vemRyb2J0cHFnY3doZGl6Iiwicm9sZSI6ImFub24iLCJpYXQiOjE3MTQ5OTI3MTksImV4cCI6MjAzMDU2ODcxOX0.sRN0iMGM5J741pXav7UxeChyqBE9_Z-T0tLA9Zehvqk User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.6367.60 Safari/537.36 Content-Type: application/json;charset=UTF-8 Apikey: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6ImpuYW5vemRyb2J0cHFnY3doZGl6Iiwicm9sZSI6ImFub24iLCJpYXQiOjE3MTQ5OTI3MTksImV4cCI6MjAzMDU2ODcxOX0.sRN0iMGM5J741pXav7UxeChyqBE9_Z-T0tLA9Zehvqk Sec-Ch-Ua-Platform: "macOS" Accept: */* Origin: https://cloud.io.net Sec-Fetch-Site: same-site Sec-Fetch-Mode: cors Sec-Fetch-Dest: empty Referer: https://cloud.io.net/ Accept-Encoding: gzip, deflate, br Accept-Language: en-GB,en-US;q=0.9,en;q=0.8 Priority: u=1, i

{"email":"test@exmaple.com","password":"SomeCOmplexPwd239."}

</details>

<details>

<summary>ログイン (/auth/v1/token?grant_type=password)</summary>

POST /auth/v1/token?grant_type=password HTTP/2 Host: hypzbtgspjkludjcnjxl.supabase.co Content-Length: 80 X-Client-Info: supabase-js-web/2.39.2 Sec-Ch-Ua: "Not-A.Brand";v="99", "Chromium";v="124" Sec-Ch-Ua-Mobile: ?0 Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6ImpuYW5vemRyb2J0cHFnY3doZGl6Iiwicm9sZSI6ImFub24iLCJpYXQiOjE3MTQ5OTI3MTksImV4cCI6MjAzMDU2ODcxOX0.sRN0iMGM5J741pXav7UxeChyqBE9_Z-T0tLA9Zehvqk User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.6367.60 Safari/537.36 Content-Type: application/json;charset=UTF-8 Apikey: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6ImpuYW5vemRyb2J0cHFnY3doZGl6Iiwicm9sZSI6ImFub24iLCJpYXQiOjE3MTQ5OTI3MTksImV4cCI6MjAzMDU2ODcxOX0.sRN0iMGM5J741pXav7UxeChyqBE9_Z-T0tLA9Zehvqk Sec-Ch-Ua-Platform: "macOS" Accept: / Origin: https://cloud.io.net Sec-Fetch-Site: same-site Sec-Fetch-Mode: cors Sec-Fetch-Dest: empty Referer: https://cloud.io.net/ Accept-Encoding: gzip, deflate, br Accept-Language: en-GB,en-US;q=0.9,en;q=0.8 Priority: u=1, i

{"email":"test@exmaple.com","password":"SomeCOmplexPwd239."}

</details>

### シークレット / サービスロール API キー

**`role: "service_role"`** を使用してプラットフォームで新しいアカウントを作成しようとすることができます。

生成されるシークレット API キーは **Row Level Security** をバイパスできるため、秘密にしておく必要があります。

API キーは次のようになります:`eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6ImpuYW5vemRyb2J0cHFnY3doZGl6Iiwicm9sZSI6InNlcnZpY2Vfcm9sZSIsImlhdCI6MTcxNDk5MjcxOSwiZXhwIjoyMDMwNTY4NzE5fQ.0a8fHGp3N_GiPq0y0dwfs06ywd-zhTwsm486Tha7354`

### JWT シークレット

アプリケーションが **カスタム JWT トークンを作成して署名する** ために **JWT シークレット** も生成されます。

## 認証

### サインアップ

<div data-gb-custom-block data-tag="hint" data-style='success'>

**デフォルト** では、supabase は **新しいユーザーがプロジェクトにアカウントを作成できるように** します。これは、前述の API エンドポイントを使用して行われます。

</div>

ただし、これらの新しいアカウントは、**デフォルトでは**、ログインするためには **メールアドレスを検証する必要があります**。メールアドレスを確認せずにログインできるように **"匿名サインインを許可"** を有効にすることが可能です。これにより、**予期しないデータにアクセス** できる可能性があります(彼らは `public` と `authenticated` のロールを取得します)。
これは非常に悪い考えです。なぜなら、supabase はアクティブなユーザーごとに料金が発生するため、人々がユーザーを作成してログインすると、supabase はそれに対して料金を請求する可能性があるからです。

### パスワードとセッション

最小パスワード長を指定したり(デフォルトでは)、要件を設定したり(デフォルトではしない)、流出したパスワードの使用を禁止したりすることが可能です。
デフォルトの要件は弱いため、**要件を強化することが推奨** されます。

* ユーザーセッション:ユーザーセッションの動作を構成することが可能です(タイムアウト、ユーザーごとに1つのセッション...)
* ボットおよび乱用保護:キャプチャを有効にすることが可能です。

### SMTP 設定

SMTP を設定してメールを送信することが可能です。

### 高度な設定

* アクセストークンの有効期限を設定する(デフォルトは 3600)
* 潜在的に危険なリフレッシュトークンを検出および取り消すように設定する
* MFA:ユーザーごとに同時に登録できる MFA 要素の数を示す(デフォルトは 10)
* 最大直接データベース接続数:認証に使用される最大接続数(デフォルトは 10)
* 最大リクエスト期間:Auth リクエストが続行できる最大時間(デフォルトは 10秒)

## ストレージ

<div data-gb-custom-block data-tag="hint" data-style='success'>

Supabase は **ファイルを保存** し、それらを URL を介してアクセス可能にします(S3 バケットを使用します)。

</div>

* アップロードファイルサイズ制限を設定する(デフォルトは 50MB)
* S3 接続は、次のような URL で提供されます:`https://jnanozjdybtpqgcwhdiz.supabase.co/storage/v1/s3`
* `access key ID`(例:`a37d96544d82ba90057e0e06131d0a7b`)と `secret access key`(例:`58420818223133077c2cec6712a4f909aec93b4daeedae205aa8e30d5a860628`)から構成される S3 アクセスキーを **リクエストする** ことが可能です。

## エッジ関数

Supabase には **エッジ関数でアクセス可能な** シークレットを **保存** することが可能です(Web から作成および削除することができますが、その値に直接アクセスすることはできません)。

最終更新