7eae95cd-2917-eb11-8da9-e4434bdf6706.png

TL;DR

如果你的应用使用了JDK原生的HTTPS实现来处理HTTPS连接(例如Tomcat容器处理443端口上的HTTPS连接),并且开启了SSL双向验证(Two-Way SSL authentication),那么你就需要额外关注Oracle将于2020年1月14日发布的例行安全更新,其中包含了一个对CVE-2020-2654漏洞的补丁。这个漏洞影响所有的JDK版本,允许攻击者通过恶意构造的HTTPS请求耗尽服务器内存(DoS攻击,视频附后),由于这个漏洞位于JDK的HTTPS实现底层,除更新JDK外,没有其他方法规避。

由于安全补丁尚未发布,CVE-2020-2654漏洞的评级暂时不可见。但是在Oracle发给我的邮件中,该漏洞的等级是关键(Critical):

80ae95cd-2917-eb11-8da9-e4434bdf6706.png

这个漏洞的POC代码和proposed fix由我在2019年8月报告给Oracle。因为它和大名鼎鼎的心脏出血漏洞非常像,都是在SSL握手阶段过于相信用户的输入而缺少必要的校验,因此我给它取名为「心碎」漏洞(heartbreak)。

由于补丁尚未发布,我还不能披露漏洞的具体细节,可以披露的是,JDK的HTTPS实现犯了一个被前人犯过无数遍的错误——过于相信用户的输入,如果攻击者在SSL握手阶段精心构造一个恶意请求,可以在极短时间内耗尽Java服务器的堆内存,形成拒绝服务攻击。同时,因为这个漏洞发生在SSL握手阶段,将不会在应用服务器日志内留下任何信息,也没有任何workaround。

这个漏洞的影响范围相对较小,只影响开启了SSL双向验证(Two-Way SSL Authentication)的Java HTTPS服务器。在一些安全性要求极高的场合,服务器会开启SSL双向验证。讽刺的是,这个漏洞只影响这种对安全性要求更高的服务器。

下面视频演示了利用恶意构造的HTTPS请求,在一分钟之内耗尽一台Java HTTPS服务器的所有堆内存。

82ae95cd-2917-eb11-8da9-e4434bdf6706.png
https://www.zhihu.com/video/1199378031502135296
Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