发生ssl错误 无法建立到该服务器的安全连接_Java HTTPS 「心碎」安全漏洞

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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值