安卓漏洞 CVE 2017-13287 复现详解( 三 )


 
这里先给出公式,Size在这里就是Evil_intent部分的长度,String_length和Payload_length在Setting侧都被视作payload的长度使用,故相同 。
 
从两个视角去审视这个公式:
 

  1. system_server侧
对于system_server来说,从String_length开始的部分就是单纯的一个字符串,那么它先读取String_length并套用readString16Inplace中的公式 。
 
它会从String_length之后读取$ 2(1 + Size + 15)=2Size + 32 $,正好包括总长 。
 
  1. Settings侧
对于Settings来说,从Payload_length之后会直接截取对应长度的内容作为数组,即Payload_length之后$Size + 15$,
 
因为Parcel底层的操作对4向上凑整,所以正好露出EVIL_INTENT 。
这样就可以达成效果 。
 
结果POC: https://github.com/FXTi/CVE201713287POC
 
总结 
在IPC这块就算谷歌引入了AIDL这种方式来规定接口,哪怕只是中间所用到的类的序列化过程出现一点失误都会造成如此严重的漏洞 。
 
可见安全编程以及代码审计的必要性,没准以后还会有类似机理的漏洞被发掘出来 。
 
作者:FXTi
转载自 https://www.anquanke.com/post/id/197710




推荐阅读