Hutool路径遍历漏洞(CVE-2018-17297)分析报告

原文链接: https://mp.weixin.qq.com/s?__biz=Mzg4Nzk3MTg3MA==&mid=2247488477&idx=1&sn=bfde8c4971f0b8b052a8eb97550e957a

Hutool路径遍历漏洞(CVE-2018-17297)分析报告

原创 洞源实验室 洞源实验室 2025-07-17 07:30

一、漏洞概述

1.1 漏洞基本信息

漏洞编号:CVE-2018-17297

漏洞类型:CWE-22路径遍历

CVSS评分:7.5(CVSS v3.1)

危害等级:高危

影响组件:Hutool Java工具库

影响版本:Hutool < 4.1.12

发现时间:2018年

修复状态:已修复(4.1.12 版本后)

1.2 背景介绍

Hutool是一款轻量级、功能强大的开源Java工具库,提供了丰富的工具方法和组件,用于简化Java开发过程中的常见任务和操作。它的目标是提供简洁、易用且高效的API,让开发人员能够更快速地编写高质量的Java代码。

然而,其提供的ZipUtil类中的unzip()函数在早期版本中存在路径遍历(Zip Slip)漏洞,攻击者可借助精心构造的压缩包,实现任意文件写入,造成严重安全后果。

二、漏洞详情

2.1 漏洞成因

在解压ZIP文件的过程中,ZipUtil.unzip() 函数未对压缩包中包含的文件路径进行规范化与越界路径检测,导致攻击者可通过构造如../../../../etc/passwd等路径,在解压时将文件写入任意系统目录。

这类问题归类为路径遍历漏洞(CWE-22),类似这样的漏洞也被统称为Zip Slip,于
2018

6
月由
Snyk
公司披露,这类漏洞通过使用精心制作的存有目录遍历文件名(例如../../evil.sh)的归档文件来加以利用,可能会影响多种归档格式,包括tar、jar、war、cpio、apk、rar和7z。

2.2 漏洞影响

攻击者可通过上传或诱导用户解压特制的恶意Zip文件,实现以下攻击效果:
– 覆盖服务器敏感文件(如 /etc/passwd

  • 向Web根目录写入恶意网页(如篡改 index.html

  • 植入WebShell或持久化后门

  • 进一步进行远程代码执行(RCE)或系统提权

只要使用了早期版本(
<4.1.12
版本)的Hutool并在组件使用中用到ZipUtil.unzip()进行解压,系统便存在被攻击的风险。

三、漏洞利用分析

3.1 漏洞利用前提
1. 应用使用了Hutool工具库且版本小于4.1.12;

  1. 使用了 ZipUtil.unzip() 或相关未校验路径的解压接口;

  2. 攻击者可以控制或提供ZIP文件内容。

3.2 恶意压缩包构造

Windows系统不允许直接创建含../的路径文件名,但可使用以下Python脚本构造带有路径穿越的压缩包:

Hutool路径遍历漏洞(CVE-2018-17297)分析报告

该脚本创建一个包含两个文件的压缩包:
../../../../etc/passwd:模拟覆盖系统密码文件;

  • ../index.html:模拟覆盖Web根目录的首页文件。

Hutool路径遍历漏洞(CVE-2018-17297)分析报告

3.3 利用步骤

  1. 使用上方脚本生成名为 evil.zip 的压缩包;

  2. 在目标Java应用中调用标红的代码解压该压缩包,以下是完整示例代码:

Hutool路径遍历漏洞(CVE-2018-17297)分析报告

  1. 上述代码执行后,会根据压缩包中的两个文件名的放置到穿越后的目录下,如果有同名文件存在,则可被覆盖。

Hutool路径遍历漏洞(CVE-2018-17297)分析报告

Hutool路径遍历漏洞(CVE-2018-17297)分析报告

3.4 利用结果

若系统权限设置不当,或解压目录与敏感路径重合,将导致文件被恶意替换。例如:
/etc/passwd 被篡改,造成身份认证异常;

  • /var/www/html/index.html 被替换为恶意内容,网站主页被劫持;

  • 执行目录中植入 .jsp/.php WebShell 文件,供远程控制使用。

四、漏洞修复方案

Hutool官方在4.1.12版本中修复了该漏洞,根据漏洞原理和修复方案,可以采取以下任一方式修复该漏洞:

  1. 升级

Hutool至安全版本(推荐)

升级到Hutool 4.1.12或更高版本。新版本的ZipUtil中通过调用FileUtil.file()方法创建文件,自动加入安全校验逻辑,防止路径穿越。

核心原理是使用新增的FileUtil替代原先的File对象。

Hutool路径遍历漏洞(CVE-2018-17297)分析报告

FileUtil
创建File对象的时候会调用checkSlip函数,该函数通过获取传入文件的规范路径来消除路径的冗余和符号链接,然后检查file的规范路径是否以parentFile的规范路径开头,如果不是,则说明file不在parentFile目录下,将抛出异常;如果在,则返回file本身。这是一种安全性检查,以确保文件在指定的父目录下,防止越界访问。

Hutool路径遍历漏洞(CVE-2018-17297)分析报告

此方法推荐通过构建工具如Maven/Gradle统一升级组件,避免手动更新出现维护负担。

  1. 手动添加路径校验代码(适用于不便升级项目)

第一种修复方案的本质是对解压文件内的文件名进行了校验,所以也可以通过自己实现相关校验代码避免漏洞的产生。如果组件版本升级困难(如老项目中依赖限制),可参考如下代码,在解压逻辑中加入路径规范性校验:

String canonicalDestPath = destinationDir.getCanonicalPath();
File destFile = new File(destinationDir, zipEntry.getName());
String canonicalFilePath = destFile.getCanonicalPath();
if (!canonicalFilePath.startsWith(canonicalDestPath + File.separator)) {
 throw new SecurityException(&#34;Zip Entry is outside of the target dir: &#34; + zipEntry.getName());
}

此代码会阻止任何尝试越出解压目录的Zi
p
文件内容写入,是应对Zip Slip攻击的常见方式。

  1. 降权操作系统用户权限(缓解措施)

在无法直接升级或修复代码的场景中,可以通过创建权限受限的系统用户来执行解压操作,控制其文件系统访问范围。例如:
– 禁止写入 /etc, /var/www 等敏感目录;

  • 将应用运行在容器内隔离执行环境;

  • 配合 AppArmor、SELinux 等机制限制文件访问权限。

五、风险评估与建议

漏洞等级:高危

攻击门槛:中等(需控制 ZIP 内容)

利用影响:可覆盖任意文件、破坏系统完整性

漏洞广泛性:高(Hutool 在国内项目中使用广泛)

修复难度:低(升级组件或增加简单路径校验)

推荐处置方式:立即升级组件,或手动修复源码并加强权限隔离

六、参考资料
Hutool 官方 GitHub 仓库

七、附录:Hutool常见使用场景概览

Hutool作为Java工具库广泛用于以下开发场景:
– Web开发:参数解析、HTTP 客户端、加密签名等;

  • 数据处理:字符串操作、正则表达式、文件读写;

  • 系统工具开发:配置文件解析、系统信息获取、日志记录;

  • 测试与调试:Mock 数据生成、命令行工具辅助、调试打印等。

在使用过程中需注意:虽然 Hutool 提供了高度封装的便捷方法,但应始终保持安全意识,尤其在涉及文件读写、网络通信、加解密等安全敏感功能时,审慎使用。