安全研究

安全漏洞
OpenSSL SSL_get_shared_ciphers()函数单字节溢出漏洞

发布日期:2007-09-27
更新日期:2007-09-28

受影响系统:
OpenSSL Project OpenSSL 0.9.7m - 0.9.8e
描述:
BUGTRAQ  ID: 25831
CVE(CAN) ID: CVE-2007-5135

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

OpenSSL的SSL_get_shared_ciphers()函数中存在单字节溢出漏洞,远程攻击者可能利用此漏洞控制服务器。

ssl/ssl_lib.c文件中漏洞代码如下:

    p=buf;
    sk=s->session->ciphers;
    for (i=0; i<sk_SSL_CIPHER_num(sk); i++)
            {
            /* Decrement for either the ':' or a '\0' */
            len--;                        [4]
            c=sk_SSL_CIPHER_value(sk,i);
            for (cp=c->name; *cp; )
                    {
                    if (len-- <= 0)                [1]
                            {
                            *p='\0';            [5]
                            return(buf);
                            }
                    else
                            *(p++)= *(cp++);        [2]
                    }
            *(p++)=':';                    [3]
            }
    p[-1]='\0';
    return(buf);

如果要触发单字节溢出,只需要用密码字符串填充缓冲区,使得len == 1且cp指向当前密码字符串的最后一个字符,然后内部for()循环的最后一轮会在[1]将len递减到0,将当前密码字符串的最后一个字节写入到缓冲区([2]),增加p指向到缓冲区的最后空闲字节。之后用“:”分隔符填充最后的空闲字节,增加p指向缓冲区后一个字节。现在如果仍有密码的话,就会再次陷入外部循环,在[4]将len减少到-1然后在[1]再次执行检查。这一次检查为真,终止的\0字节在返回前写入到缓冲区后一个字节([5])。

<*来源:Moritz Jodeit (moritz@jodeit.org
  
  链接:http://marc.info/?l=bugtraq&m=119091888624735&w=2
        http://secunia.com/advisories/27394/
        http://sunsolve.sun.com/pub-cgi/retrieve.pl?doctype=coll&doc=secbull/Alert-103130&type=0&nav=sec.sba
*>

建议:
厂商补丁:

OpenSSL Project
---------------
目前厂商还没有提供补丁或者升级程序,我们建议使用此软件的用户随时关注厂商的主页以获取最新版本:

http://www.openssl.org/

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