通行证│用户名: 密码: 验证码: 验证码,看不清楚?请点击刷新验证码 电信网通铁通移动   在线
文章搜索:
热门搜索:红客 黑鹰 红客技术 安全动画 红客培训
首页 文章 软件 动画 资源 励志 论坛 邮箱 会员 军事 科技 博客 爱心红客 最近更新 800g资源
 业内新闻 漏洞公告 病毒公告 电脑知识 网络知识 菜鸟入门 攻防教程 黑客攻防 安全编程 工具使用 综合安全 个人安全 安全相关 Q Q安全 原创精华 红客人物 站内事件
您现在的位置: 爱国者安全网 >> 新闻类 >> 最新公告 >> 漏洞公告 >> 文章正文
SILC 客户端以及服务器密钥协商远程整数溢出漏洞
责任编辑:酷酷の鱼   更新日期:2008-3-31
 

受影响系统:
SILC server <= 1.1.1
SILC client <= 1.1.3

不受影响系统:
SILC server 1.1.2
SILC client 1.1.4

描述:
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/

  • 上一篇文章:
  • 下一篇文章: 没有了
  • 最近更新
    普通文章 Vista系统在非常规状态下的数据备份策略
    普通文章 如何利用加密方法保障电子邮件系统安全
    推荐文章 推荐:了解Cookie与浏览器关系 让电脑更安全
    普通文章 系统无法打开.exe可执行文件的解决方案
    普通文章 菜鸟必读 弱口令将会导致的安全风险
    普通文章 混合型拓扑结构
    推荐文章 北京网络行业协会、江民科技联合发布03月31日病毒播报
    普通文章 SILC 客户端以及服务器密钥协商远程整数溢出漏洞
    普通文章 VLC媒体播放器MP4_ReadBox_rdrf()函数堆溢出漏洞
    普通文章 Windows 2008曝严重漏洞 影响Vista
    热门文章
    普通文章ESET NOD32 连续第四次获得 Advanced+
    普通文章用户抱怨Vista SP1导致部分电脑出现故障
    普通文章远程后门感染PE文件 AUTO病毒再次发威
    推荐文章推荐:Oracle web环境注射技术
    普通文章安装防火墙软件需要注意的12个事项
    普通文章教你识破“碎片对象”伪装的病毒
    普通文章手把手教你防盗号
    普通文章需这几招:拒绝重复感染病毒
    普通文章格式化都没用?教你清除“不可杀”病毒
    普通文章修改hosts文件 轻松封杀不良站点
    精彩专题