漏洞概述:
攻击者可以通过发送一个空记录,从而在调用SSL_peek()函数时,会进入到一个死循环当中,程序不能继续执行,引起拒绝服务。OpenSSL 1.1.0 SSL/TLS将对SSL_peek()在通话过程中,如果对方发送一个空记录。这可能是由恶意的同行在拒绝服务被利用攻击。
OpenSSL的1.1.0的用户应该升级到1.1.0a
严重程度:中
影响版本:
OpenSSL Project OpenSSL < 1.1.0a
不受影响:
OpenSSL Project OpenSSL 1.1.0a
漏洞危害:
如果攻击者发送一个空记录,程序在调用SSL_peek()时,进入一个死循环,造成拒绝服务攻击。
漏洞详情:
- 漏洞成因:原来SSL_peek()函数代码如下:
if (!peek) {
SSL3_RECORD_sub_length(rr, n);
SSL3_RECORD_add_off(rr, n);
- 从上面的代码可以看到,如果peek为空,!peek则为真,然后进入代码段中,直接进行sub和add等运算,这样就会进入到一个死循环当中,程序不能继续执行。
官方公布的修复代码,代码会对读取的记录rr进行长度计算,如果为0,则重新读取下一个记录,从而保证程序顺利进行。
修复建议:
升级到最新版本,官方发布版本更新链接:
https://www.openssl.org/source/
各个供应商获得软件更新链接:
Debian:https://security-tracker.debian.org/tracker/CVE-2016-6305
Ubuntu:http://www.ubuntu.com/usn/usn-3087-1/
FreeBSD:https://www.freebsd.org/security/advisories/FreeBSD-SA-16:26.openssl.asc
Redhat/CentOS:https://access.redhat.com/security/cve/CVE-2016-6305
参考文章: