在IKEA.com中的本地文件包含

翻譯自:https://medium.com/@jonathanbouman/local-file-inclusion-at-ikea-com-e695ed64d82f
翻譯:聶心明

你想參加私有衆測?我很樂意邀請你,請聯繫我[email protected]

背景

通過本地文件包含攻擊(LFI),你可以拿到服務器中的敏感文件。比如,配置文件,日誌文件和網站的源代碼。有時,你甚至會導致遠程命令執行。本地文件包含一直被認爲是危害性極高的漏洞。

大多數導致本地文件包含漏洞的原因是動態的加載圖片或者其他文件。如果請求的文件或者路徑沒有被嚴格的驗證,那麼攻擊者就會獲取服務器中的敏感數據。讓我們學習一下關於它的知識。

IKEA.com

宜家世界上最知名品牌之一,它也是福布斯財富榜前50的企業之一。幾乎每個人都會在家裏有一件宜家的產品。我喜歡宜家的IKEA LATTJO brain 帽子。你們最喜歡宜家的什麼產品呢?請在下面的評論區裏面評論。

對於我們來說,它還有一個好處就是它有大量的各種類型的網站和app。這些網站和app都非常棒,它們始終堅持服務着大量的客戶。宜家有非常棒的漏洞賞金平臺,宜家允許我們可以測試他們的網站,並且我們可以在商家修復之後,公開這些漏洞。只要我們遵守漏洞披露規則,就沒有問題。來,讓我們滲透宜家吧。

尋找目標

在滲透開始之前,我會先用Aquatone這個工具來探測目標的子域名。這個工具可以找到大量公共的子域名,並且返回所有存活的網站,下面的截圖就是這個工具演示。關於Aquatone的使用,你可以參考我的另外一篇文章《Unrestricted File Upload at Apple.com

宜家的Bathroom 子站

我們發現宜家的一個子站 Bathroomplanner.IKEA.com,這是一個工具,可以查找你想要的浴室傢俱產品,並且把他們加入到購物列表裏面。
你可以讓商家把產品列表以郵件的形式發給你,或者你可以把產品列表保存爲pdf,這個pdf中包含文字和產品圖片,其他的東西就沒有了



那麼這個pdf是怎樣產生的呢?

抓個包

如果我說抓包的話,那麼你肯定第一個想到的就是Burp Suite。現在我們打開Burp Suite,開始攔截髮往宜家服務器的報文吧。
我們首先打開一個產品頁面,然後添加一個產品到我們的列表裏面去。

在上面的gif動畫中,我們看到攔截的報文中有多個參數:

  • data:包含產品圖片和產品的描述的json,裏面沒有路徑信息。
  • shopping:包含我們產品列表的json,裏面沒有路徑信息。
  • pdf:非常長的字符串,包含內容不清楚
  • images:base64編碼之後的圖片

那一串長的字符串其實base64編碼之後的數據

如果你遇到很長的數字和字母組成的字符串,那麼你就要看看這個是不是base64編碼的字符串。Base64 經常用於文件傳輸。推薦給你們一個解base64的在線工具 http://decodebase64.com/

如果解碼的頁面報錯,那麼就是字符串中肯定包含錯誤的字符,比如:%,emmm,那麼這一串字符串就有點像url編碼的數據了,所以,我們首先應該url解碼這些字符串,然後再把他們Base64解碼。你可以使用 https://meyerweb.com/eric/tools/dencoder/ 去解url編碼。

我們首先將字符串進行url解碼,然後再進行base64解碼,就會得到下面的字符串。

這看上去非常有趣,如果我們添加一些產品到我們的列表中時,宜家服務器就會用模板生成一個帶產品清單的pdf文件。我們怎樣才能在PDF中包含服務器的本地文件呢?比如圖片文件。好主意,讓我們添加<img src=”/etc/passwd”>到模板文件中吧,然後把這個字符串先base64編碼,然後再url編碼,之後再放入數據報文的pdf參數中,最後再重放一下。

長話短說,這似乎不行。這個pdf解析器似乎不能識別這個文件。它也不能把這個字符串進行解析也不能輸出內容。

B計劃,識別解析pdf的庫,用一些關鍵字來搜索這個庫。
可能我們找到另一種方式在pdf中包含文件。我們需要一個強有力的工具去尋找這樣的pdf解析庫。谷歌是最好的選擇。就用模板中出現的字符串進行搜索,看看谷歌會給我一個什麼樣的答案

我們得到兩個選擇,一個是node-html-pdf庫另一個是 mPDF庫。通過快速的閱讀文檔,我發現,這個項目中使用的pdf解析庫是mPDF

在mPDF中尋找安全相關的issues

我們馬上就把 mPDF 下載到本地,目的尋找安全問題。其實最好的方式就是去看CHANGELOG,這個文件被程序員用來追蹤產品之間的改變。

