BUGTRAQ ID: 25831
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])。
OpenSSL Project OpenSSL 0.9.7m - 0.9.8e
目前厂商还没有提供补丁或者升级程序,我们建议使用此软件的用户随时关注厂商的主页以获取最新版本:
<a href="http://www.openssl.org/" target="_blank">http://www.openssl.org/</a>
暂无评论