安全研究

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

发布日期:2008-01-04
更新日期:2008-01-07

受影响系统:
yaSSL yaSSL <= 1.7.5
描述:
BUGTRAQ  ID: 27140
CVE(CAN) ID: CVE-2008-0226,CVE-2008-0227

yaSSL是用于实现SSL的开源软件包。

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

-------------------------------------------
A] ProcessOldClientHello缓冲区溢出
-------------------------------------------

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

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_;
    ...

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

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

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;

    if (ch.id_len_)
        input.read(ch.session_id_, ch.id_len_);

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

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

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

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_);
    ...

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

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

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

    while (len) {
        word32 add = min(len, blockSz - buffLen_);
        memcpy(&local[buffLen_], data, add);
        ...

<*来源:Luigi Auriemma (aluigi@pivx.com
  
  链接:http://marc.info/?l=bugtraq&m=119947165230177&w=2
        http://marc.info/?l=bugtraq&m=119947352300598&w=2
        http://secunia.com/advisories/28324/
        http://secunia.com/advisories/28419/
        http://www.debian.org/security/2008/dsa-1478
*>

测试方法:

警 告

以下程序(方法)可能带有攻击性,仅供安全研究与教学之用。使用者风险自负!

http://aluigi.org/poc/mysqlo.zip

建议:
厂商补丁:

Debian
------
Debian已经为此发布了一个安全公告(DSA-1478-1)以及相应补丁:
DSA-1478-1:New mysql-dfsg-5.0 packages fix several
链接:http://www.debian.org/security/2008/dsa-1478

补丁下载:
Source archives:

http://security.debian.org/pool/updates/main/m/mysql-dfsg-5.0/mysql-dfsg-5.0_5.0.32.orig.tar.gz
Size/MD5 checksum: 16439441 f99df050b0b847adf7702b44e79ac877
http://security.debian.org/pool/updates/main/m/mysql-dfsg-5.0/mysql-dfsg-5.0_5.0.32-7etch5.diff.gz
Size/MD5 checksum:   165895 05351b7ac0547d3666828c7eba89ee18
http://security.debian.org/pool/updates/main/m/mysql-dfsg-5.0/mysql-dfsg-5.0_5.0.32-7etch5.dsc
Size/MD5 checksum:     1117 7d6a184cf5bda53d18be88728a0635c4

Architecture independent packages:

http://security.debian.org/pool/updates/main/m/mysql-dfsg-5.0/mysql-client_5.0.32-7etch5_all.deb
Size/MD5 checksum:    45636 c2d87b9755088b3a67851dc4867a67f8
http://security.debian.org/pool/updates/main/m/mysql-dfsg-5.0/mysql-server_5.0.32-7etch5_all.deb
Size/MD5 checksum:    47716 5c9311fc2072be8336424c648497303e
http://security.debian.org/pool/updates/main/m/mysql-dfsg-5.0/mysql-common_5.0.32-7etch5_all.deb
Size/MD5 checksum:    53944 3a16dd0a2c795cf7e906c648844a9779

alpha architecture (DEC Alpha)

http://security.debian.org/pool/updates/main/m/mysql-dfsg-5.0/libmysqlclient15-dev_5.0.32-7etch5_alpha.deb
Size/MD5 checksum:  8912752 826f18c201582262ee622ed9e470a915
http://security.debian.org/pool/updates/main/m/mysql-dfsg-5.0/libmysqlclient15off_5.0.32-7etch5_alpha.deb
Size/MD5 checksum:  1950712 47215338ef678adf7ca6f80d9d60613e
http://security.debian.org/pool/updates/main/m/mysql-dfsg-5.0/mysql-client-5.0_5.0.32-7etch5_alpha.deb
Size/MD5 checksum:  8407802 e6e87a2edaf5f0405473fb3f5c859b3f
http://security.debian.org/pool/updates/main/m/mysql-dfsg-5.0/mysql-server-5.0_5.0.32-7etch5_alpha.deb
Size/MD5 checksum: 27365718 f83e12f0f36c31b4dbd64ab7b1b6f01d
http://security.debian.org/pool/updates/main/m/mysql-dfsg-5.0/mysql-server-4.1_5.0.32-7etch5_alpha.deb
Size/MD5 checksum:    47748 91489bb86084a9f6026c6156a4a5faa0

amd64 architecture (AMD x86_64 (AMD64))

http://security.debian.org/pool/updates/main/m/mysql-dfsg-5.0/libmysqlclient15-dev_5.0.32-7etch5_amd64.deb
Size/MD5 checksum:  7376450 ba1c75fa6963352a0af68c4db08d0c12
http://security.debian.org/pool/updates/main/m/mysql-dfsg-5.0/mysql-server-4.1_5.0.32-7etch5_amd64.deb
Size/MD5 checksum:    47708 4a3047795b3030063a47c969cfe4c324
http://security.debian.org/pool/updates/main/m/mysql-dfsg-5.0/libmysqlclient15off_5.0.32-7etch5_amd64.deb
Size/MD5 checksum:  1830910 c24fc179d4fb37994b5af2cb8c405ff1
http://security.debian.org/pool/updates/main/m/mysql-dfsg-5.0/mysql-server-5.0_5.0.32-7etch5_amd64.deb
Size/MD5 checksum: 25939846 8b0e047de274ed90f69a76f22866561a
http://security.debian.org/pool/updates/main/m/mysql-dfsg-5.0/mysql-client-5.0_5.0.32-7etch5_amd64.deb
Size/MD5 checksum:  7547346 003c7231b81203a50ec563ff5142a010

arm architecture (ARM)

http://security.debian.org/pool/updates/main/m/mysql-dfsg-5.0/mysql-server-4.1_5.0.32-7etch5_arm.deb
Size/MD5 checksum:    47756 0145e1aa5ec02b5c60c2d78bbcd334a0
http://security.debian.org/pool/updates/main/m/mysql-dfsg-5.0/mysql-server-5.0_5.0.32-7etch5_arm.deb
Size/MD5 checksum: 25345622 2de813c86f1d10fb2df34d8b9de2336e
http://security.debian.org/pool/updates/main/m/mysql-dfsg-5.0/libmysqlclient15-dev_5.0.32-7etch5_arm.deb
Size/MD5 checksum:  6929754 8a6b3351769b567a468bc7dcb97a2141
http://security.debian.org/pool/updates/main/m/mysql-dfsg-5.0/mysql-client-5.0_5.0.32-7etch5_arm.deb
Size/MD5 checksum:  7204866 a8f69933d8081e753b76402e47e7a64a
http://security.debian.org/pool/updates/main/m/mysql-dfsg-5.0/libmysqlclient15off_5.0.32-7etch5_arm.deb
Size/MD5 checksum:  1747880 8da665b5f04444dcde03321f24ca8e4b

hppa architecture (HP PA RISC)

http://security.debian.org/pool/updates/main/m/mysql-dfsg-5.0/libmysqlclient15off_5.0.32-7etch5_hppa.deb
Size/MD5 checksum:  1920486 cb9a2e86902dc3f174926fbd8397a969
http://security.debian.org/pool/updates/main/m/mysql-dfsg-5.0/libmysqlclient15-dev_5.0.32-7etch5_hppa.deb
Size/MD5 checksum:  8046116 1eb6b1199a2c0f6a8502008a2c6df376
http://security.debian.org/pool/updates/main/m/mysql-dfsg-5.0/mysql-server-5.0_5.0.32-7etch5_hppa.deb
Size/MD5 checksum: 27055710 085b261bf2ec3820e21ec73bb59f6caa
http://security.debian.org/pool/updates/main/m/mysql-dfsg-5.0/mysql-server-4.1_5.0.32-7etch5_hppa.deb
Size/MD5 checksum:    47708 c17ca051ebe8783fa120c4596e32d9c2
http://security.debian.org/pool/updates/main/m/mysql-dfsg-5.0/mysql-client-5.0_5.0.32-7etch5_hppa.deb
Size/MD5 checksum:  8003914 59650ba346b2af0d77afbac64e93cca8

i386 architecture (Intel ia32)

http://security.debian.org/pool/updates/main/m/mysql-dfsg-5.0/mysql-server-5.0_5.0.32-7etch5_i386.deb
Size/MD5 checksum: 25370152 d615311235c5a9e6d85e7e77b4927d5d
http://security.debian.org/pool/updates/main/m/mysql-dfsg-5.0/mysql-server-4.1_5.0.32-7etch5_i386.deb
Size/MD5 checksum:    47746 1040540bc74e34b67d9606a4368162a7
http://security.debian.org/pool/updates/main/m/mysql-dfsg-5.0/libmysqlclient15-dev_5.0.32-7etch5_i386.deb
Size/MD5 checksum:  6971870 90aae8d289cb3df24009c65b1af3b12d
http://security.debian.org/pool/updates/main/m/mysql-dfsg-5.0/mysql-client-5.0_5.0.32-7etch5_i386.deb
Size/MD5 checksum:  7189880 6082aa213539a361cced40044161d108
http://security.debian.org/pool/updates/main/m/mysql-dfsg-5.0/libmysqlclient15off_5.0.32-7etch5_i386.deb
Size/MD5 checksum:  1793974 ab7cbdd14a9bff04066a865634ef1ce2

ia64 architecture (Intel ia64)

http://security.debian.org/pool/updates/main/m/mysql-dfsg-5.0/libmysqlclient15-dev_5.0.32-7etch5_ia64.deb
Size/MD5 checksum:  9736902 1e93082931f1055cd4c1436caa0020f3
http://security.debian.org/pool/updates/main/m/mysql-dfsg-5.0/mysql-server-4.1_5.0.32-7etch5_ia64.deb
Size/MD5 checksum:    47710 3369d882bf2b99a05397aaeddf8bf864
http://security.debian.org/pool/updates/main/m/mysql-dfsg-5.0/libmysqlclient15off_5.0.32-7etch5_ia64.deb
Size/MD5 checksum:  2115340 472e412113e7ae0bb76853cf0167cd57
http://security.debian.org/pool/updates/main/m/mysql-dfsg-5.0/mysql-server-5.0_5.0.32-7etch5_ia64.deb
Size/MD5 checksum: 30408810 8c8982aae5e90c451b08f22bc2a5399d
http://security.debian.org/pool/updates/main/m/mysql-dfsg-5.0/mysql-client-5.0_5.0.32-7etch5_ia64.deb
Size/MD5 checksum: 10341648 a5ef1b86109c465131ccfe5a9147bd74

mips architecture (MIPS (Big Endian))

http://security.debian.org/pool/updates/main/m/mysql-dfsg-5.0/mysql-client-5.0_5.0.32-7etch5_mips.deb
Size/MD5 checksum:  7655576 b92c42fbbd64a377fcc4277a1696ccdd
http://security.debian.org/pool/updates/main/m/mysql-dfsg-5.0/libmysqlclient15off_5.0.32-7etch5_mips.deb
Size/MD5 checksum:  1835994 2650808f606406336f55b31497bea015
http://security.debian.org/pool/updates/main/m/mysql-dfsg-5.0/libmysqlclient15-dev_5.0.32-7etch5_mips.deb
Size/MD5 checksum:  7749018 db3eb1fb41084f7cda145ecc1f808402
http://security.debian.org/pool/updates/main/m/mysql-dfsg-5.0/mysql-server-4.1_5.0.32-7etch5_mips.deb
Size/MD5 checksum:    47710 698fd659ef265c937dd045cfb2e9e28a
http://security.debian.org/pool/updates/main/m/mysql-dfsg-5.0/mysql-server-5.0_5.0.32-7etch5_mips.deb
Size/MD5 checksum: 26338840 89c569b544aeb60ce6aae1c77d40965e

mipsel architecture (MIPS (Little Endian))

http://security.debian.org/pool/updates/main/m/mysql-dfsg-5.0/libmysqlclient15off_5.0.32-7etch5_mipsel.deb
Size/MD5 checksum:  1789510 2501eed6aaa7143a89f13e4bd9658ecf
http://security.debian.org/pool/updates/main/m/mysql-dfsg-5.0/mysql-server-4.1_5.0.32-7etch5_mipsel.deb
Size/MD5 checksum:    47718 ed3dc0fc53b78b2307dc4790ff82a174
http://security.debian.org/pool/updates/main/m/mysql-dfsg-5.0/libmysqlclient15-dev_5.0.32-7etch5_mipsel.deb
Size/MD5 checksum:  7640356 5417137e8b9632964ea0d67e8cd96416
http://security.debian.org/pool/updates/main/m/mysql-dfsg-5.0/mysql-server-5.0_5.0.32-7etch5_mipsel.deb
Size/MD5 checksum: 25845474 d379d4a5f900202d6244858d379aa46a
http://security.debian.org/pool/updates/main/m/mysql-dfsg-5.0/mysql-client-5.0_5.0.32-7etch5_mipsel.deb
Size/MD5 checksum:  7561164 31fa1242af6a762a92486aa327469d1f

powerpc architecture (PowerPC)

http://security.debian.org/pool/updates/main/m/mysql-dfsg-5.0/libmysqlclient15off_5.0.32-7etch5_powerpc.deb
Size/MD5 checksum:  1832312 c6ab2b2c70aed56a7748eb0a5dd04c8c
http://security.debian.org/pool/updates/main/m/mysql-dfsg-5.0/mysql-client-5.0_5.0.32-7etch5_powerpc.deb
Size/MD5 checksum:  7573184 f43fb3a11284830b745346775073f92d
http://security.debian.org/pool/updates/main/m/mysql-dfsg-5.0/libmysqlclient15-dev_5.0.32-7etch5_powerpc.deb
Size/MD5 checksum:  7511850 184e9e37e760f4bb3779385d134975db
http://security.debian.org/pool/updates/main/m/mysql-dfsg-5.0/mysql-server-4.1_5.0.32-7etch5_powerpc.deb
Size/MD5 checksum:    47708 a76913df77b9f358f88a66875dc13a46
http://security.debian.org/pool/updates/main/m/mysql-dfsg-5.0/mysql-server-5.0_5.0.32-7etch5_powerpc.deb
Size/MD5 checksum: 26164462 386da660c381925416238a51b0a847a4

s390 architecture (IBM S/390)

http://security.debian.org/pool/updates/main/m/mysql-dfsg-5.0/mysql-server-4.1_5.0.32-7etch5_s390.deb
Size/MD5 checksum:    47714 7fa0b60bff0e106f6328b0b026566008
http://security.debian.org/pool/updates/main/m/mysql-dfsg-5.0/mysql-server-5.0_5.0.32-7etch5_s390.deb
Size/MD5 checksum: 26763646 544f49b13f6207c1a104dc9eef9e6dd9
http://security.debian.org/pool/updates/main/m/mysql-dfsg-5.0/libmysqlclient15-dev_5.0.32-7etch5_s390.deb
Size/MD5 checksum:  7413442 b70c6184c3b82ead175debdd569ab807
http://security.debian.org/pool/updates/main/m/mysql-dfsg-5.0/mysql-client-5.0_5.0.32-7etch5_s390.deb
Size/MD5 checksum:  7507380 f9cecc1ace4fd2455516986637490930
http://security.debian.org/pool/updates/main/m/mysql-dfsg-5.0/libmysqlclient15off_5.0.32-7etch5_s390.deb
Size/MD5 checksum:  1951732 d5eaad746a8db92889febd0da68f1ae5

sparc architecture (Sun SPARC/UltraSPARC)

http://security.debian.org/pool/updates/main/m/mysql-dfsg-5.0/mysql-client-5.0_5.0.32-7etch5_sparc.deb
Size/MD5 checksum:  7153228 566328488d67a3843b04689d76f0253d
http://security.debian.org/pool/updates/main/m/mysql-dfsg-5.0/mysql-server-4.1_5.0.32-7etch5_sparc.deb
Size/MD5 checksum:    47714 551a6f9a790b301d63c856ecab13be75
http://security.debian.org/pool/updates/main/m/mysql-dfsg-5.0/libmysqlclient15-dev_5.0.32-7etch5_sparc.deb
Size/MD5 checksum:  7013384 3915c6846d5ffce6e321b7e40006cb66
http://security.debian.org/pool/updates/main/m/mysql-dfsg-5.0/libmysqlclient15off_5.0.32-7etch5_sparc.deb
Size/MD5 checksum:  1797430 b0bd228090c8923d08c9b8ee84a1edb8
http://security.debian.org/pool/updates/main/m/mysql-dfsg-5.0/mysql-server-5.0_5.0.32-7etch5_sparc.deb
Size/MD5 checksum: 25425084 a9934459b8cde72354ffc463b2ec140f

补丁安装方法:

1. 手工安装补丁包:

  首先,使用下面的命令来下载补丁软件:
  # wget url  (url是补丁下载链接地址)

  然后,使用下面的命令来安装补丁:  
  # dpkg -i file.deb (file是相应的补丁名)

2. 使用apt-get自动安装补丁包:

   首先,使用下面的命令更新内部数据库:
   # apt-get update
  
   然后,使用下面的命令安装更新软件包:
   # apt-get upgrade

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

http://www.yassl.com/

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