Android中的目录穿越漏洞
概述在Linux/Unix系统中“..”代表的是向上级目录跳转,如果程序在处理到诸如用“../../../../../../../../../../../etc/hosts”表示的文件时没有进行防护,则会跳转出当前工作目录,跳转到到其他目录中,即目录穿越。
在 Android 中由于目录穿越造成任意文件写入的漏洞较为常见。首先是写文件的接口可能本身设计上就允许传入任意路径的参数,另一种情况就是直接拼接路径导致可以 “…/” 进行目录穿越。
由于存在目录穿越漏洞的代码执行者通常是应用本身(非webview沙箱进程),因此一旦存在任意文件写入漏洞,就有可能覆盖原有的文件。此时若应用中存在动态加载代码的逻辑,配合目录穿越则有可能实现任意代码执行。
add:后来又多个团队或研究人员研究目录穿越问题,并起来各式各样的名字,现留下链接以备参考:
zip-slip总结了多个存在目录穿越的第三方语言或库,并包含了具体的代码实例 https://github.com/snyk/zip-slip-vulnerabilityhttps://snyk.io/research/zip-slip-vulnerability
zipperdown iOS平台下多个APP存在目录穿越漏洞
目录穿越场景1. 下载文件到指定的路径该场景适用于下载路径由用户可控,例如一些下载工具、保存的目录为用户名等特殊情况。
2. 解压 zip 文件时未对 ZipEntry 文件名检查Android应用中通常会直接下载一些皮肤等资源文件,为了节约流量,一些资源文件通常打包成zip。
Java代码在解压ZIP文件时会使用到ZipEntry类的getName()方法。如果ZIP文件中包含“../”的字符串,该方法返回值里面会原样返回。如果在这里没有进行防护,继续解压缩操作,就会将解压文件创建到其他目录中。
漏洞代码如下:1
...