1. 程式人生 > >Android靜態安全檢測 -> Zip檔案目錄遍歷漏洞

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)

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壓縮包檔案進行數字簽名校驗,校驗通過才進行解壓