Google Project Zero 所见最天才的漏洞利用之一: NSO zero-click iMessage exploit

2021-12-16 18:45:16 +08:00
 Divinook

原文见: https://googleprojectzero.blogspot.com/2021/12/a-deep-dive-into-nso-zero-click.html

今天上午摸鱼时在 hacker news 上看到了这篇文章,惊叹于其中体现的技术细节与智慧,有兴趣的朋友可以直接看原文,这里做一个大概的介绍。

简单介绍

所谓的 zero-click 漏洞,是与 one-click 漏洞作比较,之前 iMessage 出现过通过钓鱼链接诱使目标点击并进行攻击,这次的漏洞强大在于不需要任何点击,只需要通过 iMessage 向目标发送一个精心构造的 GIF payload ,目标设备就会在无感知的情况下被攻陷,完全无法防御。

利用原理

1

iMessage 在接受后缀为.gif 的文件时,会对它进行解析和渲染,Apple 使用 ImageIO 库来解析目标文件,但是 ImageIO 库会尝试猜测目标文件的类型并进行相应解析(而非使用后缀,见[https://googleprojectzero.blogspot.com/2020/04/fuzzing-imageio.html]),因此攻击面扩大到了 20 多个图像编解码器。

2

漏洞的下一步利用在 CoreGraphics PDF 的解析过程中,JBIG2 是 CoreGraphics PDF 中一种用于图像压缩和解压缩的标准,在 JBIG2 中,它会尝试将每个页面分割成单个字形,并用模式匹配将相似的字形作为一个来储存,从而压缩体积。在压缩和解压缩的过程中,JBIG2 会对图像的 bitmap 进行逻辑运算,例如在压缩时使用 XOR 来储存两个相似图像之间的差异像素,并在解压缩时用 OR 来恢复原始图像(这里纯文字可能不太好理解,原文有一些图像辅助解释,可以在原文查看)。JBIG2 中的逻辑运算符( AND, OR, XOR or XNOR )使用非常灵活,他将图像视为 segment 并进行逻辑运算操作,这些操作被称为段命令。 Apple 使用开源的 Xpdf 作为 JBIG2 的实现,在 Xpdf 在处理引用 JBIG2Segment 类(包括 Xpdf 的控制命令,用于对图像的操作)时存在一个典型的整数溢出问题,攻击者可以在这里的溢出基础上进行堆溢出(这里涉及很多二进制安全的细节,可以在原文查看),从而修改了用于控制图像边界的变量,进而解除了绘制区域的限制。

3

在解除了画布限制后,攻击者就可以操作段命令( JBIG2 标准下存在完整而灵活的 AND, OR, XOR, XNOR 逻辑运算)来对任意内存上进行操作,实际上这些逻辑运算符可以组成门电路并进行计算操作。尽管 JBIG2 标准下没有提供脚本的执行环境,但是攻击者使用了超过七万个段命令组成门电路并模拟了一个小型计算机架构,有完整的 64 位寄存器、加法器等等,从而可以在这个环境下执行任意代码,接下来的沙箱逃逸,就会在这个环境下运行,而这些仅仅发生在一个图像的解析过程中。

9754 次点击
所在节点    信息安全
62 条回复
cest
2021-12-16 18:48:31 +08:00
apple 打赏过 xpdf 吗?
yanyumihuang
2021-12-16 19:19:08 +08:00
这也太猛了吧
wazggcd
2021-12-16 19:57:42 +08:00
卧槽,那有什么临时性的防御措施吗?
also24
2021-12-16 20:00:56 +08:00
@wazggcd #3
The vulnerability discussed in this blog post was fixed on September 13, 2021 in iOS 14.8 as CVE-2021-30860.
v2000000001ex
2021-12-16 20:21:35 +08:00
ios13.5 索索发抖
rphoho
2021-12-16 20:33:06 +08:00
类似之前微信的 gif 溢出 bug 吧
Ginray
2021-12-16 20:49:22 +08:00
太猛了,每一步都在想象之外
madNeal
2021-12-16 20:51:42 +08:00
java ${XXX:xxxxxxx}
hahahaha123567
2021-12-16 20:54:34 +08:00
攻击者怎么知道 Apple 使用的是 ImageIO/Xpdf 库呢?
这种纯内存操作已经是炫技了吧
cholerae
2021-12-16 21:05:36 +08:00
@wazggcd ios 14.8 已经修复了
x86
2021-12-16 21:20:52 +08:00
这是个神仙呀
liuxu
2021-12-16 21:32:24 +08:00
真 TM 牛逼。。。
edwinxe2v
2021-12-16 21:33:36 +08:00
卧槽,太牛逼了!多谢分享,讲解得很清楚。
搜了一下,Hacker news 的相关讨论: https://news.ycombinator.com/item?id=29568625
24bit
2021-12-16 21:40:38 +08:00
太强了
uselessVisitor
2021-12-16 22:27:23 +08:00
”但是攻击者使用了超过七万个段命令组成门电路并模拟了一个小型计算机架构“
dingwen07
2021-12-16 23:39:22 +08:00
太强了。。。
qsmd42
2021-12-16 23:43:52 +08:00
其实我好奇的是国内的网安承包商有没有买 NSO 的软件
micean
2021-12-16 23:54:17 +08:00
我的天。。。。
shayuvpn0001
2021-12-17 00:11:35 +08:00
关闭 iMessage 了应该就没事了吧
AlexaZhou
2021-12-17 00:22:38 +08:00
这个漏洞比 log4j 牛逼多了,要是熬夜修这个漏洞也有意思呀,熬夜修 log4j 这么蠢的漏洞,一点成就感都没有

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/822664

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX