安卓Stagefright高危漏洞初探

jopen 9年前發布 | 12K 次閱讀 漏洞
 

驚聞Stagefright曝出重大漏洞,可以造成遠程代碼執行,甚至發條彩信,就有可能入侵用戶移動設備。這聽起來可是難得一遇的大漏洞啊,作為安全人員,自然要好好扒一扒內幕了。

山重水復

從新聞來看,出于某些考慮,漏洞的發現者目前并沒有公布相關的細節,而是決定要留到BlackHat上再進行詳細的說明。也就是說,目前所知道就是Android系統的Stagefright庫存在重大安全問題,具體是什么?想知道自己去Fuzz。

雖然,看起來關于漏洞細節,并沒有任何頭緒。但是,作為安全人員,首先要堅信的一點,就是世界上沒有不透風的墻!仔細研讀漏洞的新聞稿,可以發 現,該漏洞已經提交給了Google,并且Google迅速的進行了修復。同時發現,Google也已經把漏洞相關信息交給了部分合作伙伴。看完這些,就 能確定,這漏洞目前還能扒。

既然Google針對此漏洞,已經在源碼中進行了修復。那么首先查看了Google的相關源碼提交狀態。

安卓Stagefright高危漏洞初探

簡單翻閱了提交的log。發現了一些關于libstagefright安全問題的修復,但大多言簡意賅,難以確定。

柳暗花明

看起來從Google方面下手并不容易,好在Google已經將漏洞相關資料交給了合作伙伴,所以我們發現了CyanogenMod公布的一條消息。

安卓Stagefright高危漏洞初探

也就是說,在CM12中已經對此漏洞進行了修復!

順藤摸瓜

隨后,我們在github上找到了CM12的提交記錄

安卓Stagefright高危漏洞初探

可以看到,在CM12的最近提交中,都是對Stagefright相關漏洞的修復,根據這些修復內容,對漏洞大體上也就能有一些了解了!

抽絲剝繭

我們對部分修復方案進行了簡單分析。

Bug: 20139950

安卓Stagefright高危漏洞初探

該bug的位置在frameworks/av/media/libstagefright/SampleTable.cpp文件的 SampleTable::setSampleToChunkParams函數中,從該bug的說明和修復上來看。是由于 mNumSampleToChunkOffets值太大,可能造成溢出。相關代碼如下

安卓Stagefright高危漏洞初探

注意紅線標注部分。可能會造成訪問越界。從而引發安全問題。

Bug: 20139950

安卓Stagefright高危漏洞初探

該bug在frameworks/av/ media/libstagefright/ESDS.cpp的ESDS::parseESDescriptor函數中。直接從描述和修復代碼中,就能看出來,是由于在解析過程中,對變量校驗不嚴格,可能造成越界訪問的問題。

Bug: 20923261

安卓Stagefright高危漏洞初探

此漏洞產生于frameworks/av/media/libstagefright/MPEG4Extractor.cpp的 MPEG4Extractor::parseChunk函數中。從截圖就可以看到漏洞的全貌了。當chunk_data_size小于 kSkipBytesOfDataBox時,紅線部分就會變成一個負數,由于setData的最后一個參數類型是size_t,所以就會被解析成很大的正 數,從而造成錯誤。

其余漏洞產生原因類似,就不再一一進行描述了。

總結

概覽全部的修復代碼,發現產生漏洞的原因,都是因為對數據校驗完善造成的。此次曝光的只是Stagefright的問題。考慮到Android系 統中包含了大量的文件解析代碼,包括圖片、壓縮包、音頻、視頻等解碼庫。這些庫在解析文件過程中,對數據進行嚴格的校驗了嗎?會不會明天又會爆出音頻解碼 存在嚴重bug?這應該是值得開發者和安全從業者深思的問題。

*作者:金山毒霸,轉載須注明來自FreeBuf黑客與極客(FreeBuf.COM)

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!