Android安全漏洞-解压zip文件可导致目录遍历

一、问题描述

昨天公司的项目安全测试报告显示App存在安全漏洞,评测结果显示“该App存在解压zip文件时可导致目录遍历的漏洞”。如下图:

二、出现原因

这里的恶意漏洞的问题就在于:因为ZipEntry在进行压缩文件的时候,名称没有做任何限制,而在Android系统中../这种特殊符号代表的是回到上层目录,又因为这个解压工作在本应用中,可以借助app的自生权限,把恶意文件名改成:../../../data/data/...即可在解压的时候把文件解压到了应用的沙盒中。

例如:现在知道了一个应用的沙盒数据的详细信息,比如一些隐私数据存放在SharedPreferences.xml中,那么这时候我们可以利用这个漏洞,把恶意文件命名成 ../../../../data/data/xxx.xxx.xxx/shared_pref/info.xml,这样在使用ZipEntry进行解压文件的时候,因为直接使用了ZipEntry.getName方法或者文件名,然后直接释放解压到本地了,所以这时候就相当于替换了本应用的沙盒数据了,这个也是利用了app本身的权限来写入沙盒数据。

三、解决方案

当App中使用zipInputStream类对zip压缩包进行解压操作时,在zipEntry.getName()获取文件名后,必须添加过滤代码对文件名中可能包含的“../”进行过滤判断,即:文件名称不能包含"../"这种特殊字符。

最后附上代码:

while(( zipEntry = zipInputStream.getNextEntry()) != null ){
    String entryName = zipEntry.getName();
    if(entryName.contains("../")){
        continue;
        // 或者
        // throw new Exception("发现不安全的zip文件解压路径!")
    }
    ...
}

你可能感兴趣的:(Android安全漏洞-解压zip文件可导致目录遍历)