SILC客户端及服务器密钥协商远程整数溢出漏洞

漏洞信息详情

SILC客户端及服务器密钥协商远程整数溢出漏洞

漏洞简介

SILC(Secure Internet Live Conferencing)是安全的互联网会议讨论系统,可以发送任何类型的信息,包括多媒体信息,如视频、音频、图像等。

SILC处理畸形的数据交换时存在漏洞,远程攻击者可能利用此漏洞控制服务器。

如果要初始连接到SILC服务器,对等端(客户端、路由器和服务器)之间要执行相互认证并执行密钥协商协议以获得之后用于加密通讯的共享密钥。对等端之间的加密数据是通过以PKCS#1 1.5标准编码的报文交换的。

SILC的PKCS1编码功能是在silcpkcs1.c文件的silccrypt库中实现的,用于解码PKCS#1报文的代码在silc_pkcs1_decode函数中实现,如下所示:

/———–

SilcBool silc_pkcs1_decode(SilcPkcs1BlockType bt,

const unsigned char *data,

SilcUInt32 data_len,

unsigned char *dest_data,

SilcUInt32 dest_data_size,

SilcUInt32 *dest_len)

{

int i = 0;

SILC_LOG_DEBUG((\”PKCS#1 decoding, bt \\%d\”, bt));

/* Sanity checks */

if (!data || !dest_data || dest_data_size < 3 ||

data[0] != 0x00 || data[1] != (unsigned char)bt) {

SILC_LOG_DEBUG((\”Malformed block\”));

return FALSE;

}

/* Decode according to block type */

switch (bt) {

case SILC_PKCS1_BT_PRV0:

/* Do nothing */

break;

case SILC_PKCS1_BT_PRV1:

/* Verification */

(1) for (i = 2; i < data_len; i++)

if (data[i] != 0xff)

break;

break;

case SILC_PKCS1_BT_PUB:

/* Decryption */

(2) for (i = 2; i < data_len; i++)

if (data[i] == 0x00)

break;

break;

}

/* Sanity checks */

(3) if (data[i++] != 0x00) {

SILC_LOG_DEBUG((\”Malformed block\”));

return FALSE;

}

if (i – 1 < SILC_PKCS1_MIN_PADDING) {

SILC_LOG_DEBUG((\”Malformed block\”));

return FALSE;

}

if (dest_data_size < data_len – i) {

SILC_LOG_DEBUG((\”Destination buffer too small\”));

return FALSE;

}

/* Copy the data */

(4) memcpy(dest_data, data + i, data_len – i);

/* Return data length */

if (dest_len)

*dest_len = data_len – i;

return TRUE;

}

– ———–/

在上面的代码中,如果在传输私有(BT_PRIV1)或公开(BT_PUB)密钥材料时有效PKCS#1编码的恶意伪造报文所有位分别设置为0xff或非0x00的话,就会导致执行流在(1)和(2)退出循环,无符整数变量i设置为data_len,然后在(3)同一变量i以1递增,因此设置为data_len+1。在(3)传送过滤检查的特制报文最终会由于在(4)处memcpy()函数中传送的第三个参数中的整数溢出而导致内存破坏。由于i设置为了datalen+1,用于计算第三个参数值的data_len – i表达式会为-1,导致由于符号转换错误而覆盖进程内存。成功利用这个漏洞会导致程序拒绝服务,或以SILC程序的权限执行任意指令。

漏洞公告

目前厂商已经发布了升级补丁以修复这个安全问题,补丁下载链接:

http://silcnet.org/software/download/

参考网址

来源: BID

名称: 28373

链接:http://www.securityfocus.com/bid/28373

来源: silcnet.org

链接:http://silcnet.org/general/news/?item=toolkit_20080320_1

来源: silcnet.org

链接:http://silcnet.org/general/news/?item=server_20080320_1

来源:silcnet.org

链接:http://silcnet.org/general/news/?item=client_20080320_1

来源: FEDORA

名称: FEDORA-2008-2641

链接:https://www.redhat.com/archives/fedora-package-announce/2008-March/msg00538.html

来源: FEDORA

名称: FEDORA-2008-2616

链接:https://www.redhat.com/archives/fedora-package-announce/2008-March/msg00513.html

来源: XF

名称: silc-silcpkcs1decode-bo(41474)

链接:http://xforce.iss.net/xforce/xfdb/41474

来源: SECTRACK

名称: 1019690

链接:http://www.securitytracker.com/id?1019690

来源: BUGTRAQ

名称: 20080325 CORE-2007-1212: SILC pkcs_decode buffer overflow

链接:http://www.securityfocus.com/archive/1/archive/1/490069/100/0/threaded

来源: MANDRIVA

名称: MDVSA-2008:158

链接:http://www.mandriva.com/security/advisories?name=MDVSA-2008:158

来源: VUPEN

名称: ADV-2008-0974

链接:http://www.frsirt.com/english/advisories/2008/0974/references

来源: MISC

链接:http://www.coresecurity.com/?action=item&id=2206

来源: SECUNIA

名称: 29465

链接:http://secunia.com/advisories/29465

来源: SECUNIA

名称: 29463

链接:http://secunia.com/advisories/29463

来源: SREASON

名称: 3795

链接:http://securityreason.com/securityalert/3795

来源: GENTOO

名称: GLSA-200804-27

链接:http://security.gentoo.org/glsa/glsa-200804-27.xml

来源: SECUNIA

名称: 29946

链接:http://secunia.com/advisories/29946

来源: SECUNIA

名称: 29622

链接:http://secunia.com/advisories/29622

来源: SUSE

名称: SUSE-SR:2008:008

链接:http://lists.opensuse.org/opensuse-security-announce/2008-04/msg00005.html

受影响实体

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享