IKEA.com本地檔案包含漏洞之PDF解析的巧妙利用
背景
ofollow,noindex" target="_blank">本地檔案包含(LFI) 漏洞是一種危害性較大的漏洞型別。一旦出現攻擊者將可能利用其,讀取檔案原始碼或敏感資訊,包含惡意檔案,執行任意程式碼,甚至控制伺服器等。大多數LFI攻擊都是由動態載入影象或其他檔案的程式碼引起的。如果請求的檔名或路徑未做正確驗證,就會造成該漏洞的發生。
IKEA.com
宜家是世界上最強大的品牌之一;在福布斯排行榜中為前50名。毫不誇張的說,每個人家裡都至少有一件產品來自宜家;我愛IKEA!你呢?可以在評論中告訴我你最喜歡的宜家產品。
除了宜家的產品外,另一個值得我稱讚的地方就是,他們擁有大量且設計合理的網站和應用程式。為了更好的使用者體驗,他們還為此開設了一個 bug賞金計劃 ,允許我們安全的滲透測試他們的平臺併發布,只要我們遵守 漏洞披露規則 。下面,就讓我們試一試吧!
尋找目標
大多數時候我都是從列舉子域開始的, Aquatone 是我最常用的一款列舉工具。該工具會在不同的公共域資料庫中查詢域,並返回活動子域列表,包括螢幕截圖等。瞭解有關Aquatone的更多資訊,請檢視Apple.com報告中的 Unrestricted File Upload(無限制檔案上傳漏洞) 。
Bathroom planner
經過一番查詢,其中一個 Bathroomplanner.IKEA.com 的子域引起了我的注意。這是宜家提供的一個線上規劃工具,主要是為客戶體提供靈感和現成的浴室解決方案。通過它客戶可以查詢產品,並將其新增到自己的浴室產品列表中。除此之外,還可以通過電子郵件傳送產品列表,或以PDF格式下載至本地儲存。生成的PDF檔案包含一些文字和產品圖片資訊。如下:
到這裡我有個疑問,這個PDF是如何生成的呢?
讓我們開啟 burp 通過攔截瀏覽器和宜家伺服器之間的流量來一探究竟。我們開啟首頁,並嘗試將產品新增到我們的列表中。
可以看到這裡有幾個非常有意思的欄位:
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解碼我們將得到以下字串:
這看起來有點意思。當我們將產品新增到列表中,它會為宜家Web伺服器提供一些用於生成PDF購物清單的模板。
如果我們能夠將本地伺服器檔案包含到此PDF中,會發生什麼? 例如圖片?試試看,我將 <img src=”/etc/passwd”> 新增到了該模板,並進行了Base64和URL編碼,替換Burp Suite中的pdf引數並Forward。
長話短說,這並不起作用。PDF生成器無法將該檔案識別為圖片,並且不會在輸出中解析它…
B計劃:識別PDF庫,搜尋庫中的缺陷
也許我們可以找到另一種在PDF中包含檔案的方法?首先,我們要弄清楚的是生成PDF的工具是什麼?我們可以通過Google搜尋模板中的一些獨特字串來得到答案。
搜尋結果為我們提供了兩個選擇,node-html-pdf庫或 mPDF庫 。在快速瀏覽了它們的文件後,最終我確定在該專案中使用的為mPDF庫。
識別mPDF中的安全問題
我們立刻製作了一個 mPDF 的本地副本,以便檢查它是否存在安全漏洞。最好的起點是 CHANGELOG ,開發人員通常使用該檔案來跟蹤版本之間的變化。
可以看到在2017年10月19日,mPDF改變了他們處理註釋標籤的方式。因此,讓我們仔細檢視文件中的該標籤。
這裡並沒有提及任何檔案包含的相關內容。讓我們再次Google搜尋,看看是否有其他人發現過這類問題。
在閱讀了 h0ng10的漏洞報告 後我們得知,在舊版本的mPDF存在嚴重的安全問題,攻擊者能夠通過註釋標記包含檔案。
仔細檢視該專案的 Github提交 後,我發現其中展示的一段易受攻擊的mPDF程式碼。
因此,我們可以更改PDF的模板嘗試包含該標籤並利用。讓我們看看IKEA是否忘記將庫更新到最新版本。
利用
我們將以下標記新增到模板中:
<annotation file=\”/etc/passwd\” content=\”/etc/passwd\” icon=\”Graph\” title=\”Attached File: /etc/passwd\” pos-x=\”195\” />
使用 Burp Suite Repeater 傳送新模板並下載PDF檔案。然後用 Foxit Reader 開啟檔案,並尋找黃顏色的註釋標記。
雙擊該標記,我們就能開啟並檢視伺服器上的檔案啦!
總結
IKEA.com允許使用者在購物清單匯出過程中操縱PDF模板。而其使用的PDF庫包含了一個隱藏功能,即允許通過在模板中新增特定標記將檔案嵌入到PDF中。該功能已在其最新版本中禁用,而IKEA卻未進行及時的更新,因此才導致了安全問題的發生。
修復建議
絕不要允許使用者操縱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 釋出漏洞詳情
*參考來源: medium ,FB小編 secist 編譯,轉載請註明來自FreeBuf.COM