近期MobSF
官方发布了新的版本,修复了一个安全问题。由于对zip
文件处理不当,远程攻击者上传恶意的移动应用文件(zip
)文件即可导致任意文件写入或覆盖。经测试通过直接覆盖py
文件可以执行任意Python
代码。
漏洞信息
移动安全测试框架 (MobSF
) 是一个智能化、一体化的开源移动应用(Android / iOS)自动测试框架,能够对以上两种移动应用进行静态和动态分析。在处理上传的应用时,都需要对压缩包文件进行解压处理,当压缩包内的文件名信息带有../../
,由于没有对此进行过滤,可以跳出解压目录从而覆盖其他目录的文件,比如Python
文件
漏洞影响版本
MobSF
>=v0.9.3.2
&& <=0.9.4.1
复现环境
windows 10
MobSF v0.9.3.7
Python 2.7.12
复现过程
使用下面的代码生成攻击payload
,并上传至MobSF
,即可执行任意Python
代码
#generate_zipfile.py
import zipfile
z_info = zipfile.ZipInfo(r"..\..\StaticAnalyzer\__init__.py")
z_file = zipfile.ZipFile("evil.apk", mode="w")
z_file.writestr(z_info, "print 'vuln'")
z_file.close()
由于MobSF使用的DJANGO框架设置了为debug模式,导致有py文件修改就会重新启动服务,给漏洞利用带来了一定的便利。
修复细节
通过跟踪压缩包处理流程发现,问题在于Unzip函数,位于StaticAnalyzer/views/shared_func.py
查看commit发现 ,刚开始的时候没有对文件名进行过滤实现了解压文件流程,从ZipInfo
的filename
属性获得文件名,并写入文件。后来调用了ZipInfo
的extract
函数进行解压,通过查看文档发现这个函数会过滤../
,:<>|"?*
等特殊符号。在unix
平台中Unzip
函数还有可能去调用系统原生的unzip
命令,经过笔者测试是不会产生上诉问题的。
结语
MobSF
会自动检测版本是否有更新,但更新还需要手动更新,如正在使用请尽快更新到v0.9.4.2
以上版本