LazyValue下的Parcel漏洞

💡 原文中文,约3700字,阅读约需9分钟。
📝

内容提要

安卓13之前,Parcel存在多个反序列化漏洞,攻击者可利用这些漏洞进行提权。安卓13引入LazyValue机制以限制漏洞影响。文章分析了两个提权漏洞及其修复过程,强调了反序列化中的读写不匹配问题,并指出修复中的不足,导致漏洞再次出现。

🎯

关键要点

  • 安卓13之前,Parcel存在多个反序列化漏洞,攻击者可利用这些漏洞进行提权。

  • 安卓13引入LazyValue机制以限制漏洞影响,优化反序列化步骤。

  • 第一个提权漏洞允许往其他进程的堆栈加载activity,补丁通过重新构造Intent对象修复。

  • 第二个漏洞能够实现LaunchAnyWhere提权攻击,补丁分析显示需要类型检查。

  • 攻击思路利用LazyValue修改反序列化过程中的数据,隐藏恶意intent。

  • 修复过程中遇到类型转换错误,通过异常处理类解决。

  • 两个漏洞涉及多个CVE,修复过程中发现修复不足导致漏洞再次出现。

  • 第二次修复需使用新版getParcelable函数以避免漏洞重现。

延伸问答

Parcel漏洞是什么?

Parcel漏洞是指在安卓13之前,Parcel存在多个反序列化漏洞,攻击者可以利用这些漏洞进行提权。

安卓13引入LazyValue机制的目的是什么?

LazyValue机制的目的是限制Parcel漏洞的影响,优化反序列化步骤,减少漏洞利用的可能性。

第一个提权漏洞的修复方法是什么?

第一个提权漏洞的修复方法是通过重新构造Intent对象来修复,确保反序列化过程中的类型匹配。

第二个提权漏洞的攻击思路是什么?

第二个提权漏洞的攻击思路是利用LazyValue修改反序列化过程中的数据,隐藏恶意intent以实现LaunchAnyWhere攻击。

修复过程中遇到的主要问题是什么?

修复过程中遇到的主要问题是类型转换错误,需要通过异常处理类来解决。

为什么第二个漏洞会再次出现?

第二个漏洞再次出现是因为在第二次修复中使用了旧版的getParcelable函数,未指定类型,导致漏洞重现。

➡️

继续阅读