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

為了使這條漏洞利用鏈有效,我們需要繞過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
影響:掛載惡意磁盤映像可能會導致啟動應用程序。
修復方法:通過增加限制條件,修復了邏輯問題。
CVE-2018-4176:Syndis的Theodor Ragnar Gislason
四、Gatekeeper繞過漏洞(CVE-2018-4175)
我們需要注意上面的錯誤提示:“evil無法打開,因為它來自一個身份不明的開發人員”,與此同時,我們還注意到Safari下載的磁盤映像中有evil。Syndis隨后注意到了幾件事:
1、他們可以啟動經過簽名的應用程序包的副本,例如我們磁盤映像中的Terminal.app。
2、如果修改Bundle的Info.plist,并不會使簽名無效。
借助Info.plist,可以指定使用應用程序打開哪些擴展名的文件,也可以注冊新的文件擴展名,這樣一來就能夠確保該應用程序作為默認的處理程序。在啟動應用程序后,Launch Services會在數據庫中注冊應用程序和這些文件擴展名。我們可以使用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
|