You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android读取asset压缩文件未复制被报Zip路径遍历漏洞如何处理

关于Play商店Zip路径遍历漏洞的申诉与修复方案

注意:谷歌Play的漏洞扫描为静态代码检测,不会判断你的zip实际来源,只要你用到的zip解压逻辑未做路径防护,就会触发预警。如果不想走申诉流程,直接修复解压逻辑后重新上传即可自动消除预警。

申诉操作步骤

  • 准备完整的佐证材料,明确包含以下核心信息:
    • 说明所有待解压的压缩包均为应用预制、内置在assets目录的官方文件,不存在任何用户可控、外部下载、第三方传入的压缩包来源
    • 清晰描述解压后的操作逻辑:解压过程仅读取压缩包内指定文件的文本内容,直接转为字符串供内部逻辑调用,不会将任何解压内容写入本地存储、不会传递给其他应用/组件、不存在任何路径拼接写入操作
    • 附上你的解压逻辑完整代码片段,标注所有路径校验、文件操作相关的代码行,证明不存在路径遍历的可利用条件
  • 进入Play Console对应应用的安全预警页面,点击「上诉」入口,将上述材料全部提交,表述需严谨确定,避免使用模糊的不确定描述
  • 若第一次申诉被驳回,可补充上传解压流程的单元测试结果,证明当传入携带恶意路径的zip条目时,你的逻辑会直接拦截拒绝处理,不会触发风险操作

漏洞修复方案

如果你的解压逻辑本身未做路径校验,哪怕当前使用场景无风险,也建议优先修复问题,避免后续迭代引入外部压缩包时触发真实漏洞,修复步骤如下:

  • 每次读取zip条目时首先做路径合法性校验,禁止携带../遍历字符、根路径开头的条目被处理
  • 核心校验逻辑参考(Android Kotlin示例):
val assetInputStream = assets.open("your_script_pack.zip")
val zipInputStream = ZipInputStream(assetInputStream)
var entry: ZipEntry? = zipInputStream.nextEntry
while (entry != null) {
    val entryName = entry.name
    // 核心路径遍历防护
    if (entryName.contains("..") || entryName.startsWith("/")) {
        throw SecurityException("Invalid zip entry path: $entryName")
    }
    // 仅读取内容转为字符串内部使用
    val content = zipInputStream.bufferedReader().use { it.readText() }
    // 此处添加你的内部业务逻辑
    entry = zipInputStream.nextEntry
}
zipInputStream.close()
  • 若你使用第三方解压库实现解压操作,直接升级到官方已修复路径遍历漏洞的最新版本即可,避免使用长期未维护的第三方解压组件

内容的提问来源于stack exchange,提问作者user1699512

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 01:45:04