发生ssl错误 无法建立到该服务器的安全连接_Java HTTPS 「心碎」安全漏洞
TL;DR 如果你的应用使用了JDK原生的HTTPS实现来处理HTTPS连接(例如Tomcat容器处理443端口上的HTTPS连接),并且开启了SSL双向验证(Two-Way SSL authentication),那么你就需要额外关注Oracle将于2020年1月14日发布的例行安全更新,其中包含了一个对CVE-2020-2654漏洞的补丁。这个漏洞影响所有的JDK版本,允许攻击者通过恶意构造的
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):
这个漏洞的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服务器的所有堆内存。
更多推荐
所有评论(0)