Dockerベースのラボで、Webhoodにおける未認証のPocketBase管理者作成脆弱性であるCVE-2024-31218を再現し、PoC、検出、および修復の検証を提供します。
本プロジェクトは、CVE-2024-31218 に関する制御されたセキュリティ研究および脆弱性再現ラボです。この脆弱性は、Webhood 0.9.1 より前のバージョンに影響する重大な認証脆弱性です。
この脆弱性は、管理者アカウントが存在しない場合に、認証なしで PocketBase の管理者アカウントが作成されることに関連しています。影響を受ける API に到達できる攻撃者は、事前の認証なしに管理者アカウントを作成できる可能性があります。
本ラボの目的は以下のとおりです:
安全性: 本プロジェクトは分離されたローカルラボ環境専用です。脆弱なアプリケーションを公共のインターネットに公開したり、許可なくシステムに対して使用したりしてはなりません。
| 項目 | 詳細 |
|---|---|
| CVE | CVE-2024-31218 |
| プロジェクト | Webhood |
| 影響を受けるバージョン | Webhood <= 0.9.0 |
| 修正バージョン | Webhood 0.9.1 |
| 深刻度 | Critical |
| CVSS v3.1 | 9.8 |
| CWE | CWE-306 — 重要な機能における認証の欠如 |
| 攻撃ベクトル | ネットワーク |
| 攻撃の複雑さ | 低 |
| 必要な権限 | なし |
| ユーザー操作 | なし |
| 機密性 | 高 |
| 完全性 | 高 |
| 可用性 | 高 |
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
2. 脆弱性の説明
CVE-2024-31218 は、影響を受ける Webhood/PocketBase アプリケーションにおける管理者作成周辺の不十分な認証保護に起因します。
アプリケーションに管理者アカウントが構成されていない場合、管理者作成機能に認証なしで到達できます。
したがって、影響を受ける API に到達できる攻撃者は、最初の管理者アカウントの作成を試みることができます。
悪用に成功すると、アプリケーションへの管理者アクセスが可能になります。
この脆弱性は次のように分類されます:
CWE-306: 重要な機能における認証の欠如
3. 影響を受けるバージョンと修正バージョン
脆弱な範囲は次のとおりです:
Webhood <= 0.9.0
この脆弱性は次のバージョンで修正されました:
Webhood 0.9.1
したがって、修復の検証には修正済みバージョンを使用する必要があります。
4. 攻撃対象領域
関連する攻撃対象領域は PocketBase の管理 API です。
脆弱な機能は管理者アカウントの作成に関与しています。
概念的には、攻撃フローは次のとおりです:
攻撃者
|
| HTTP リクエスト
v
Webhood / PocketBase API
|
| 管理者作成エンドポイント
v
管理者アカウントの作成
|
v
不正な管理者アクセス
この攻撃は、脆弱な初期管理者条件が存在する場合、既存の認証済みセッションを必要としません。
5. 根本原因
根本原因は認証制御の失敗です。
管理者アカウントが存在しない場合、管理者作成機能はアクセスを十分に制限していませんでした。
セキュリティ境界は、特権的な管理機能が認証されていないリモートクライアントによって悪用されないことを保証する必要があります。
したがって、脆弱な挙動はセキュリティ上重要な操作周辺の認証チェックの欠如を表しています。
6. 制御されたラボアーキテクチャ
本ラボは、CVE-2024-31218 の基盤となる PocketBase 管理 API の挙動を再現します。
Docker 環境は、完全な Webhood 0.9.0 アプリケーションをパッケージ化すると主張するのではなく、PocketBase コンポーネントを直接使用します。
ラボのアーキテクチャは次のとおりです:
+-------------------------+
| ホストマシン |
| |
| PowerShell / Python |
+------------+------------+
|
| 127.0.0.1:8090
v
+-------------------------+
| Docker コンテナ |
| |
| +-------------------+ |
| | PocketBase | |
| | 管理 API | |
| +-------------------+ |
| |
+-------------------------+
サービスは localhost のみにバインドされており、公共のインターネットに公開されることは意図されていません。
再現中に使用されるすべての認証情報は、合成されたラボ用の認証情報です。
7. リポジトリ構造
CVE-2024-31218-WEBHOOD-LAB/
│
├── README.md
│
├── vulnerable/
│ ├── Dockerfile
│ └── docker-compose.yml
│
├── exploit/
│ └── reproduce.py
│
├── detection/
│ └── detect.py
│
├── patched/
│ └── README.md
│
├── evidence/
│ └── README.md
│
└── blog/
└── CVE-2024-31218-Technical-Blog.pdf
8. 脆弱な環境
脆弱な環境は、CVE-2024-31218 に関連する PocketBase 管理 API の挙動を分離された Docker コンテナ内で再現するように設計されています。
本ラボは、完全な Webhood 0.9.0 アプリケーションを再現すると主張するのではなく、影響を受けるコンポーネントとして PocketBase を直接使用します。
Docker 構成は次のことを行います:
- ラボ環境をビルドする。
- PocketBase をローカルで起動する。
- サービスを localhost にバインドする。
- サービスを外部システムから分離したままにする。
- テスト用の再現可能な環境を提供する。
- 再現スクリプトが管理 API と対話できるようにする。
現在のラボは合成された管理者アカウントを使用しており、実際のユーザーデータや認証情報は含まれていません。
9. 再現方法
再現手順はローカルラボ専用に設計されています。
ステップ 1 — 脆弱なコンテナを起動する
docker compose up --build
ステップ 2 — サービスを確認する
コンポーネントレベルのラボに使用される PocketBase サービスがローカルで応答していることを確認します。
ステップ 3 — 制御された再現スクリプトを実行する
再現スクリプトは、ローカルの脆弱なインスタンスに該当するリクエストを送信します。
例:
python exploit/reproduce.py
ステップ 4 — 応答を観察する
応答は、アプリケーションが認証なしの管理者作成リクエストを受け入れるかどうかを示すはずです。
ステップ 5 — 結果の状態を確認する
ラボは、管理者アカウントが作成されたかどうかを確認する必要があります。
外部ターゲットを決して使用してはなりません。
10. 検出
検出は、不正な管理者作成の試みに関連する指標を特定する必要があります。
潜在的な指標には次のものが含まれます:
管理者作成機能へのリクエスト
管理エンドポイントへの認証されていないリクエスト
予期しない最初の管理者アカウントの作成
予期しないクライアントからの HTTP リクエスト
繰り返される管理者作成の試み
アプリケーション初期化直後の管理者アカウント作成
検出スクリプトは次の場所にあります:
detection/detect.py
11. 修復
主な修復は、Webhood を修正バージョンにアップグレードすることです:
Webhood 0.9.1
脆弱なリリースは本番環境で使用すべきではありません。
文書化された回避策は、アップグレードを直ちに実行できない場合に、影響を受ける管理者 API 機能へのアクセスを制限することです。
修復後:
脆弱なコンテナを停止する。
脆弱なバージョンを修正バージョンに置き換える。
コンテナを再ビルドする。
修正済み環境を起動する。
再現の試みを繰り返す。
脆弱な挙動がもはや不可能であることを確認する。
予期しない管理リクエストについてアプリケーションログを確認する。
12. 修復と検証
CVE-2024-31218 に対する公式の Webhood 修正は、実際の Webhood `v0.9.1` ソースリリースを使用して検証されました。
修正コミットは次のとおりです:
`735e7fa2814edeec9a2c07778ed51b3c018609f9`
この修正は次のマイグレーションを追加します:
`src/backend/migrations/1712252550_generate_random_admin.js`
このマイグレーションは、管理者が既に存在するかどうかを確認します。管理者が存在しない場合、ランダムに生成されたパスワードで管理者アカウントを作成します。これにより、認証されていないリクエスト元が公開された `/api/admins` エンドポイントを通じて最初の管理者を取得することを防ぎます。
#### 検証手順
1. 公式の Webhood `v0.9.1` ソースタグをチェックアウトしました。
2. バックエンドを公式ソースからその Dockerfile を使用してローカルでビルドしました。
3. 得られたイメージを localhost のポート `8091` で実行しました。
4. 脆弱なラボに対して使用されたのと同じ認証なしの管理者作成リクエストを、修正済みバックエンドに対して再生しました。
5. 脆弱な環境は以前、そのリクエストを HTTP `200` で受け入れていました。
6. 修正済みの `v0.9.1` バックエンドは、同じリクエストを HTTP `401` で拒否しました。
観察された修正済み環境の応答:
```text
HTTP status: 401
{"code":401,"message":"The request requires valid admin authorization token to be set.","data":{}}
これは、以前に実証された認証なしの管理者作成攻撃パスが、ローカルでビルドされた Webhood v0.9.1 バックエンドでブロックされたことを確認します。
REMEDIATION VERIFIED: YES
証拠:
evidence/05-remediation-verified.png
13. セキュリティへの影響
悪用に成功すると、不正な第三者に管理者権限が付与される可能性があります。
潜在的な結果には次のものが含まれます:
不正な管理者アクセス
アプリケーションデータの変更
アプリケーション情報の漏洩
レコードの変更または削除
アプリケーションのさらなる管理上の悪用
したがって、深刻度は公開された CVSS 評価に従って Critical に分類されます。
14. 証拠
evidence/ ディレクトリは、以下を実証するスクリーンショットを含むことを意図しています:
脆弱なアプリケーションの起動
Docker コンテナのステータス
脆弱なバージョン
再現リクエスト
脆弱な挙動の成功
検出出力
修正済みバージョン
修復後の再現の失敗/ブロック
スクリーンショットには、実際の認証情報、個人情報、API キー、その他の機密データを含めてはなりません。
15. 制限事項
本ラボの準備中、ローカルの Windows 環境で Docker Linux バックエンドの起動に関する問題が発生しました。
Windows は次を返しました:
Error: 14098
The component store has been corrupted.
必要な Windows 機能も当初は無効になっていました:
VirtualMachinePlatform
Microsoft-Windows-Subsystem-Linux
したがって、再現結果やスクリーンショットは、以下を正確に区別する必要があります:
脆弱性研究
ラボ構成
意図された再現手順
正常に実行された再現
分離されたラボで実際に実行されていない限り、悪用の実行が成功したと主張してはなりません。
16. 安全上の考慮事項
本プロジェクトは許可されたセキュリティ研究専用です。
ラボは次のことを行う必要があります:
ローカルで実行する。
公共への露出を避ける。
実際の認証情報を避ける。
実際のユーザーデータを避ける。
第三者システムに対するテストを避ける。
使い捨てのテストアカウントを使用する。
分離された Docker ネットワークを使用する。
テスト後に脆弱な環境を破棄する。
クリーンアップの例:
docker compose down
17. 参考文献
National Vulnerability Database — CVE-2024-31218
Webhood セキュリティアドバイザリ
Webhood/PocketBase ソースリポジトリ
CVE-2024-31218 に関連する修正コミット
CWE-306 — 重要な機能における認証の欠如
FIRST CVSS v3.1 仕様
18. 免責事項
本リポジトリはサイバーセキュリティ教育および脆弱性研究プロジェクトです。
脆弱な構成は制御されたテストのために意図的に再現されています。公開アクセス可能なサービスとしてデプロイしてはなりません。
著者は、本リポジトリに含まれる技術または成果物の不正使用について一切の責任を負いません。