0x01 :切入点
在测试google 8.1版本的时候发现系统预留的service 接口存在一个本地拒绝服务漏洞。从捕获到的崩溃log信息作为切入点,来分析binder 通信机制。
这里就是错误原因,v30 变量没有判断空值,这是google 8.1.0版本
华为的8.0.0版本已经做了初步修复。
看到这里,有点疑问的地方,不是很了解binder 通信这块细节代码的处理。不知道这个地方除了传一个null地址之外,如果传进去一个可控地址会怎么样?具体怎么尝试还在学习中。还有就是这部分代码怎么去调用?传值不会~~~
0x01:代码调用顺序
参考安卓8.0源码
http://androidxref.com/8.0.0_r4/xref/frameworks/native/libs/sensor/ISensorServer.cpp#199
http://androidxref.com/8.0.0_r4/xref/frameworks/native/libs/sensor/ISensorServer.cpp#118
http://androidxref.com/8.0.0_r4/xref/frameworks/native/libs/sensor/SensorManager.cpp#267
http://androidxref.com/8.0.0_r4/xref/frameworks/native/services/sensorservice/SensorService.cpp#953
http://androidxref.com/8.0.0_r4/xref/system/core/libcutils/native_handle.c#92
0x02:最终结果
上部分代码调用顺序可以发现,这块代码是在处理传感器直连过程中,传入的data数据为null时,解析Parcel的过程中null指针引用造成的。本来想找到这个指针在哪里赋值的操作,分析了部分代码后,还是没有找到可以人为构造这部分data数据的方法。这个漏洞的分析就暂告一段落吧。
函数内部的调用顺序差不多搞清楚了,然而还是没有直接上层应用执行到这部分的代码,突然发现这个漏洞已经报过了,google没修复应该是本地拒绝服务这种影响比较低。
贴张图,在我发现之前,就已经公开这个了。。。
0x03:写在结尾
虽然看起来做了无用功,不过也收获了点经验积累,比如代码调用顺序,是在别人帮助下才完整找到的。之后这种公开fuzz脚本扫描出来的漏洞第一时间要在网上查一下有没有人提交,大部分都被提交了,像是这种显然是漏洞的。所以自己写自己的fuzz脚本这个需求就很重要了,不然很难产生什么可用的效益。