了解parcel漏洞真正的原理之前,首先来看一下系统校验intent的序列化流程。 4.3.1 系统校验序列化流程 首先攻击者手动会序列化一次需要传给系统的bundle,然后系统会反序列化一次进行校验,校验完之后又会重新序列化交给设置,然后设置真正去打开页面的时候会再次反序列化,这样就经历了两次序列化与反序列化,因为其中读写不...
该互联网厂商在自家看似无害的 App 里,使用的第一个黑客技术手段,是利用一个近年来看似默默无闻、但实际攻击效果非常好的 Bundle 风水 - Android Parcel 序列化与反序列化不匹配系列漏洞,实现 0day/Nday 攻击,从而绕过系统校验,获取系统级 StartAnyWhere 能力。 上图即是其漏洞利用链中的核心环节,利用了多个安卓...
其中关键的是 writeToParcel 和CREATOR.createFromParcel方法,分别填充了该自定义结构序列化和反序列化的实现,当然我们也可以自己继承Parcelable去实现自己的可序列化数据结构。 内存布局 从接口上看,Parcel 可以支持按照一定顺序写入和读取 int、long 等原子数据,也支持 String、IBinder、和 FileDescriptor 这些复杂的数据结...
Parcelabel序列化后写入内存,因此比 Serializable更高效,但是其序列化和反序列化都需要开发者主动实现。实现原理十分简单:按照被序列化的对象的属性顺序依次写入内存指定区,然后反序列化时按照同样的顺序进行读取。 关于异常java.lang.RuntimeException: Parcel android.os.Parcel: Unmarshalling unknown type code。主要有两...
由于在反序列化的过程中触发了非预期的程序逻辑,从而被攻击者用精心构造的字节流触发并利用漏洞从而最终实现任意代码执行等目的。 Android 中除了传统的 Java 序列化机制,还有一个特殊的序列化方法,即 Parcel[1]。根据官方文档的介绍,Parcelable 和 Bundle 对象主要的作用是用于跨进程边界的数据传输(IPC/Binder),但 ...
Parcel 101 在介绍漏洞之前,我们还是按照惯例先来了解下基础知识。对于有过 Android 开发或者逆向分析经验的同学应该对 Parcel 都不陌生,但通常也很少直接使用该类去序列化/反序列化数据然后进行 IPC 通信,而是通过 AIDL 等方法去自动生成模版,然后集成实现对应接口。
Bundle 风水 - Android Parcel 序列化与反序列化不匹配系列漏洞 Bundle 风水(Bundle Fengshui)是指在 Android 应用开发中,使用 Bundle 类传递数据时,需要注意一些优化技巧,以避免在传递数据过程中出现性能问题。 android 安全 Bundle风水 parcel序列化 ide 原创 2023-05-08 13:07:05 225 阅读 由View的onAttached...
对于序列化大家都知道,传数据对象的时候,使用Serializable的时候,出现了一个错误,让我十分费解。bean类下的子对象明明都已经序列化,却还是报了Java.lang.RuntimeException: Parcel: unable to marshal value的错,这是因为什么呢?? 仔细的看了一下日志信息,发现报错的bean类并不是我需要传值的bean类,那就找进去看...
qq.com/s/P_EYQxOEupqdU0BJMRqWsw(Bundle 风水 - Android Parcel 序列化与反序列化不匹配系列漏洞...
首先Parcelable的性能要强于Serializable的原因我需要简单的阐述一下 1). 在内存的使用中,前者在性能方面要强于后者 2). 后者在序列化操作的时候会产生大量的临时变量,(原因是使用了反射机制)从而导致GC的频繁调用,因此在性能上会稍微逊色 3). Parcelable是以Ibinder作为信息载体的.在内存上的开销比较小,因此在内...