Android靜態安全檢測 -> Zip檔案目錄遍歷漏洞
阿新 • • 發佈:2018-12-23
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)
3. 使用ZipEntry類解壓zip檔案
【1】程式碼示例
【2】參考連結
二、觸發條件
1. 定位getName方法
【1】對應到smali語句中的特徵
Ljava/util/zip/ZipEntry;->getName()Ljava/lang/String;
2. 方法內查詢getNextEntry()
Ljava/util/zip/ZipInputStream;->getNextEntry()Ljava/util/zip/ZipEntry;
3. 判斷是否過濾特殊字元 "../"
4. 漏洞程式碼示例
三、漏洞原理
【1】使用ZipEntry.getName()解壓zip檔案,沒有對上級目錄字串(../)進行過濾校驗,可能會導致被解壓的檔案發生目錄跳轉,解壓到其他目錄,並且覆蓋相應的檔案,最終導致任意程式碼執行
【2】更多內容
四、修復建議
【1】解壓zip檔案時,判斷檔名是否有../特殊字元
【2】對重要的Zip壓縮包檔案進行數字簽名校驗,校驗通過才進行解壓