OpenSSL双重释放漏洞 CVE-2008-0891 CNNVD-200805-364

4.3 AV AC AU C I A
发布: 2008-05-29
修订: 2023-11-07

OpenSSL是OpenSSL团队开发的一个开源的能够实现安全套接层(SSL v2/v3)和安全传输层(TLS v1)协议的通用加密库,它支持多种加密算法,包括对称密码、哈希算法、安全散列算法等。 当TLS服务器名称扩展启用时,OpenSSL 0.9.8f和0.9.8g在处理畸形连接时存在双重释放漏洞。远程攻击者可借助畸形Client Hello包导致拒绝服务(崩溃)。 当用以下命令行运行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)。如果客户端使用特殊的密码组连接到了恶意的服务器,服务器就会导致客户端崩溃。

0%
暂无可用Exp或PoC
当前有2条受影响产品信息