一、概述
近期,我們的第三方合作伙伴Syndis發(fā)現(xiàn)我們在Dropbox使用的Apple軟件中存在漏洞,該漏洞不僅影響macOS,還影響當(dāng)時(shí)最新版本的Safari,因此這些漏洞屬于0 Day漏洞。當(dāng)這些漏洞被組合利用時(shí),攻擊者可以通過誘導(dǎo)受害者訪問特制的網(wǎng)頁,實(shí)現(xiàn)在受害者的計(jì)算機(jī)上運(yùn)行任意代碼。
我們向Apple通報(bào)了這些漏洞,很快就得到了他們的確認(rèn)。Apple在大約一個(gè)月內(nèi)發(fā)布了針對這些漏洞的修復(fù)程序,這比“90天內(nèi)修復(fù)”的行業(yè)標(biāo)準(zhǔn)要好很多。這些漏洞被指定了CVE編號,并且我們與Syndis共同驗(yàn)證了漏洞已經(jīng)成功修復(fù)。本文將主要講解這些漏洞的詳細(xì)信息,及修復(fù)補(bǔ)丁的驗(yàn)證過程。
二、Safari自動(dòng)下載和安裝磁盤映像漏洞(CVE-2017-13890)
在CoreTypes中,定義了一個(gè)安全的統(tǒng)一類型標(biāo)識符(UTI)列表,該列表將由Safari自動(dòng)打開。上述內(nèi)容可以在LSRiskCategorySafe中找到。我們特別感興趣的是其中的com.real.smil。
如果我們使用Isregister檢查Launch Services數(shù)據(jù)庫,我們將會看到它在CoreTypes中定義,其描述為“同步多媒體集成語言”,并且似乎與Real Player媒體應(yīng)用程序相關(guān)聯(lián)。有許多文件擴(kuò)展名都與這個(gè)UTI相關(guān)聯(lián),其中包括“.smi”。
$ touch a.smi
$ mdls a.smi | grep -e "kMDItemContentType\s\|kMDItemKind"
kMDItemContentType = "com.real.smil"
kMDItemKind = "Self Mounting Image"
我們可以看到,“.smi”文件具有com.real.smil內(nèi)容類型,但它被描述為“自掛載映像”(Self Mounting Image)。這是因?yàn)樵趍acOS 10.12.6上,Disk Image Mounter應(yīng)用程序也將自身與這一擴(kuò)展名關(guān)聯(lián),并將自身列為該擴(kuò)展名文件的默認(rèn)處理程序。Disk Image Mounter應(yīng)用程序?yàn)?ldquo;.smi”擴(kuò)展名指定了com.apple.disk-image-smi這一UTI,但CoreTypes中定義的com.real.smil具有優(yōu)先權(quán)限。
該漏洞已被分配CVE-2017-13890,Apple官方通告參見:https://support.apple.com/en-us/HT208692
CoreTypes
適用于:OS X El Capitan 10.11.6、macOS Sierra 10.12.6
影響:在對一個(gè)惡意制作的網(wǎng)頁進(jìn)行處理的過程中,可能會導(dǎo)致安裝磁盤映像。
修復(fù)方法:通過增加限制條件,修復(fù)了邏輯問題。
CVE-2017-13890:Apple、Syndis的Theodor Ragnar Gislason
三、掛載磁盤映像導(dǎo)致應(yīng)用程序啟動(dòng)漏洞(CVE-2018-4176)
Bless實(shí)用程序用于設(shè)置卷的可啟動(dòng)性以及啟動(dòng)磁盤選項(xiàng)。其中,一個(gè)有趣的選項(xiàng)是–openfolder,可用于指定在系統(tǒng)安裝卷時(shí)在Finder中打開的文件夾。盡管描述是這樣說的,但如果–openfolder的參數(shù)指向了一個(gè)可加載的包,并且這些包時(shí)經(jīng)過打包且文件名以“.bundle”結(jié)尾的應(yīng)用程序,那么實(shí)際上將會啟動(dòng)指定的應(yīng)用程序,而沒有執(zhí)行打開Finder的操作。這就意味著,用戶可以通過訪問Safari中的網(wǎng)頁來自動(dòng)啟動(dòng)應(yīng)用程序。然而,這一漏洞對攻擊者來說,其可用性仍然有限,因?yàn)楣粽邿o法借助這一漏洞運(yùn)行任意代碼。Gatekeeper僅允許運(yùn)行從應(yīng)用商店下載的應(yīng)用程序,以及由已知開發(fā)者簽名的應(yīng)用程序,從而防范此類共計(jì)。Launch Services在啟動(dòng)應(yīng)用程序時(shí)將會進(jìn)行檢查,并產(chǎn)生如下錯(cuò)誤提示:

為了使這條漏洞利用鏈有效,我們需要繞過Gatekeeper,以避開這種檢查。
該漏洞已被分配CVE-2018-4176,Apple官方通告參見:https://support.apple.com/en-us/HT208692
磁盤映像
適用于:OS X El Capitan 10.11.6、macOS Sierra 10.12.6、macOS High Sierra 10.13.3
影響:掛載惡意磁盤映像可能會導(dǎo)致啟動(dòng)應(yīng)用程序。
修復(fù)方法:通過增加限制條件,修復(fù)了邏輯問題。
CVE-2018-4176:Syndis的Theodor Ragnar Gislason
四、Gatekeeper繞過漏洞(CVE-2018-4175)
我們需要注意上面的錯(cuò)誤提示:“evil無法打開,因?yàn)樗鼇碜砸粋(gè)身份不明的開發(fā)人員”,與此同時(shí),我們還注意到Safari下載的磁盤映像中有evil。Syndis隨后注意到了幾件事:
1、他們可以啟動(dòng)經(jīng)過簽名的應(yīng)用程序包的副本,例如我們磁盤映像中的Terminal.app。
2、如果修改Bundle的Info.plist,并不會使簽名無效。
借助Info.plist,可以指定使用應(yīng)用程序打開哪些擴(kuò)展名的文件,也可以注冊新的文件擴(kuò)展名,這樣一來就能夠確保該應(yīng)用程序作為默認(rèn)的處理程序。在啟動(dòng)應(yīng)用程序后,Launch Services會在數(shù)據(jù)庫中注冊應(yīng)用程序和這些文件擴(kuò)展名。我們可以使用Isregister命令查看:
...
--------------------------------------------------------------------------------
Container mount state: mounted
bundle id: 2740
Mach-O UUIDs: 67FFA762-AB52-31F0-AC80-E72008760B13
sequenceNum: 2740
FamilyID: 0
PurchaserID: 0
DownloaderID: 0
installType: 0
appContainer: #
dataContainer: #
path: /Volumes/bundle/Terminal.app
|