1.漏洞相关信息
漏洞名称:Hutool任意文件覆盖漏洞
漏洞编号:CVE-2018-17297
漏洞描述:攻击者可以恶意构造Zip压缩文件,通过路径遍历覆盖任意文件,是“任意文件覆盖”和“目录遍历”问题的结合,攻击者可以将文件解压缩到正常解压缩路径之外并覆盖敏感文件
漏洞原理:zipEntry.getName()创建新文件时未做校验,如果攻击者通过上传目录中带有../的恶意zip文件,即可c穿越路径覆盖文件
2.环境搭建
Libraries:
1 | <dependency> |
ZipController.java
1 | package com.vulnerability.controller; |
3.漏洞分析
在hutool-all-4.1.11.jar!cn/hutool/core/util/ZipUtil.class
我们可以看到unzip
这个函数分别有三个参数,分别代表
- zipFile:表示需要解压的压缩文件
- outFile:压缩文件解压到的目录
- charset:表示编码的格式
而在第204行可以看到解压的目录在创建时,文件名是直接使用的zipEntry.getName(),没有进行校验,那么我们的zip文件可以包含../
等目录穿越字符
此问题和Spring Integration Zip不安全解压漏洞相似,可以参考https://www.sqyysec.com/Spring-Integration-Zip不安全解压(CVE-2018-1261)漏洞分析/
4.漏洞修复
在hutool-all-4.1.12.jar!cn/hutool/core/io/FileUtil.class添加了一个checkSlip的安全检测方法,方法中检查父完整路径是否为自路径的前半部分,如果不是则说明不是子路径,可能存在slip注入。