哈喽,大家好,我是强哥。
昨天,最受欢迎的开源轻量级 Java 框架 Spring 被曝存在高危的 RCE(远程控制设备) 零日漏洞 ,北京大学计算中心、外媒 praetorian 、 bleepingcomputer 等站点对该漏洞进行了报道。
炒作
强哥也看到了很多媒体疯狂报道此事,根据网上疯传的介绍,该 RCE 漏洞源于 Spring 框架核心的 SerializationUtils#dserialize 方法,该方法基于 Java 的序列化与反序列机制,可导致远程代码执行 (RCE),使用 JDK9 及以上版本皆有可能受到影响。
如果确实存在,那么这个 Spring 框架 RCE 漏洞的影响将远超此前的 Log4j 或 Heartbleed ,但强哥在翻了一整天,也没有看到谁能真正复现此漏洞(没有完整的 Poc)。所有内容千篇一律:
- WAF临时策略
- 临时缓解措施
GitHub 上倒是有很多命名为 Spring core RCE 的新仓库,但也基本都是“懂的都懂”的谜语描述,没有真正的干货内容。
不过,强哥也看到好多原来披露漏洞的文章,现在页面404了。
另一种声音
具体404的原因可能和下面的描述有关。
早在 2 月 19 日 Spring 框架的仓库就出现过对该 SerializationUtils 方法的讨论,开发者 ledoyen 就指出:基于 Java 的序列化机制,SerializationUtils#dserialize 可能导致 RCE 远程代码执行漏洞,因此他提出了弃用 SerializationUtils#dserialize 的 PR #28075 :
有人询问在该 PR 下询问“SerializationUtils#dserialize 是否应该作为漏洞报道”时, ledoyen 也进行解释:
SerializationUtils#dserialize本身不是漏洞,使用此工具处理用户输入数据可能会导致 CVE,但该方法在内部作为缓存结果拦截器( CacheResultInterceptor) 使用的话,则不会导致任何漏洞。
目前, SerializationUtils#dserialize在 Spring Framework 6.0 中已弃用,而对于 5.3.x 版本,则是向 Javadoc 中添加针对 SerializationUtils 工具类的警告,以提高用户的警觉意识。
到底有没有漏洞
首先我们来看下GitHub上在spring-framework上提出漏洞的issue吧:
我们可以看到,目前该issue的状态已经被设置为close-invalid,不过到底是否是漏洞,作者也有让提出该issue的人将漏洞提到 https://spring.io/security-policy
上。而具体的漏洞是否存在,还是需要等待后续官方披露。
当然,我们要怎么确定到底官方是否公布了漏洞呢?
Spring官方的具体漏洞披露地址如下:
从上可以看出,暂时官方博客的最新漏洞公告是 CVE-2022-22963:Spring 表达式资源访问漏洞 和 CVE-2022-22950:Spring 表达式 DoS 漏洞 ,但这两个漏洞的严重程度都是中等,还未披露网传 Spring 核心框架的 RCE 高危漏洞。
而强哥上篇推文提到的漏洞:Spring Cloud Function现SPEL 表达式漏洞,SPEL 表达式到底是个啥?,就可以在这里找到:
感兴趣的小伙伴可以持续关注这个地址,如果确认是漏洞,官方应该会第一时间说明。
强哥有话说
可以说,漏洞问题确实非常容易拉紧人们的神经。就如上次的log4j的漏洞,导致很多人连夜升级版本,而且还是多次。
可是,对于漏洞本身,我们还是需要有足够的辨识能力,如果真的对切身有关,同时有人真的提出了复现漏洞的方式,不妨跟着重现一下,这样,在确认漏洞的同时,自己也能从中学到许多。
后续该漏洞的进展,强哥也会持续跟进。