當我們讀到h0ng10提交的issue的時候,發現在mPDF老的版本上有幾個嚴重的安全漏洞,其中一個就是利用annotation標籤進行本地文件包含。

如果我們仔細查看這個項目的提交記錄就能發現這個commit。這個commit展示了漏洞所在的位置。

因爲我們能夠改變pdf的模板,所以我們就能在模板中添加一個能夠包含文件的標籤。完美,讓我們看看宜家是否忘記把這個pdf解析庫升級到了最新的版本。

發動攻擊

我們在模板中添加下面的標籤:

<annotation file=\”/etc/passwd\” content=\”/etc/passwd\” icon=\”Graph\” title=\”Attached File: /etc/passwd\” pos-x=\”195\” />

我們用Burp Suite中的Repeater 去發送一個新的模板,然後下載這個pdf文件。我們用 Foxit Reader去打開這個pdf文件。然後開始尋找那個黃色的小標籤。

雙擊那個黃色的小標籤就可以打開我們盜取的服務器文件了。是時候去提交這個漏洞並等待宜家的迴應了。

結論

宜家允許用戶操作pdf模板,然後用這個模板生成產品清單供人們下載。這個pdf庫包含(抑或隱藏)了一個功能,這個功能就是在模板中添加一個指定標籤去嵌入一個文件。在最新的pdf解析庫裏面,這個功能已經被禁用掉了,宜家沒有及時的升級,所以導致了這個漏洞。這個漏洞可以讓攻擊者在創建一個pdf的時候,包含服務器中/etc/passwd這個文件。

解決方案

  • 不要讓用戶操作pdf的模板
  • 在客戶端生成包含產品列表的pdf,例如可以用 jsPDF
  • 把mPDF升級到最新版

賞金

€250

討論,什麼是負責的披露

當你看到下面的關於漏洞披露的時間線時,整個流程確實花了很多的時間。我報告的大多數的漏洞沒有任何爭議。 Bol.com 是一個非常好的例子。但是有時會花更多的時間。

這次我遇到了一個非常有趣的解決方案。宜家強制我用他們的賞金平臺Zerocopter來報告漏洞。但是Zerocopter不允許我們在提交時擁有一個賬戶,所以我們不得不給Zerocopter發郵件來讓他們一起協同披露漏洞。我們在社區中沒有直接聯繫到宜家。最開始宜家花了幾周的時間才修復了這個漏洞,花了整整三個月和30封郵件才和他們合作披露了整個漏洞。

荷蘭政府發佈了一個政策(在2018年4月28日更新的:一個新版的手冊),這個政策的其中幾頁解釋了該如何負責任的披露一個漏洞。其中安全研究員和原廠商的積極交流是其中的關鍵所在。
而且清晰的漏洞披露流程也是非常重要的。很少有廠商和研究員選擇不去披露漏洞 (PDF, 7頁, UPDATE 04–10–2018: PDF, 13頁)

如果這個漏洞很難被解決,或者解決起來要花費很多的錢,那麼披露者和廠商才選擇不去公開這個漏洞。

這些天,大量的賞金平臺被私有化,大量的披露者不去遵守這個規則。着是否符合公共利益呢?如果廠商沒有及時的修復這個漏洞,消費者就會受到漏洞的影響(比如泄露數據)且消費者會毫不知情。難道是因爲安全研究員透露了公司的名稱而遭到律師的威脅嗎?

任何國際標準建議中都沒有關於非公開披露者的規則。並且,在2018年6月在歐洲舉行的軟件漏洞披露者大會上歐洲特別工作組就不建議不公開漏洞。相反的是,他們建議forbid政府簽署非公開者協議。見第84頁

如果賞金平臺沒有改變。那麼安全研究員就會避開這些公司或者平臺,他們會再一次公開這些漏洞。我們應該避免這些問題。

Bug Bounty是非常負責的平臺,他們建議廠商要建立合理的披露流程。無論怎樣他們也會保護公共利益和他們的安全研究員。向公衆披露漏洞也是披露流程的一部分。

Hackerone是一個非常好的例子,他們的公開的漏洞是非常好的學習資源,與此同時hackerone會告知公衆會有潛在的信息泄露的風險。

而其他的漏洞平臺比如Bugcrowd 和 Zerocopter不會像hackerone那樣公開披露漏洞。如果這些不公開漏洞的平臺做出一些改變,向公衆去公開這些漏洞而不是隱藏它們,那麼整個互聯網環境就會變的更好。

在更好的互聯網世界中,私有賞金平臺是不存在的。在某個時間點,所有的漏洞都必須被公開。如果報告的漏洞沒有被修復,那麼就必須有很清晰的流程去讓報告者知道下一步該怎麼去做
並且如果安全研究者遵守這些規則,那麼他們應該被保護。報告這些漏洞不應該有任何擔憂。你怎麼看這個問題,請在下面的評論區裏面留言給我。

很高興宜家能修復這個漏洞並且他們支持公開披露守則。非常感謝!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章