Spring 框架存在高危 RCE 零日漏洞?核心开发者澄清
近日,最受欢迎的开源轻量级 Java 框架 Spring 被曝存在高危的 RCE(远程控制设备) 零日漏洞,北京大学计算中心、外媒praetorian、bleepingcomputer等站点对该漏洞进行了报道。
据网上疯传的介绍,该RCE 漏洞源于Spring框架核心的SerializationUtils#dserialize方法,该方法基于 Java 的序列化与反序列机制,可导致远程代码执行 (RCE),使用JDK9 及以上版本皆有可能受到影响。 正在紧急修复?
从 Spring 项目的 Git 提交记录来看,在漏洞消息疯传的同时, Spring 开发者似乎在紧急处理漏洞相关的代码,比如 3 月29 日的新提交:弃用 SerializationUtils#deserialize。
在这个敏感的时间点,该提交引了一些紧张情绪,很多用户在该提交下面留言,询问该提交的代码改动是否与网传的 0day RCE 漏洞相关?而Spring核心开发者之一sbrannen对此作出澄清:
弃用 SerializationUtils#deserialize 跟目前所有的漏洞都没有关系。
此提交的目的是通知使用过SerializationUtils#deserialize的用户:从不受信任的来源反序列化对象是危险的。
Spring核心框架不会使用 SerializationUtils 反序列化来自不受信任来源的对象。
事实上,早在 2 月 19 日 Spring 框架的仓库就出现过对该SerializationUtils方法的讨论,开发者ledoyen就指出:基于 Java 的序列化机制,SerializationUtils#dserialize可能导致 RCE 远程代码执行漏洞,因此他提出了弃用SerializationUtils#dserialize的PR#28075:
由此看来,前面的提交是 ledoyen 针对该 PR 的一次代码合并,弃用SerializationUtils#dserialize也是计划之内的事情。有人询问在该 PR 下询问“SerializationUtils#dserialize是否应该作为漏洞报道”时, ledoyen 也进行解释:
SerializationUtils#dserialize本身不是漏洞,使用此工具处理用户输入数据可能会导致 CVE,但该方法在内部作为缓存结果拦截器( CacheResultInterceptor) 使用的话,则不会导致任何漏洞。
目前,SerializationUtils#dserialize在 Spring Framework 6.0 中已弃用,而对于 5.3.x 版本,则是向 Javadoc 中添加针对 SerializationUtils 工具类的警告,以提高用户的警觉意识。
漏洞炒作!
如果确实存在,那么这个 Spring 框架 RCE 漏洞的影响将远超此前的 Log4j 或 Heartbleed ,但小编翻了一整天,也没有看到谁能真正复现此漏洞(没有完整的 Poc ,基本是开局一张马赛克图,漏洞细节全靠编)。
GitHub 上倒是有很多命名为Spring core RCE 的新仓库,但也基本都是“懂的都懂”的谜语描述,没有真正的干货内容。
目前为数不多的详细PoC 还是故意先按 Spring 文档明确反对的用法引入易受攻击的代码,再进行漏洞攻击 …而据郑州网络安全协会报道,甚至还有人打着 Poc 的幌子钓鱼…
截至发稿时间,Spring 团队没有对该漏洞发表任何官方公告:官方博客的最新漏洞公告是CVE-2022-22963:Spring 表达式资源访问漏洞和CVE-2022-22950:Spring 表达式 DoS 漏洞,但这两个漏洞的严重程度都是中等,无法与网传 Spring 核心框架的RCE 高危程度相比。
更新:
有热心网友联系作者,称其已掌握完整复现漏洞的 PoC 和 ExP,可证明漏洞确实存在。但因该漏洞影响太大,在官方发出公告前不宜公开更多细节。
[图文来源于网络,如有侵权,请联系删除]