google 8.1.0 本地拒絕服務的思考?

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腳本這個需求就很重要了,不然很難產生什麼可用的效益。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章