利用ImageMagick命令執行漏洞拿下Facebook四萬美元獎金

前言
我相信很多人都知道ImageMagick和它存在的漏洞,這個漏洞發現于2016年四月底,同時,由于許多插件都依賴于這個ImageMagick庫,因此,這個漏洞的影響范圍很大。有證據表明,關于這個漏洞的信息,發現它的研究人員是知道的,ImageMagick開發團隊的人也知道,但是,糟糕的是,一些其它的人(壞人)也知道了這個漏洞,在2016年5月3日,在互聯網上發現了這個漏洞的POC。許多研究人員發現了這個問題,而且應用程序還沒有及時更新。但由于一些未知的原因,我不在其中,但這是在5月份。
漏洞分析
直到十月的一個星期六,我對一些大的服務(不是Facebook)進行了測試,當時一些重定向讓我關注到了Facebook。這是一個《分享到Facebook》對話框:
鏈接是:
https://www.facebook.com/dialog/feedapp_id=APP_ID&link=link.example.tld&picture=http%3A%2F%2Fattacker.tld%2Fexploit.png&name=news_name&caption=news_caption&description=news_descriotion&redirect_uri=http%3A%2F%2Fwww.facebook.com&ext=1476569763&hash=Aebid3vZFdh4UF1H
大家可以看到,如果我們仔細看,我們可以看到在URL中有一個“picture”參數。但是在上面提到的頁面內容中,這并不是圖片URL,例如:
https://www.google.com/images/errors/robot.png
變成了:
https://external.fhen11.fna.fbcdn.net/safe_image.phpd=AQDaeWq2Fn1Ujs4P&w=158&h=158&url=https%3A%2F%2Fwww.google.com%2Fimages%2Ferrors%2Frobot.png&cfs=1&upscale=1&_nc_hash=AQD2uvqIgAdXgWyb
我首先考慮到了一些關于SSRF的問題。但是測試顯示,這個URL中的參數請求來自于31.13.97.*網絡,通過“facebookexternalhit/1.1”參數,如下:
它看起來像獨立服務器的正常請求。我開始深入挖掘。在對這個參數進行一些測試后,我很失望,沒有一個成功,ImageTragick是最后一點希望。如果你不熟悉這個問題或有點懶惰,這里有一POC鏈接。下面是一個簡單的exploit.png載荷:
但是當我監聽端口時,什么也沒發現:
不過,如果有一些防火墻限制呢?-我問我自己。
好吧,通常一些公司會過濾正常的請求,但是不會過濾DNS,讓我們再試一個載荷:
結果是:
這個IP是誰的呢?看下圖:
成功了!
讓我們總結一下,應用程序的工作流程是:
獲得“picture”參數,并向它發出請求,這個請求是正常的,沒有漏洞。
收到一個圖片,這個圖片經過了converter的轉換,而它使用了有漏洞的ImageMagick庫。
說實話,我試圖找到一個通用的方法來利用這個HTTP請求,但是經過簡短的測試后,我發現所有向外的端口都被關閉了,我花了很長的時間去找一個能打開的,沒有成功,我需要找到另一種能讓POC有效的方法。
載荷:
回應是:
下面是“id”返回的信息:
為了充分證明存在這個漏洞,我給Facebook安全團隊提供了“cat/proc/version”的結果,在這里我就不公布它的結果了。
根據Facebook負責任的漏洞披露政策,我沒有進行更深的研究。
我和Facebook安全團隊的Neal研究員討論了最初的報告,“cat/proc/version | base64”可能更好,同時,一些更深層次的研究表明,“base32”在包括DNS隧道的各種技術中是比較常用的(請看:https://www.sans.org/reading-room/whitepapers/dns/detecting-dns-tunneling-34152)。
我很高興成為攻破Facebook的人之一。
時間線
- 16 Oct 2016, 03:31 am: 初始報告;
- 18 Oct 2016, 05:35 pm: Neal向我要使用的POC;
- 18 Oct 2016, 08:40 pm: 我發送了一個POC并提供了額外的信息;
- 18 Oct 2016, 10:31 pm: Neal確認了漏洞;
- 19 Oct 2016, 12:26 am: Neal說正在修復漏洞;
- 19 Oct 2016, 02:28 am: Neal通知我說漏洞已經修復;
- 19 Oct 2016, 07:49 am: 我回答說,確認漏洞修補,并要求披露時間表;
- 22 Oct 2016, 03:34 am: 尼爾回答披露時間表;
- 28 Oct 2016, 03:04 pm: 4萬美元的獎勵發放;
- 16 Dec 2016: 披露批準;