安全圈 | 专注于最新网络信息安全讯息新闻

首页

ios/osx漏洞的分析與再現:cve

作者 galluppi 时间 2020-02-24
all

iOS 12.1.4是2019年2月8日發佈的最新版本的iOS。此版本修補了iOS上四個公開的漏洞。根據“零計畫”的本·霍克斯(Ben Hawkes)在推特上發佈的消息,其中至少有兩個在野外被開採為零天。在ZecOps研究團隊,我們非常希望能夠分析和揭示這些修補漏洞的更多細節。

如果你有興趣做類似的研究作為我們的反向賞金計畫的一部分-你可以在這裡注册。

如果你認為你已經成為目標,請聯系ZecOps APT事件響應小組。

TL;博士:

分析CVE-2019-7286

根據蘋果的描述:

基礎設施可用於:iPhone 5s及更高版本、iPad Air及更高版本和iPod touch第6代影響:應用程序可能獲得更高的許可權描述:通過改進輸入驗證解决了記憶體損壞問題。CVE-2019-7286:匿名研究員,穀歌威脅分析組的克萊門特·萊基涅,穀歌的伊恩·比爾零項目和穀歌零項目的塞繆爾·格羅

除了這個漏洞是在蘋果的基礎框架中修補的,這個描述並沒有為我們提供很多關於這個漏洞本質的細節。

在分析了Foundation framework中的補丁後,二進位diffing顯示iOS 12.1.4的二進位檔案與ios12.1.3的二進位檔案相比沒有明顯的變化。下一個直接的嫌疑犯是corefundation,它顯示了dephera工具中的一些二進位差异,如下所示:

通過比較這些補丁,我們發現CFPrefs守護進程(cfprefsd)的實現有一些細微的變化。

此幕後程式的手册頁不太具有描述性:

cfprefsd為CFPreferences和NSUserDefaults api提供首選項服務。沒有手動cfprefsd的配置選項。

CFPreferences選項幾乎在iOS/OS X上的每一個軟件啟動時都會使用,囙此這個守護進程中的漏洞也可能有助於保持持久性。令人驚訝的是,現時還沒有關於這一CVE的公開資訊,正如人們從一個在野外被積極利用的漏洞可以預料到的那樣。

斑塊分析

同樣的錯誤也出現在OSX上,這有助於ZecOps的調查和分析。在修補時,cfprefsd中引入了一些小的更改,但似乎最重要的修改是在以下函數中進行的:

[CFPrefsDaemon handleMultiMessage:replyHandler:]

下麵是ZecOps試圖重建原始Obj-C程式碼和補丁(粗體)的片段:

漏洞詳細資訊

handleMultiMessage:replyHandler:使用xpc請求中的“CFPreferencesMessages”數組時出現引用計數問題。

函數使用xpc_array_get_value將數組的對象逐個讀取到記憶體緩衝區中,這不會影響引用計數。釋放緩衝區中所有元素的函數的最後一部分假定xpc對象的所有權。這通常是正確的,因為回檔塊調用xpc_retain並替換xpc_緩衝區中的原始對象。但是,如果回檔不是作為精心編制的消息的結果調用的(消息正文包含消息的處理程式索引)。並非所有處理程式都調用回檔),將出現元素的double free。

具有以下鍵和值的XPC將觸發此漏洞:

如果回檔沒有更新XPC_緩衝區[count],蘋果的補丁將原來的XPC對象替換為XPC_null。囙此,當xpc_null沒有記憶體可釋放時,不存在雙重空閒條件。

脆弱性再現

我們能够使用以下POC程式碼片段重現CVE-2019-7286:

在iOS 12.0.1上運行上述程式導致cfprefsd崩潰:

建議

如果您喜歡做類似的分析/研究,我們將接受更多的研究人員和分析師加入我們的反向獎勵計畫。

77a10d1b745bc3e943a5ee45544c762021892a30