RealWorldCTF 史上最豪华的题目,疑似被 NSO 白捡了漏

移动安全 2年前 (2022) admin
649 0 0

今天 Google Project Zero 放出了 FORCEDENTRY “零点击”漏洞利用链的第二篇技术分析,介绍其如何在具有图灵完备的畸形 pdf 之后,进一步实现 PAC 绕过和逃逸 IMTranscoderAgent 沙箱。


这篇既不是为了蹭热度也不是搬运,而是吃瓜有一部分吃到自己头上了。赶紧此地无银三百两,出来写篇文章撇清一下。某推比较喜欢给中国的技术人员泼脏水,还不知道能编出来什么劲爆故事,干脆自己先跳出来。


技术分析的英文原文地址:


FORCEDENTRY: Sandbox Escape

https://googleprojectzero.blogspot.com/2022/03/forcedentry-sandbox-escape.html


  1. 在图片解析漏洞利用中,使用 JBIG 格式的位运算特性实现基本逻辑电路门,从而实现加法器等复杂的虚拟机功能,只需要一次触发漏洞搞定 ASLR 绕过和内存读写

  2. iOS 14 对 Objective-C 的 isa 指针加了签名,但直到 14.5 才开始验证(参考阅读 iOS 14.5 如何用 PAC 保护 Objective-C 对象),因此这个漏洞仍然可以用 SeLector-Oriented Programming

  3. 虽然 SLOP 已经足够构造一个新的代码执行环境,但这个 exploit 仅仅用了初始化 SLOP 的 dealloc -> invoke 之后,就转而使用 NSExpression 做代码执行。一个利用,两种不同的图灵完备实现

  4. CommCenter NSXPC 进程里的一个跨进程序列化问题。由于允许了 NSObject 导致可以反序列化任意 class,创建 NSPredicate 并利用一个系统库的 gadget 将反序列化出来的 NSPredicate 代码激活并执行。如果你不搞 iOS,没关系,这个和 Java 的反序列化漏洞可谓是非常的像


沙箱逃逸的 bug 没有用到内存破坏,纯逻辑的方式向另一个没有 JIT 的进程注入任意代码,仿佛变成了 Java。“当前和即将部署的最先进的内存安全防御技术,例如 PAC 和 MTE,都对这个沙箱逃逸漏洞无计可施”,GP0 的文章写到。


Both current and upcoming state-of-the-art mitigations such as Pointer Authentication and Memory Tagging have no impact at all on this sandbox escape.


CommCenter 之后还有一个需要远程下载的 payload 传入 expression 执行,GP0 没有给出分析。这一步下载的代码应该就是内核提权用的,看上去没有被抓到样本。


有意思的是 CommCenter 这个用户态的沙箱逃逸并不是必要的,IMTranscoderAgent 这个进程具有 com.apple.private.allow-explicit-graphics-priority 权限,可以一步到位直接用 IOMFB 的内核漏洞(CVE-2021-30807,或者盘古在天府杯上打 15.1 的那个)。


NSExpression 和 NSPredicate 这个公众号去年写过,我给删了。英文版的还留着,GP0 的分析里有引用。趁这两天大家都在关注 Spring Framework,可以把 NSExpression 类比 Spring Expression Language (SpEL),无论是能力还是应用场景都非常相似,就很好理解了。




时光回到 2019 年夏天,GP0 做了第一个公开的 iMessage 0click 演示,没有公布任何细节。我正好当时知道一些 Objective-C 的黑魔法,猜中了一部分。


RealWorldCTF 史上最豪华的题目,疑似被 NSO 白捡了漏


后来索性在九月份的 RealWorld CTF 就把这个当时我还没有深入研究完全的东西做成了一道题,顺带黑一把 DEFCON 的 iOS 题脱离实际。


RealWorldCTF 史上最豪华的题目,疑似被 NSO 白捡了漏


为了增加噱头搞了一台物理 iPhoneXR 做评测机。


评论区吐槽说这题目怕不是空手套 0day——当时自然不是,但两年后回头看,还真让他说中了。这完全是新提出了一个 bug class,识货的人就扎进去研究了。


题目思路就是把不可信的用户输入传入 NSExpression,等同于任意代码执行。大部分队伍一头雾水,无从下手。一共三支队伍做出来。ESPR 有外援 Samuel 自然不在话下,slipper 单人成行搞定,ppp 做出来之后我记得有队员在 IRC 里感叹说自己的 iOS 开发白学了。


RealWorldCTF 史上最豪华的题目,疑似被 NSO 白捡了漏




这个技术相当于 return-oriented programming,本身不是漏洞,一定条件的情况下可以做 post-exploitation。它本身就是一个完美的代码注入向量。就好比大家都知道往 system 里面传入可控的命令会被执行,但 system 这个函数本身是功能,调用方才是漏洞。


到这里只是一个很有趣的特性,在编译型语言里自带脚本执行能力,而且一直没有什么反响,我也没当回事。


到了 2020 年底 RealWorld CTF 搞在线技术论坛,我就翻出来当时的出题思路把这个特性又讲了一遍——解释器的原理,函数表达式的能力,反序列化,如何做合法性校验,甚至还给出了一些潜在的跨进程攻击面但做了过滤的例子。


2021 年围绕 Pegasus 的报道一直不断,坊间传闻越来越神。终于到下半年 CitizenLab 抓到了样本,给了 SEAR 和 Project Zero 做技术分析。年底我得知 NSExpression 出现在真实的 exploit 中,大为震惊。


iOS 15.1 之后对 NSExpression 的执行能力做了限制:

https://developer.apple.com/documentation/ios-ipados-release-notes/ios-ipados-15_1-release-notes




NSO 到底有没有受到启发不好说,总之时间点对上了。


很多细节都能在这篇早就公开的文章中找到对应的思路。RealWorldCTF 两年后,这个技术疑似被在野利用学了去,真的变 real world 了。以后谁还说打 CTF 是过家家?


要是知道手上有一个可能继续挖出 0day 的思路,还会随随便便上演讲写博客吗……怕是只有我这种傻子,没彻底玩透就事无巨细地演讲公众号博客到处发。


之前写的“我认为不太可能找到真实应用场景的问题”,真是太打脸了。


RealWorldCTF 史上最豪华的题目,疑似被 NSO 白捡了漏


另外以后不敢去某些国家旅游了,当心咸鱼饭变成生鱼片

原文始发于微信公众号(非尝咸鱼贩):RealWorldCTF 史上最豪华的题目,疑似被 NSO 白捡了漏

版权声明:admin 发表于 2022年4月1日 上午7:47。
转载请注明:RealWorldCTF 史上最豪华的题目,疑似被 NSO 白捡了漏 | CTF导航

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
暂无评论...