Zip Slip 漏洞

作为更广泛研究的一部分,Snyk 安全研究团队发现了一个任意文件写入通用漏洞,该漏洞可以使用包含路径遍历文件名的特制 zip(或 bzip2、gzip、tar、xz、war)存档来实现。因此,当文件名连接到目标提取目录时,如果使用的提取工具没有进行足够的检查,最终路径最终会出现在目标文件夹之外。

已通知 Apache Maven 团队,因为 plexus-archiver 库没有进行足够的检查,并且它是大多数打包插件使用的库。受影响的 plexus-archiver 版本是 [,3.4]+[3.5],固定版本是 3.4.1 和 3.6.0,带有问题管理plexus-archiver #87和 Snyk 漏洞报告SNYK-JAVA-ORGCODEHAUSPLEXUS-31680

Maven 的哪些部分易受攻击?

Apache Maven 本身并不容易受到攻击,因为 Maven 不会自行解包:解包操作由插件完成。

读取内存中的恶意档案也不是问题,只有在将此类档案解压到磁盘时可能会导致问题,但通常 Maven 插件不会解压档案。

问题在于恶意工件,我们无法使用我们的 Maven 插件创建此类工件,因此无需采取额外措施来防止在此级别创建恶意存档。

以下插件使用 plexus-archiver 将依赖项解压缩到磁盘,并已被确定为暴露该漏洞的潜在触发器。该矩阵包含组件/插件的名称、哪些版本受到影响、哪些版本包含已修复的问题以及指向相应问题的链接。

插入 受影响的版本 固定版本 问题 细节
maven 依赖插件 (,3.1.0] 3.1.1 MDEP-611 unpack 和 unpack-dependencies 目标(除非明确配置,否则不使用)
maven-ear-插件 (,3.0.0] 3.0.1 MEAR-268 EAR模块功能(除非明确配置,否则不使用)
maven-javadoc-插件 [2.5,3.0.0] 3.0.1 MJAVADOC-520 resourcesArtifacts 和 includeDependencySources 功能(除非明确配置,否则不使用)
Maven 战争插件 [2.1-alpha-1,3.2.0] 3.2.1 MWAR-416 覆盖功能(默认情况下,当 Packaging=war 依赖于 type=war 时处于活动状态)
maven-插件-插件 [3.0,3.5.1] 3.5.2 MPLUGIN-338 扫描 javadoc 注释的依赖源(默认情况下在 Packaging=maven-plugin 时激活)

Apache Ant 到 1.9.11 的解压缩任务也有同样的问题:它将在 1.9.12 857095da5153fd18504b46f276d84f1e76a66970中修复。

然后以下使用 Ant 的 Maven 插件会受到影响:

插入 受影响的版本 固定版本 问题 细节
maven-antrun-插件 (,1.8] 曼特朗-214
maven-plugin-plugin:maven-script-ant [2.0,3.5.2] MPLUGIN-340 蚂蚁魔精包装

以下插件使用 plexus-archiver 但不受影响,因为它们只创建档案:

  • maven-acr-插件
  • maven-程序集插件
  • maven-ejb-插件
  • maven-jar-插件
  • maven-jlink-插件
  • maven-rar-插件
  • Maven 存储库插件
  • maven 站点插件
  • Maven 源插件

您何时会受到此漏洞的影响?

该漏洞就像木马一样,恶意压缩包必须先进入系统,通常通过下载依赖项来实现。一旦下载没有直接的危险,用户必须在成为受害者之前采取一些特定的行动。仅当满足以下所有条件时才会发生这种情况:

  • 存储库中有一个可用的存档是恶意的。
  • 您的 Maven 项目或其依赖项之一必须发现恶意 jar 足够有趣,才能将其添加为依赖项。
  • 解包必须有理由,如上面的矩阵中所定义。
  • 操作系统必须允许解包过程将恶意文件放在指定位置。
  • 必须执行或使用恶意文件。

原因可以描述为信任链中的漏洞。添加依赖项确实意味着您信任它,但也意味着您信任所有间接依赖项。如果没有信任,最好不要添加该依赖项。