利用ImageMagick命令執(zhí)行漏洞拿下Facebook四萬美元獎(jiǎng)金

前言
我相信很多人都知道ImageMagick和它存在的漏洞,這個(gè)漏洞發(fā)現(xiàn)于2016年四月底,同時(shí),由于許多插件都依賴于這個(gè)ImageMagick庫,因此,這個(gè)漏洞的影響范圍很大。有證據(jù)表明,關(guān)于這個(gè)漏洞的信息,發(fā)現(xiàn)它的研究人員是知道的,ImageMagick開發(fā)團(tuán)隊(duì)的人也知道,但是,糟糕的是,一些其它的人(壞人)也知道了這個(gè)漏洞,在2016年5月3日,在互聯(lián)網(wǎng)上發(fā)現(xiàn)了這個(gè)漏洞的POC。許多研究人員發(fā)現(xiàn)了這個(gè)問題,而且應(yīng)用程序還沒有及時(shí)更新。但由于一些未知的原因,我不在其中,但這是在5月份。
漏洞分析
直到十月的一個(gè)星期六,我對一些大的服務(wù)(不是Facebook)進(jìn)行了測試,當(dāng)時(shí)一些重定向讓我關(guān)注到了Facebook。這是一個(gè)《分享到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
大家可以看到,如果我們仔細(xì)看,我們可以看到在URL中有一個(gè)“picture”參數(shù)。但是在上面提到的頁面內(nèi)容中,這并不是圖片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
我首先考慮到了一些關(guān)于SSRF的問題。但是測試顯示,這個(gè)URL中的參數(shù)請求來自于31.13.97.*網(wǎng)絡(luò),通過“facebookexternalhit/1.1”參數(shù),如下:
它看起來像獨(dú)立服務(wù)器的正常請求。我開始深入挖掘。在對這個(gè)參數(shù)進(jìn)行一些測試后,我很失望,沒有一個(gè)成功,ImageTragick是最后一點(diǎn)希望。如果你不熟悉這個(gè)問題或有點(diǎn)懶惰,這里有一POC鏈接。下面是一個(gè)簡單的exploit.png載荷:
但是當(dāng)我監(jiān)聽端口時(shí),什么也沒發(fā)現(xiàn):
不過,如果有一些防火墻限制呢?-我問我自己。
好吧,通常一些公司會(huì)過濾正常的請求,但是不會(huì)過濾DNS,讓我們再試一個(gè)載荷:
結(jié)果是:
這個(gè)IP是誰的呢?看下圖:
成功了!
讓我們總結(jié)一下,應(yīng)用程序的工作流程是:
獲得“picture”參數(shù),并向它發(fā)出請求,這個(gè)請求是正常的,沒有漏洞。
收到一個(gè)圖片,這個(gè)圖片經(jīng)過了converter的轉(zhuǎn)換,而它使用了有漏洞的ImageMagick庫。
說實(shí)話,我試圖找到一個(gè)通用的方法來利用這個(gè)HTTP請求,但是經(jīng)過簡短的測試后,我發(fā)現(xiàn)所有向外的端口都被關(guān)閉了,我花了很長的時(shí)間去找一個(gè)能打開的,沒有成功,我需要找到另一種能讓POC有效的方法。
載荷:
回應(yīng)是:
下面是“id”返回的信息:
為了充分證明存在這個(gè)漏洞,我給Facebook安全團(tuán)隊(duì)提供了“cat/proc/version”的結(jié)果,在這里我就不公布它的結(jié)果了。
根據(jù)Facebook負(fù)責(zé)任的漏洞披露政策,我沒有進(jìn)行更深的研究。
我和Facebook安全團(tuán)隊(duì)的Neal研究員討論了最初的報(bào)告,“cat/proc/version | base64”可能更好,同時(shí),一些更深層次的研究表明,“base32”在包括DNS隧道的各種技術(shù)中是比較常用的(請看:https://www.sans.org/reading-room/whitepapers/dns/detecting-dns-tunneling-34152)。
我很高興成為攻破Facebook的人之一。
時(shí)間線
- 16 Oct 2016, 03:31 am: 初始報(bào)告;
- 18 Oct 2016, 05:35 pm: Neal向我要使用的POC;
- 18 Oct 2016, 08:40 pm: 我發(fā)送了一個(gè)POC并提供了額外的信息;
- 18 Oct 2016, 10:31 pm: Neal確認(rèn)了漏洞;
- 19 Oct 2016, 12:26 am: Neal說正在修復(fù)漏洞;
- 19 Oct 2016, 02:28 am: Neal通知我說漏洞已經(jīng)修復(fù);
- 19 Oct 2016, 07:49 am: 我回答說,確認(rèn)漏洞修補(bǔ),并要求披露時(shí)間表;
- 22 Oct 2016, 03:34 am: 尼爾回答披露時(shí)間表;
- 28 Oct 2016, 03:04 pm: 4萬美元的獎(jiǎng)勵(lì)發(fā)放;
- 16 Dec 2016: 披露批準(zhǔn);