安全研究

安全漏洞
OpenSSL多个拒绝服务漏洞

发布日期:2008-05-28
更新日期:2008-05-29

受影响系统:
OpenSSL Project OpenSSL 0.9.8g
OpenSSL Project OpenSSL 0.9.8f
不受影响系统:
OpenSSL Project OpenSSL 0.9.8h
描述:
BUGTRAQ  ID: 29405
CVE(CAN) ID: CVE-2008-0891,CVE-2008-1672

OpenSSL是一种开放源码的SSL实现,用来实现网络通信的高强度加密,现在被广泛地用于各种网络应用程序中。

OpenSSL在处理畸形的连接时存在漏洞,远程攻击者可能利用此漏洞导致服务器程序崩溃。

当用以下命令行运行OpenSSL时:

openssl s_server -key path_to_key \
-cert path_to_certificate \
-www `openssl ciphers 'ALL:COMPLEMENTOFALL'`

如果接收到的Client Hello报文中服务器名称扩展将server_name设置为0x00且名称长度为1,则程序在325行的ssl/t1_lib.c文件检测到错误的主机名并结束握手,之后试图释放已经释放的指针,导致OpenSSL出现分段错误崩溃。openssl程序默认不允许处理TLS扩展,必须在编译时明确地启用。

在用以下命令行运行openssl时:

openssl s_client -connect localhost:4433 -cipher \
`openssl ciphers 'ALL:COMPLEMENTOFALL'` -debug -msg

openssl向服务器发送Client Hello消息,服务器用Server Hello消息响应(选择了TLS_DH_ANON_WITH_RC4_128_MD5密码组),然后是Server Hello Done消息(忽略Server Key Exchange消息)。ssl3_get_key_exchange()允许忽略Server Key Exchange消息,但s->session->sess_cert为空且ssl3_get_server_done()没有执行任何检查,客户端状态机器继续执行到ssl3_send_client_key_exchange()且没有检查s->session->sess_cert的有效性便试图引用(s3_clntl.c:1970)。如果客户端使用特殊的密码组连接到了恶意的服务器,服务器就会导致客户端崩溃。

<*来源:Codenomicon
  
  链接:http://secunia.com/advisories/30405/
        http://www.openssl.org/news/secadv_20080528.txt
        http://cert.fi/haavoittuvuudet/2008/advisory-openssl.html
        http://security.gentoo.org/glsa/glsa-200806-08.xml
*>

建议:
厂商补丁:

OpenSSL Project
---------------
目前厂商已经发布了升级补丁以修复这个安全问题,请到厂商的主页下载:

http://www.openssl.org/source/openssl-0.9.8h.tar.gz

Gentoo
------
Gentoo已经为此发布了一个安全公告(GLSA-200806-08)以及相应补丁:
GLSA-200806-08:OpenSSL: Denial of Service
链接:http://security.gentoo.org/glsa/glsa-200806-08.xml

所有OpenSSL用户都应升级到最新版本:

    # emerge --sync
    # emerge --ask --oneshot --verbose ">=dev-libs/openssl-0.9.8g-r2"

浏览次数:2845
严重程度:0(网友投票)
本安全漏洞由绿盟科技翻译整理,版权所有,未经许可,不得转载
绿盟科技给您安全的保障