项目介绍
Hutool是一个小而全的Java工具类库,通过静态方法封装,降低相关API的学习成本,提高工作效率,使Java拥有函数式语言般的优雅,让Java语言也可以“甜甜的”。
Hutool中的工具方法来自每个用户的精雕细琢,它涵盖了Java开发底层代码中的方方面面,它既是大型项目开发中解决小问题的利器,也是小型项目中的效率担当;
Hutool是项目中“util”包友好的替代,它节省了开发人员对项目中公用类和公用工具方法的封装时间,使开发专注于业务,同时可以最大限度的避免封装不完善带来的bug。
项目地址
https://gitee.com/dromara/hutool
漏洞概述
Hutool 中的XmlUtil.readObjectFromXml方法直接封装调用XMLDecoder.readObject解析xml数据,如果开发者未对用户输入的XML字符串进行安全检查并直接通过readObjectFromXml处理,那么攻击者通过提供恶意的XML字符串将造成任意代码执行。
影响版本
cn.hutool:hutool-core@(-∞,5.8.11]
环境搭建
直接导入5.8.11版本的hutool工具库即可
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.8.11</version>
</dependency>
漏洞复现
漏洞分析
readObjectFromXml方法如下
通过下面代码可知,readObjectFromXml方法直接封装了java.beans.XMLDecoder#readObject
java.beans.XMLDecoder#readObject是java 自带的方法,其实xmldecoder反序列化的问题最早在2013年就被提出了,这里不在深究漏洞原理。理论上在JDK 1.4~JDK 11中都存在反序列化漏洞安全风险。历史上因为该方法产生了多个漏洞,如CVE-2017-3506、CVE-2017-10271、CVE-2019-2729等。
hutool组件目前被广泛使用,gitee star已有19.7k。目前hutool官方没有发布补丁,仅在注释中提示了安全隐患,因此该漏洞将长期存在,因此使用了hutool组件的开发者需要自行排查是否存在该漏洞。
但值得注意的是,使用存在漏洞的hutool组件并不会直接造成漏洞,因此不必过于惊慌。只有直接使用readObjectFromXml方法来处理用户提交的数据才会导致代码执行。
修复方式
官方暂未发布补丁,如果直接使用readObjectFromXml方法来处理用户提交的数据,建议用户对输入的XML数据添加安全校验
参考链接
https://nvd.nist.gov/vuln/detail/CVE-2023-24162
https://gitee.com/dromara/hutool/issues/I6AEX2
查看更多安全漏洞:快速查询安全漏洞 | 柒巧板