# Vercel

{{#include ../banners/hacktricks-training.md}}

## 基本情報

Vercelにおいて、**チーム**はクライアントに属する完全な**環境**であり、**プロジェクト**は**アプリケーション**です。

**Vercel**のハードニングレビューを行うには、**Viewer role permission**を持つユーザー、または少なくとも**プロジェクトの閲覧者権限**を持つユーザーに依頼して、プロジェクトを確認する必要があります（チーム設定も確認する必要がない場合）。

## プロジェクト設定

### 一般

**目的:** プロジェクト名、フレームワーク、ビルド設定などの基本的なプロジェクト設定を管理します。

#### セキュリティ設定:

- **転送**
- **誤設定:** プロジェクトを別のチームに転送することを許可します。
- **リスク:** 攻撃者がプロジェクトを盗む可能性があります。
- **プロジェクトの削除**
- **誤設定:** プロジェクトを削除することを許可します。
- **リスク:** プロジェクトが削除される可能性があります。

---

### ドメイン

**目的:** カスタムドメイン、DNS設定、SSL設定を管理します。

#### セキュリティ設定:

- **DNS設定エラー**
- **誤設定:** 悪意のあるサーバーを指す不正確なDNSレコード（A、CNAME）。
- **リスク:** ドメインハイジャック、トラフィックの傍受、フィッシング攻撃。
- **SSL/TLS証明書管理**
- **誤設定:** 弱いまたは期限切れのSSL/TLS証明書を使用します。
- **リスク:** 中間者攻撃（MITM）に対して脆弱で、データの整合性と機密性が損なわれる可能性があります。
- **DNSSECの実装**
- **誤設定:** DNSSECを有効にしない、または不正確なDNSSEC設定。
- **リスク:** DNSスプーフィングやキャッシュポイズニング攻撃に対する感受性が高まります。
- **ドメインごとの使用環境**
- **誤設定:** 本番環境でドメインが使用する環境を変更します。
- **リスク:** 本番環境で利用可能であってはならない潜在的な秘密や機能が露出する可能性があります。

---

### 環境

**目的:** 特定の設定と変数を持つ異なる環境（開発、プレビュー、本番）を定義します。

#### セキュリティ設定:

- **環境の分離**
- **誤設定:** 環境間で環境変数を共有します。
- **リスク:** 本番の秘密が開発またはプレビュー環境に漏洩し、露出が増加します。
- **機密環境へのアクセス**
- **誤設定:** 本番環境への広範なアクセスを許可します。
- **リスク:** 不正な変更やライブアプリケーションへのアクセスが行われ、ダウンタイムやデータ侵害の可能性があります。

---

### 環境変数

**目的:** アプリケーションで使用される環境固有の変数と秘密を管理します。

#### セキュリティ設定:

- **機密変数の露出**
- **誤設定:** 機密変数に`NEXT_PUBLIC_`をプレフィックスし、クライアント側でアクセス可能にします。
- **リスク:** APIキー、データベースの資格情報、またはその他の機密データが公開され、データ侵害につながる可能性があります。
- **機密無効**
- **誤設定:** 無効（デフォルト）の場合、生成された秘密の値を読み取ることが可能です。
- **リスク:** 機密情報の偶発的な露出や不正アクセスの可能性が高まります。
- **共有環境変数**
- **誤設定:** これらはチームレベルで設定された環境変数であり、機密情報を含む可能性があります。
- **リスク:** 機密情報の偶発的な露出や不正アクセスの可能性が高まります。

---

### Git

**目的:** Gitリポジトリの統合、ブランチ保護、デプロイメントトリガーを設定します。

#### セキュリティ設定:

- **無視されたビルドステップ（TODO）**
- **誤設定:** このオプションは、新しいコミットがGithubにプッシュされたときに実行されるbashスクリプト/コマンドを設定できるようです。これによりRCEが可能になる可能性があります。
- **リスク:** TBD

---

### 統合

**目的:** プロジェクトの機能を強化するためにサードパーティのサービスやツールを接続します。

#### セキュリティ設定:

- **安全でないサードパーティ統合**
- **誤設定:** 信頼できないまたは安全でないサードパーティサービスとの統合。
- **リスク:** 脆弱性、データ漏洩、または侵害された統合を通じたバックドアの導入。
- **過剰な権限を持つ統合**
- **誤設定:** 統合されたサービスに過剰な権限を付与します。
- **リスク:** プロジェクトリソースへの不正アクセス、データ操作、またはサービスの中断。
- **統合監視の欠如**
- **誤設定:** サードパーティ統合の監視や監査を怠ります。
- **リスク:** 侵害された統合の検出が遅れ、セキュリティ侵害の影響が増大します。

---

### デプロイメント保護

**目的:** 様々な保護メカニズムを通じてデプロイメントを安全にし、誰が環境にアクセスしデプロイできるかを制御します。

#### セキュリティ設定:

**Vercel認証**

- **誤設定:** 認証を無効にするか、チームメンバーのチェックを強制しない。
- **リスク:** 不正なユーザーがデプロイメントにアクセスでき、データ侵害やアプリケーションの悪用につながる可能性があります。

**自動化のための保護バイパス**

- **誤設定:** バイパス秘密を公開するか、弱い秘密を使用します。
- **リスク:** 攻撃者がデプロイメント保護をバイパスし、保護されたデプロイメントにアクセスして操作する可能性があります。

**共有リンク**

- **誤設定:** リンクを無差別に共有するか、古いリンクを取り消さない。
- **リスク:** 認証やIP制限をバイパスして保護されたデプロイメントに不正アクセスする可能性があります。

**OPTIONS Allowlist**

- **誤設定:** 過度に広いパスや機密エンドポイントを許可リストに追加します。
- **リスク:** 攻撃者が保護されていないパスを悪用して不正な行動を行ったり、セキュリティチェックをバイパスする可能性があります。

**パスワード保護**

- **誤設定:** 弱いパスワードを使用するか、安全でない方法で共有します。
- **リスク:** パスワードが推測されたり漏洩した場合、デプロイメントに不正アクセスされる可能性があります。
- **注意:** **Pro**プランで利用可能で、**Advanced Deployment Protection**の一部として追加の$150/月が必要です。

**デプロイメント保護の例外**

- **誤設定:** 本番または機密ドメインを例外リストに誤って追加します。
- **リスク:** 重要なデプロイメントが公開され、データ漏洩や不正アクセスにつながる可能性があります。
- **注意:** **Pro**プランで利用可能で、**Advanced Deployment Protection**の一部として追加の$150/月が必要です。

**信頼されたIP**

- **誤設定:** IPアドレスやCIDR範囲を不正確に指定します。
- **リスク:** 正当なユーザーがブロックされるか、不正なIPがアクセスを得る可能性があります。
- **注意:** **Enterprise**プランで利用可能です。

---

### 関数

**目的:** サーバーレス関数を設定し、ランタイム設定、メモリ割り当て、セキュリティポリシーを含めます。

#### セキュリティ設定:

- **なし**

---

### データキャッシュ

**目的:** パフォーマンスを最適化し、データストレージを制御するためのキャッシング戦略と設定を管理します。

#### セキュリティ設定:

- **キャッシュの消去**
- **誤設定:** すべてのキャッシュを削除することを許可します。
- **リスク:** 不正なユーザーがキャッシュを削除し、潜在的なDoSを引き起こす可能性があります。

---

### Cronジョブ

**目的:** 自動化されたタスクやスクリプトを指定された間隔で実行するようにスケジュールします。

#### セキュリティ設定:

- **Cronジョブの無効化**
- **誤設定:** コード内で宣言されたcronジョブを無効にすることを許可します。
- **リスク:** サービスの中断の可能性（cronジョブが何のためにあったかによります）。

---

### ログドレイン

**目的:** 外部ログサービスを設定して、監視と監査のためにアプリケーションログをキャプチャし保存します。

#### セキュリティ設定:

- なし（チーム設定から管理）

---

### セキュリティ

**目的:** プロジェクトアクセス、ソース保護などに影響を与えるさまざまなセキュリティ関連設定の中央ハブです。

#### セキュリティ設定:

**ビルドログとソース保護**

- **誤設定:** 保護を無効にするか、`/logs`および`/src`パスを公開します。
- **リスク:** ビルドログやソースコードへの不正アクセスが行われ、情報漏洩や脆弱性の悪用につながる可能性があります。

**Gitフォーク保護**

- **誤設定:** 適切なレビューなしに不正なプルリクエストを許可します。
- **リスク:** 悪意のあるコードがコードベースにマージされ、脆弱性やバックドアが導入される可能性があります。

**OIDC連携による安全なバックエンドアクセス**

- **誤設定:** OIDCパラメータを不正に設定するか、安全でない発行者URLを使用します。
- **リスク:** 誤った認証フローを通じてバックエンドサービスへの不正アクセスが行われる可能性があります。

**デプロイメント保持ポリシー**

- **誤設定:** 保持期間を短すぎる（デプロイメント履歴を失う）または長すぎる（不必要なデータ保持）に設定します。
- **リスク:** 必要なときにロールバックができなくなるか、古いデプロイメントからのデータ露出のリスクが高まります。

**最近削除されたデプロイメント**

- **誤設定:** 削除されたデプロイメントを監視しないか、自動削除のみに依存します。
- **リスク:** 重要なデプロイメント履歴の喪失が監査やロールバックを妨げる可能性があります。

---

### 高度な設定

**目的:** 設定を微調整し、セキュリティを強化するための追加のプロジェクト設定にアクセスします。

#### セキュリティ設定:

**ディレクトリリスト**

- **誤設定:** ディレクトリリストを有効にすると、ユーザーがインデックスファイルなしでディレクトリの内容を表示できるようになります。
- **リスク:** 機密ファイル、アプリケーション構造、攻撃の潜在的な入口が露出します。

---

## プロジェクトファイアウォール

### ファイアウォール

#### セキュリティ設定:

**攻撃チャレンジモードの有効化**

- **誤設定:** これを有効にすると、DoSに対するWebアプリケーションの防御が向上しますが、使いやすさが犠牲になります。
- **リスク:** ユーザーエクスペリエンスの問題が発生する可能性があります。

### カスタムルールとIPブロック

- **誤設定:** トラフィックをブロック/解除することを許可します。
- **リスク:** 悪意のあるトラフィックを許可したり、無害なトラフィックをブロックする可能性があります。

---

## プロジェクトデプロイメント

### ソース

- **誤設定:** アプリケーションの完全なソースコードを読むアクセスを許可します。
- **リスク:** 機密情報の露出の可能性があります。

### スキュー保護

- **誤設定:** この保護は、クライアントとサーバーアプリケーションが常に同じバージョンを使用することを保証し、クライアントがサーバーと異なるバージョンを使用することによる非同期を防ぎます。
- **リスク:** これを無効にすると（有効な場合）、将来の新しいデプロイメントでDoSの問題が発生する可能性があります。

---

## チーム設定

### 一般

#### セキュリティ設定:

- **転送**
- **誤設定:** すべてのプロジェクトを別のチームに転送することを許可します。
- **リスク:** 攻撃者がプロジェクトを盗む可能性があります。
- **プロジェクトの削除**
- **誤設定:** すべてのプロジェクトを持つチームを削除することを許可します。
- **リスク:** プロジェクトが削除される可能性があります。

---

### 請求

#### セキュリティ設定:

- **Speed Insightsコスト制限**
- **誤設定:** 攻撃者がこの数値を増加させる可能性があります。
- **リスク:** コストが増加します。

---

### メンバー

#### セキュリティ設定:

- **メンバーの追加**
- **誤設定:** 攻撃者が制御するアカウントを招待して持続性を維持する可能性があります。
- **リスク:** 攻撃者の持続性。
- **役割**
- **誤設定:** 不要な人に過剰な権限を付与することは、Vercelの設定のリスクを高めます。すべての可能な役割を確認してください [https://vercel.com/docs/accounts/team-members-and-roles/access-roles](https://vercel.com/docs/accounts/team-members-and-roles/access-roles)
- **リスク**: Vercelチームの露出が増加します。

---

### アクセスグループ

Vercelの**アクセスグループ**は、事前定義された役割割り当てを持つプロジェクトとチームメンバーのコレクションであり、複数のプロジェクトにわたる集中管理されたアクセス管理を可能にします。

**潜在的な誤設定:**

- **メンバーの過剰権限:** 必要以上の権限を持つ役割を割り当て、不正アクセスや行動を引き起こす可能性があります。
- **不適切な役割割り当て:** チームメンバーの責任に合わない役割を誤って割り当て、特権の昇格を引き起こす可能性があります。
- **プロジェクトの分離不足:** 機密プロジェクトを分離せず、意図したよりも広範なアクセスを許可します。
- **不十分なグループ管理:** アクセスグループを定期的にレビューまたは更新せず、古くなったり不適切なアクセス権限をもたらします。
- **一貫性のない役割定義:** 異なるアクセスグループ間で一貫性のないまたは不明確な役割定義を使用し、混乱やセキュリティの隙間を引き起こします。

---

### ログドレイン

#### セキュリティ設定:

- **サードパーティへのログドレイン:**
- **誤設定:** 攻撃者がログを盗むためにログドレインを設定する可能性があります。
- **リスク:** 部分的な持続性。

---

### セキュリティとプライバシー

#### セキュリティ設定:

- **チームメールドメイン:** 設定されると、この設定は、指定されたドメイン（例: `mydomain.com`）で終わるメールアドレスを持つVercel個人アカウントを自動的に招待し、サインアップ時およびダッシュボード上でチームに参加させます。
- **誤設定:** 
- 不正確なメールドメインや誤字のあるドメインをチームメールドメイン設定に指定します。
- 会社特有のドメインの代わりに一般的なメールドメイン（例: `gmail.com`, `hotmail.com`）を使用します。
- **リスク:**
- **不正アクセス:** 意図しないドメインのユーザーがチームに参加するための招待を受ける可能性があります。
- **データ露出:** 機密プロジェクト情報が不正な個人に露出する可能性があります。
- **保護されたGitスコープ:** 他のVercelチームが保護されたスコープからリポジトリをデプロイするのを防ぐために、チームに最大5つのGitスコープを追加できます。複数のチームが同じスコープを指定でき、両方のチームがアクセスできます。
- **誤設定:** 重要なGitスコープを保護リストに追加しない。
- **リスク:**
- **不正なデプロイメント:** 他のチームがあなたの組織のGitスコープから無許可でリポジトリをデプロイする可能性があります。
- **知的財産の露出:** 専有コードがデプロイされ、チーム外でアクセスされる可能性があります。
- **環境変数ポリシー:** チームの環境変数の作成と編集に関するポリシーを強制します。具体的には、すべての環境変数が**機密環境変数**として作成され、Vercelのデプロイメントシステムによってのみ復号化できるように強制できます。
- **誤設定:** 機密環境変数の強制を無効にしたままにします。
- **リスク:**
- **秘密の露出:** 環境変数が不正なチームメンバーによって表示または編集される可能性があります。
- **データ侵害:** APIキーや資格情報などの機密情報が漏洩する可能性があります。
- **監査ログ:** チームの活動を過去90日間までエクスポートします。監査ログは、チームメンバーによって実行されたアクションの監視と追跡に役立ちます。
- **誤設定:**\
不正なチームメンバーに監査ログへのアクセスを付与します。
- **リスク:**
- **プライバシー侵害:** 機密ユーザー活動やデータの露出。
- **ログの改ざん:** 悪意のある者が自分の足跡を隠すためにログを変更または削除する可能性があります。
- **SAMLシングルサインオン:** チームのSAML認証とディレクトリ同期をカスタマイズでき、中央集権的な認証とユーザー管理のためにアイデンティティプロバイダー（IdP）との統合を可能にします。
- **誤設定:** 攻撃者がSAMLパラメータ（例: エンティティID、SSO URL、証明書フィンガープリント）をバックドアする可能性があります。
- **リスク:** 持続性を維持。
- **IPアドレスの可視性:** IPアドレスが監視クエリやログドレインに表示されるかどうかを制御します。これは、特定のデータ保護法の下で個人情報と見なされる可能性があります。
- **誤設定:** 必要なくIPアドレスの可視性を有効にしたままにします。
- **リスク:**
- **プライバシー侵害:** GDPRなどのデータ保護規制に対する不遵守。
- **法的影響:** 個人データの取り扱いに関する罰金や制裁の可能性。
- **IPブロッキング:** VercelがリクエストをブロックすべきIPアドレスやCIDR範囲を設定できます。ブロックされたリクエストは請求に寄与しません。
- **誤設定:** 攻撃者によって悪用され、悪意のあるトラフィックを許可したり、正当なトラフィックをブロックする可能性があります。
- **リスク:**
- **正当なユーザーへのサービス拒否:** 有効なユーザーやパートナーのアクセスをブロックします。
- **運用の中断:** 特定の地域やクライアントのサービス可用性の喪失。

---

### セキュアコンピュート

**Vercel Secure Compute**は、Vercel Functionsとバックエンド環境（例: データベース）間の安全でプライベートな接続を可能にし、専用IPアドレスを持つ隔離されたネットワークを確立します。これにより、バックエンドサービスを公開する必要がなくなり、セキュリティ、コンプライアンス、プライバシーが向上します。

#### **潜在的な誤設定とリスク**

1. **不正確なAWSリージョンの選択**
- **誤設定:** Secure ComputeネットワークのAWSリージョンをバックエンドサービスのリージョンと一致しないように選択します。
- **リスク:** レイテンシの増加、データ居住地コンプライアンスの問題、パフォーマンスの低下。
2. **重複するCIDRブロック**
- **誤設定:** 既存のVPCや他のネットワークと重複するCIDRブロックを選択します。
- **リスク:** ネットワークの競合が発生し、接続の失敗、不正アクセス、またはネットワーク間のデータ漏洩が発生する可能性があります。
3. **不適切なVPCピアリング設定**
- **誤設定:** VPCピアリングを不正に設定します（例: 不正確なVPC ID、未完成のルートテーブルの更新）。
- **リスク:** バックエンドインフラストラクチャへの不正アクセス、セキュアな接続の失敗、データ侵害の可能性。
4. **過剰なプロジェクト割り当て**
- **誤設定:** 適切な分離なしに複数のプロジェクトを単一のSecure Computeネットワークに割り当てます。
- **リスク:** 共有IPの露出が攻撃面を増加させ、侵害されたプロジェクトが他のプロジェクトに影響を与える可能性があります。
5. **不十分なIPアドレス管理**
- **誤設定:** 専用IPアドレスを適切に管理またはローテーションしない。
- **リスク:** IPスプーフィング、追跡の脆弱性、悪意のある活動に関連付けられた場合のブラックリスト化の可能性。
6. **ビルドコンテナを不必要に含める**
- **誤設定:** ビルド中にバックエンドアクセスが必要ない場合に、ビルドコンテナをSecure Computeネットワークに追加します。
- **リスク:** 拡大した攻撃面、プロビジョニングの遅延、ネットワークリソースの不必要な消費。
7. **バイパス秘密を安全に扱わない**
- **誤設定:** デプロイメント保護をバイパスするために使用される秘密を露出または不適切に扱います。
- **リスク:** 保護されたデプロイメントへの不正アクセスが行われ、攻撃者が悪意のあるコードを操作またはデプロイする可能性があります。
8. **リージョンフェイルオーバー設定を無視する**
- **誤設定:** パッシブフェイルオーバーリージョンを設定しないか、フェイルオーバー設定を誤って設定します。
- **リスク:** プライマリリージョンの障害時にサービスのダウンタイムが発生し、可用性の低下やデータの不整合が生じる可能性があります。
9. **VPCピアリング接続制限を超える**
- **誤設定:** 許可された制限（例: 50接続を超える）を超えてVPCピアリング接続を確立しようとします。
- **リスク:** 必要なバックエンドサービスに安全に接続できず、デプロイメントの失敗や運用の中断が発生します。
10. **安全でないネットワーク設定**
- **誤設定:** 弱いファイアウォールルール、暗号化の欠如、またはSecure Computeネットワーク内の不適切なネットワークセグメンテーション。
- **リスク:** データの傍受、バックエンドサービスへの不正アクセス、攻撃に対する脆弱性の増加。

---

### 環境変数

**目的:** すべてのプロジェクトで使用される環境固有の変数と秘密を管理します。

#### セキュリティ設定:

- **機密変数の露出**
- **誤設定:** 機密変数に`NEXT_PUBLIC_`をプレフィックスし、クライアント側でアクセス可能にします。
- **リスク:** APIキー、データベースの資格情報、またはその他の機密データが公開され、データ侵害につながる可能性があります。
- **機密無効**
- **誤設定:** 無効（デフォルト）の場合、生成された秘密の値を読み取ることが可能です。
- **リスク:** 機密情報の偶発的な露出や不正アクセスの可能性が高まります。

{{#include ../banners/hacktricks-training.md}}
