uni-app zip文件解压目录遍历漏洞

uni-app zip文件解压目录遍历漏洞

zip文件解压目录遍历漏洞

测评目的: 检测App中是否存在解压zip文件时可导致目录遍历的漏洞
危险等级: 中
危害:

  • App在运行过程中,可能对下载的或者本地存储中的zip格式文件进行解压。由于在zip压缩包下的文件路径名中允许存在"…/“字符串,而”…/“在Android系统中将被解释为返回上层目录,那么攻击者可能利用多个”…/"构造出不安全的zip压缩包。
  • 当app程序中使用ZipEntry.getName()解压zip文件时,没有对上级目录字符串(…/)进行过滤校验,可能会导致被解压的文件发生目录跳转,解压到当前目录以外的其他目录,并且覆盖应用原有的文件。
  • 如果被覆盖掉的文件是js、so和dex等文件,可能导致拒绝服务攻击,甚至是恶意代码执行。

测评结果: 存在漏洞(发现1处)
测评结果描述: 该App中存在解压zip文件时可导致目录遍历的漏洞。
测评详细信息:

  • 文件: com/taobao/weex/utils/WXFileUtils
  • 方法: public static extractSo(Ljava/lang/String;Ljava/lang/String;)Z

解决方案:
开发者自查:当App程序中使用zipInputStream类对Zip压缩包进行解压操作时,在ZipEntry.getName()获取的文件名后,必须添加过滤代码对文件名中可能包含的"…/"进行过滤判断,以提示用户并终止可能发生的异常操作。以下为修复代码示例:


更多关于uni-app zip文件解压目录遍历漏洞的实战教程也可以访问 https://www.itying.com/category-93-b0.html

1 回复

更多关于uni-app zip文件解压目录遍历漏洞的实战教程也可以访问 https://www.itying.com/category-93-b0.html


该漏洞确实存在安全风险。在uni-app开发中,如果直接使用原生模块进行zip解压操作而未对文件路径进行校验,可能导致目录遍历攻击。

针对您提到的WXFileUtils.extractSo方法,核心问题在于解压时未对ZipEntry.getName()返回的路径进行规范化处理。攻击者可通过构造包含"…/"的压缩包路径,将文件解压到预期目录之外的位置。

修复方案:

  1. 在解压前对路径进行校验:
String entryName = entry.getName();
if (entryName.contains("..") || entryName.contains("../")) {
    // 记录日志并跳过该文件
    continue;
}
  1. 更安全的做法是使用规范化路径:
File targetFile = new File(targetDir, entryName);
String canonicalPath = targetFile.getCanonicalPath();
if (!canonicalPath.startsWith(targetDir.getCanonicalPath())) {
    // 路径越界,拒绝解压
    continue;
}
回到顶部