Android靜態安全檢測 -> Zip文件目錄遍歷漏洞

Zip文件目錄遍歷漏洞 - ZipEntry.getName方法


一、API


1. 繼承關係


【1】java.lang.Object

【2】java.util.zip.ZipEntry


2. 主要方法


【1】getName()   返回String(entry的名字)


【2】isDirectory()  返回Boolean(是否爲directory entry)


【3】參考鏈接(Android developers)


https://developer.android.com/reference/java/util/zip/ZipEntry.html


3. 使用ZipEntry類解壓zip文件


【1】代碼示例




【2】參考鏈接


http://blog.csdn.net/jiangwei0910410003/article/details/52118575


二、觸發條件


1. 定位getName方法


【1】對應到smali語句中的特徵

Ljava/util/zip/ZipEntry;->getName()Ljava/lang/String;


2. 方法內查詢getNextEntry()

Ljava/util/zip/ZipInputStream;->getNextEntry()Ljava/util/zip/ZipEntry;

參考鏈接:https://developer.android.com/reference/java/util/zip/ZipInputStream.html#getNextEntry()


3. 判斷是否過濾特殊字符  "../"


4. 漏洞代碼示例




三、漏洞原理


【1】使用ZipEntry.getName()解壓zip文件,沒有對上級目錄字符串(../)進行過濾校驗,可能會導致被解壓的文件發生目錄跳轉,解壓到其他目錄,並且覆蓋相應的文件,最終導致任意代碼執行


【2】更多內容


https://jaq.alibaba.com/community/art/show?articleid=383


http://www.droidsec.cn/android安全開發之zip文件目錄遍歷/


http://wolfeye.baidu.com/blog/traversal-zip-file/


四、修復建議


【1】解壓zip文件時,判斷文件名是否有../特殊字符




【2】對重要的Zip壓縮包文件進行數字簽名校驗,校驗通過才進行解壓


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