本文首發(fā)地址 :
先知技術社區(qū)獨家發(fā)表本文汰寓,如需要轉(zhuǎn)載励饵,請先聯(lián)系先知技術社區(qū)授權滑燃;未經(jīng)授權請勿轉(zhuǎn)載表窘。
先知技術社區(qū)投稿郵箱:Aliyun_xianzhi@service.alibaba.com
前言 :
漏洞已經(jīng)報告給廠商 , 不過廠商并不認為這個是一個嚴重的漏洞
因為 GitBook 網(wǎng)站在編譯 Markdown 的書籍的時候是在 LXC 環(huán)境下進行的
其實只是一個虛擬的環(huán)境 , 并不能讀取到敏感的數(shù)據(jù)
挖掘過程 :
漏洞報告 PDF : https://drive.google.com/file/d/0B3gR_-XJ9Er3ZnhjSnFReW5PMDA/view?usp=sharing
其實過程和之前的 CVE-2017-15690 幾乎一模一樣
http://www.reibang.com/nb/15767357
http://www.reibang.com/p/fae6e1484c23
漏洞的成因都是因為沒有處理好 Linux 下的符號鏈接文件 , 導致任意文件讀取的
漏洞需求 :
首先需要攻擊者需要擁有一個 GitHub 賬號 , 一個 GitBook 賬號 , 并且將兩個賬號關聯(lián) , 使 GitBook 賬號可以使用 GitHub 中的倉庫來創(chuàng)建書籍
利用步驟 :
- 在 GitHub 上創(chuàng)建一個倉庫
- 將空的倉庫克隆到本地
- 使用命令在倉庫中初始化一個書籍
gitbook init
- 在倉庫的某一個目錄下 (或者根目錄) 創(chuàng)建一個符號鏈接文件 , 例如
ln -s /etc/passwd ./passwd.md
注意后綴名必須為 .md
- 編輯倉庫根目錄的 SUMMARY.md 將剛才創(chuàng)建的符號鏈接文件添加至該文件的目錄結(jié)構中
- 執(zhí)行命令 , 編譯該書籍
gitbook serve
# 編譯并在本地搭建 web 服務器 可以用來直接訪問查看效果
- 訪問發(fā)現(xiàn)確實讀取到了本機的 /etc/passwd 文件
- 將本地倉庫提交并 push 到 GitHub, 然后在 GitBook 中就可以看到讀取到的目標服務器的文件了
POC :
https://wangyihang.gitbooks.io/awesome-web-security/content/vulnerabilities/passwd.html
白盒分析 :
https://github.com/GitbookIO/gitbook
下載代碼, 定位到解析 SUMMARY.md 的函數(shù)
在黑盒測試的時候就已經(jīng)發(fā)現(xiàn), 符號鏈接文件必須是 .md 才可以
這里是讀取文件的函數(shù) , 可以看到在讀取之前并沒有對文件是否是符號鏈接文件進行判斷
這樣也就造成了這個漏洞
修補方案 :
在編譯時 , 判斷文件是否是符號鏈接 , 如果是則跳過對該文件的編譯