Supabase Security

HackTricks 지원하기

기본 정보

그들의 랜딩 페이지에 따르면: Supabase는 오픈 소스 Firebase 대안입니다. Postgres 데이터베이스, 인증, 즉시 API, 엣지 함수, 실시간 구독, 스토리지 및 벡터 임베딩으로 프로젝트를 시작하세요.

서브도메인

기본적으로 프로젝트가 생성되면 사용자는 **jnanozjdybtpqgcwhdiz.supabase.co**와 같은 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는 문서에서 찾을 수 있지만, 가장 흥미로운 엔드포인트는 다음과 같습니다:

가입 (/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>

그래서, 클라이언트가 부여받은 서브도메인으로 supabase를 사용하는 것을 발견할 때마다 (회사의 서브도메인이 그들의 supabase 서브도메인에 CNAME을 가질 가능성이 있음), **supabase API를 사용하여 플랫폼에 새 계정을 생성해 보십시오**.

### 비밀 / 서비스\_역할 API 키

**`role: "service_role"`**로 비밀 API 키도 생성됩니다. 이 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는 이에 대해 요금을 부과할 수 있습니다:

<figure><img src="../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure>

### 비밀번호 및 세션

최소 비밀번호 길이(기본값), 요구 사항(기본값 없음)을 지정하고 유출된 비밀번호 사용을 금지할 수 있습니다.\
기본 요구 사항이 약하므로 **요구 사항을 개선하는 것이 좋습니다**.

* 사용자 세션: 사용자 세션 작동 방식을 구성할 수 있습니다 (타임아웃, 사용자당 1세션...)
* 봇 및 남용 방지: Captcha를 활성화할 수 있습니다.

### SMTP 설정

이메일을 보내기 위해 SMTP를 설정할 수 있습니다.

### 고급 설정

* 액세스 토큰의 만료 시간 설정 (기본값 3600)
* 잠재적으로 손상된 새로 고침 토큰을 감지하고 취소하는 설정 및 타임아웃
* MFA: 사용자당 동시에 등록할 수 있는 MFA 요소 수를 지정 (기본값 10)
* 최대 직접 데이터베이스 연결: 인증에 사용되는 최대 연결 수 (기본값 10)
* 최대 요청 지속 시간: 인증 요청이 지속될 수 있는 최대 시간 (기본값 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에 **비밀을 저장**할 수 있으며, 이는 **엣지 함수에 의해 접근 가능**합니다 (웹에서 생성 및 삭제할 수 있지만, 값에 직접 접근할 수는 없습니다).

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

AWS 해킹 배우기 및 연습하기:<img src="../.gitbook/assets/image (1).png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../.gitbook/assets/image (1).png" alt="" data-size="line">\
GCP 해킹 배우기 및 연습하기: <img src="../.gitbook/assets/image (2).png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../.gitbook/assets/image (2).png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)

<details>

<summary>HackTricks 지원하기</summary>

* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**

</details>

</div>

Last updated