网管联盟 | 网管论坛 | 网管u家 | 网管博客 | 网管软件 | 网管求职 | 小游戏 | 网管搜索 | 网管原创 | 网管聚合 | 网管读摘 | 网管焦点 | 世界素材 | 会员投稿 | 会员中心 
中国网管联盟
Windows Linux Cisco 网络技术 数据库 黑客攻防 DotNet Java PHP 认证 新闻资讯 服务器 存储资讯 网络设备 网管学堂 技术专题 焦点 网吧频道
 当前位置: > bitsCN.com > 网络攻防 > 安全漏洞 > Microsoft > yaSSL多个远程溢出及无效内存访问漏洞  

yaSSL多个远程溢出及无效内存访问漏洞

2008-01-08  作者:bitsCN整理  来源:中国网管联盟  点评 投稿 收藏

涉及程序:
yaSSL
 
描述:
yaSSL多个远程溢出及无效内存访问漏洞
 
详细:
yaSSL是用于实现SSL的开源软件包。
网管网www_bitscn_com

yaSSL实现上存在多个远程溢出及无效内存访问问题,远程攻击者可能利用此漏洞控制服务器。 网管bitscn_com

-------------------------------------------
A] ProcessOldClientHello缓冲区溢出
-------------------------------------------
中国网管论坛bbs.bitsCN.com

用于包含客户端所接收的Hello报文中的数据的缓冲区结构如下(源自yassl_imp.hpp): 中国网管联盟bitsCN.com

class ClientHello : public HandShakeBase {
   ProtocolVersion   client_version_;
   Random         random_;
   uint8          id_len_;                 // session id length
   opaque         session_id_[ID_LEN];
   uint16         suite_len_;               // cipher suite length
   opaque         cipher_suites_[MAX_SUITE_SZ];
   uint8          comp_len_;               // compression length
   CompressionMethod  compression_methods_;

网管u家u.bitscn@com

   ...

网管u家u.bitscn@com

这里ID_LEN长度为32个单元,MAX_SUITE_SZ为64,RAN_LEN (Random)为32。如果接收到了旧版的Hello报文的话,所调用的ProcessOldClientHello函数没有执行必要的检查来限制填充上述3个字段的数据数量,导致缓冲区溢出漏洞。 网管论坛bbs_bitsCN_com

以下是handshake.cpp中的漏洞代码:

网管下载dl.bitscn.com

void ProcessOldClientHello(input_buffer& input, SSL& ssl)
   ...
   ClientHello ch;
   ...
   for (uint16 i = 0; i < ch.suite_len_; i += 3) {  
     byte first = input[AUTO];
     if (first) // sslv2 type
        input.read(len, SUITE_LEN); // skip
     else {
        input.read(&ch.cipher_suites_[j], SUITE_LEN);
        j += SUITE_LEN;
     }
   }
   ch.suite_len_ = j;
中国网管论坛bbs.bitsCN.com

   if (ch.id_len_)
     input.read(ch.session_id_, ch.id_len_);
网管网www.bitscn.com

   if (randomLen < RAN_LEN)
     memset(ch.random_, 0, RAN_LEN - randomLen);
   input.read(&ch.random_[RAN_LEN - randomLen], randomLen);
   ...

中国网管联盟bitsCN.com

------------------------------------------------
B] input_buffer& operator>>缓冲区溢出
------------------------------------------------

网管bitscn_com

用于处理Hello报文的函数中存在另一个缓冲区溢出,但基本不太可能利用这个溢出执行代码。以下是yassl_imp.cpp中的漏洞代码: 网管u家u.bitsCN.com

input_buffer& operator>>(input_buffer& input, ClientHello& hello)
   ...
   hello.id_len_ = input[AUTO];
   if (hello.id_len_) input.read(hello.session_id_, ID_LEN);
  
   // Suites
   byte tmp[2];
   tmp[0] = input[AUTO];
   tmp[1] = input[AUTO];
   ato16(tmp, hello.suite_len_);
   input.read(hello.cipher_suites_, hello.suite_len_);
   ...

网管联盟bitsCN_com

-----------------------------------------------------
C] HASHwithTransform::Update无效内存访问
-----------------------------------------------------

网管联盟bitsCN@com

在Hello报文中使用了过大的大小值会由于越界读取内存而导致函数库崩溃。以下是hash.cpp中的漏洞代码: 网管bitscn_com

void HASHwithTransform::Update(const byte* data, word32 len)
{
   // do block size increments
   word32 blockSz = getBlockSize();
   byte* local  = reinterpret_cast<byte*>(buffer_);

网管论坛bbs_bitsCN_com

   while (len) {
     word32 add = min(len, blockSz - buffLen_);
     memcpy(&local[buffLen_], data, add);
     ...
网管u家u.bitsCN.com

<*来源:Luigi Auriemma (aluigi@pivx.com)

网管u家u.bitsCN.com

链接:http://marc.info/?l=bugtraq&m=119947165230177&w=2
     http://marc.info/?l=bugtraq&m=119947352300598&w=2
*>
网管下载dl.bitscn.com

受影响系统:
yaSSL yaSSL <= 1.7.5
网管u家u.bitscn@com



TAGs   内存   访问   漏洞   无效   溢出   多个   远程       ...   //   input      
 上一篇:Georgia SoftWorks SSH2 Server多个远程代码执行漏洞   下一篇:Pragma Systems FortressSSH msvcrt.dll异常处理远程拒绝服务漏洞
yaSSL多个远程溢出及无效内存访问漏洞 评论:
loading.. 评论加载中…
评论:请自觉遵守互联网相关政策法规,评论不得超过250字。

验证码: 注册用户
本类热门排行:
最新推荐文章:
网管论坛交流: