Android静态安全检测 -> Zip文件目录遍历漏洞
Zip文件目录遍历漏洞 -ZipEntry.getName方法一、API1. 继承关系【1】java.lang.Object【2】java.util.zip.ZipEntry2. 主要方法【1】getName() 返回String(entry的名字)【2】isDirectory() 返回Boolean(是否为dir
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压缩包文件进行数字签名校验,校验通过才进行解压
更多推荐
所有评论(0)