IKEA官網本地文件包含漏洞分析
背景
通過本地文件包含(Local File Inclusion)攻擊,攻擊者可以對伺服器進行欺騙,使其共享不公開的文件,而不公開的文件中可能會包含網站的配置、日誌和源代碼文件。甚至有時該漏洞會導致遠程代碼執行。因此,LFI攻擊被認為具有較高的威脅性。
大多數LFI攻擊都是由動態載入圖像(或其他文件)的代碼引起的。如果請求的文件名或路徑未經正確驗證,那麼伺服器將會向攻擊者提供所請求的私有文件。接下來,我們將對IKEA.com上發現的這一漏洞展開深入分析。
IKEA是位於福布斯TOP 50的一個知名品牌,他們不僅擁有優秀的家居產品,同時還運營著設計人性化的網站和應用程序。與此同時,IKEA開展了漏洞賞金活動,允許安全研究者對其網站和應用程序進行測試,並在遵守「負責任的漏洞披露原則」的前提下進行公開。
尋找目標
在針對一個域名進行測試時,我通常都首先遍歷目標的所有子域名。為了讓這一工作更為簡單,我使用Aquatone工具,這一工具會在不同的公共域名資料庫中進行搜索,並返回一個質量較高的活動子域名列表,同時還包含這些域名的截圖。如果想要了解關於Aquatone的更多信息,建議查看Apple.com報告中的「Unrestricted File Upload」部分。
鎖定目標:浴室規劃師
我們找到的一個子域名是Bathroomplanner.IKEA.com,這是一個工具,可以讓客戶自行查找產品,並將其添加到自己的浴室產品列表中。
客戶可以通過電子郵件的方式,將產品列表發到自己的郵箱,或者以PDF格式從本地下載。生成的PDF文件中包含一些文本和產品圖片,可能看起來沒有什麼特別之處。
但是,我們有一個疑問,PDF是如何生成的?
攔截網路流量
要攔截網路流量,最好的工具就是Burp Suite了。於是,我們啟動Burp Suite,開始攔截瀏覽器和IKEA網路伺服器之間的流量。
我們打開首頁,並試圖將產品添加到我們的列表之中。
接下來,能夠看到一些有趣的欄位:
Data:包含產品和圖像代碼的JSON Blob,沒有文件路徑;
Shopping:包含產品列表的JSON Blob,沒有文件路徑;
Pdf:一長串字元,內容不明;
Images:一些Base64編碼後的圖像。
識別Base64編碼字元串
如果我們發現一長串由字母和數字組成的字元,那麼首先應該檢查它是否為Base64編碼的字元串。Base64編碼通常用於文件的數據傳輸。在這裡,有一個用於解碼Base64字元則在線工具,位於:http://decodebase64.com/。
我們將該字元串粘貼到解碼器中,將會報錯,原因在於字元串中包含%之類的無效字元。看到%符號,我們應該立刻聯想到URL編碼,因此我們在進行Base64解碼之前,首先嘗試進行URL解碼。有一個URL解碼的工具,位於:https://meyerweb.com/eric/tools/dencoder/。
我們進行URL解碼和Base64解碼後,得到以下字元串:
這看上去很有趣。如果我們將產品添加到列表中,還會從IKEA的Web伺服器中,提供一些用於生成PDF購物清單的模板。
如果我們能夠將本地伺服器文件放到PDF中,那麼會怎樣呢?例如,我們可以使其作為圖像中的一部分顯示。於是,我們嘗試著將添加到模板中,再對其進行Base64編碼和URL編碼,替換掉Burp Suite攔截數據包中的pdf參數,並發送出去。
然而,這樣的操作並不起作用,PDF生成器無法將這個文件識別成圖像,並且也不會在輸出中解析其中的內容。
再次嘗試:識別PDF庫,查找庫中的漏洞
也許我們可以採取另一種方法,使PDF中包含文件。首先,我們需要找到用於生成PDF的工具。藉助Google,我們搜索了模板中一些有特點的字元串,得到了如下搜索結果。
現在,我們有兩個選擇:node-html-pdf庫或mPDF庫。在快速閱讀了這兩個庫的文檔後,我們發現它實際上是在這個項目中使用的mPDF庫。
定位mPDF中的安全問題
我們立刻製作了一個mPDF的本地副本,以便檢查它是否存在安全漏洞。一個比較好的起點是CHANGELOG,開發人員通常都使用該文件來跟蹤版本之間的變化。
我們發現,在2017年10月19日的一次修改中,mPDF改變了他們處理注釋標籤的方式。因此,我們開始仔細查看文檔中的這一標籤。
在這裡面,沒有提到文件包含。讓我們再次Google搜索,看看是否有其他人發現過相關的問題。
我們閱讀了h0ng10提交的漏洞報告, 發現舊版本的mPDF存在嚴重的安全問題,其中有一個位置,能夠以注釋標記的方式包含文件。
接著,我們仔細查看了這個項目的Github提交,發現了其中有一段易受攻擊的mPDF代碼。
因此,我們可以對PDF的模板進行更改,找到上述漏洞詳情所提到的標籤位置,並嘗試對其進行漏洞利用。
攻擊過程
我們將以下標記添加到模板中:
雙擊這一標記,就能夠打開從伺服器上獲取到的文件,由此證明,我們的攻擊獲得了成功。
IKEA.com網站上提供了一個為用戶導出PDF版本購物清單的功能,而該功能中所使用的PDF庫受漏洞影響,允許攻擊者通過在模板中添加特定標記,將文件嵌入到PDF中。這一功能在最新版本的該PDF庫中已被禁用,但IKEA未將使用的PDF庫更新到最新版本,因此我們成功利用了這一漏洞。在嘗試中,我們證明了能夠越權獲得IKEA Web伺服器上的文件,並成功得到了其生產伺服器上/etc/passwd文件。
修復方案
不允許用戶操縱PDF模板;
在客戶端渲染包含購物清單的PDF,可以使用jsPDF;
更新到最新版本的mPDF庫,禁用注釋代碼。
時間節點
2018年6月16日 發現此漏洞,通過Zerecopter提交漏洞詳情
2018年6月17日 發現PDF生成功能已經被禁用(推測是IKEA通過IDS發現我們獲取到了敏感文件)
2018年6月18日 Zerocopter無法確認漏洞是否存在(因為PDF生成功能已被禁用),但根據報告中的內容,將這一漏洞情況通知IKEA
2018年6月25日 請求Zerocopter向我們同步當前進展
2018年6月27日 Zerocopter反饋:IKEA在6月19日就開始修復這一問題
2018年8月9日 經過多次溝通,確認IKEA已修復這一漏洞
2018年8月13日 Zerocopter建議我在公開漏洞詳情時,隱去IKEA的名稱
2018年8月20日 經過與IKEA團隊的反覆溝通,要求按照「負責任的漏洞披露原則」進行漏洞詳情公開
2018年9月11日 獲得Zerocopter的250歐元漏洞獎勵
2018年9月17日 在多次協商溝通後,IKEA終於對「負責任的漏洞披露原則」進行了正確理解,並正式授權我可以披露漏洞詳情
2018年9月18日 發布漏洞詳情


TAG:嘶吼RoarTalk |