Detect GitLab SSRF via Import Feature (CVE-2021-39935) in IBM QRadar
CVE-2021-39935 is a Server-Side Request Forgery (SSRF) vulnerability in GitLab Community and Enterprise Editions. An attacker can abuse GitLab's project import or integration features to cause the server to issue arbitrary HTTP requests to internal network resources, enabling reconnaissance, metadata service access, and potential lateral movement within cloud-hosted or on-premises GitLab deployments. This vulnerability is listed in the CISA Known Exploited Vulnerabilities catalog.
MITRE ATT&CK
QRadar Detection Query
SELECT sourceip, destinationip, URL, "HTTP Method", "HTTP Response Code", starttime, QIDNAME(qid) as EventName
FROM events
WHERE LOGSOURCETYPENAME(devicetype) IN ('Apache HTTP Server', 'Nginx', 'Microsoft IIS')
AND (URL IMATCHES '.*(/api/v4/projects|/import|/integrations).*')
AND (URL IMATCHES '.*(169\.254\.169\.254|metadata\.google\.internal|100\.100\.100\.200|127\.|localhost).*'
OR INCIDR('10.0.0.0/8', destinationip)
OR INCIDR('192.168.0.0/16', destinationip)
OR INCIDR('172.16.0.0/12', destinationip))
LAST 7 DAYS
ORDER BY starttime DESC QRadar AQL query detecting SSRF exploitation attempts against GitLab import and integration endpoints referencing internal IP space.
Data Sources
Required Tables
False Positives & Tuning
- GitLab runners communicating with internal Docker registries or artifact stores
- Penetration testing activity against GitLab infrastructure
- Internal GitLab integrations with private cloud services on RFC-1918 ranges
Other platforms for CVE-2021-39935
Testing Methodology
Validate this detection against 3 adversary techniques from Atomic Red Team. Each test below lists the behaviour to exercise and the telemetry you should expect to see. Executable commands and cleanup steps are available with Pro.
- Test 1SSRF via GitLab Project Import URL — Cloud Metadata
Expected signal: Outbound network connection from GitLab server process to 169.254.169.254:80; HTTP GET request logged in GitLab production.log with import_url parameter containing metadata IP
- Test 2SSRF via GitLab Webhook Integration — Internal Host
Expected signal: Network connection attempt from GitLab process to 192.168.1.1:6379; webhook creation logged in GitLab audit log with attacker-supplied internal URL
- Test 3SSRF via GitLab External Issue Tracker Integration — GCP Metadata
Expected signal: DNS lookup for metadata.google.internal followed by HTTP GET from GitLab server; integration update recorded in GitLab application log
Unlock Pro Content
Get the full detection package for CVE-2021-39935 including response playbook, investigation guide, and atomic red team tests.