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

OpenBSD DHCPD服务程序远程栈溢出漏洞

2007-10-16  作者:bitsCN整理  来源:中国网管联盟  点评 投稿 收藏

涉及程序:
OpenBSD
 
描述:
OpenBSD DHCPD服务程序远程栈溢出漏洞
 
详细:
OpenBSD是一款开放源代码Unix类操作系统。

中国网管论坛bbs.bitsCN.com

OpenBSD系统的DHCP协议实现上存在缓冲区溢出漏洞,远程攻击者可能利用此漏洞控制服务器。 网管网www_bitscn_com

OpenBSD的options.c文件中的cons_options()函数没有正确地处理DHCP请求。如果远程攻击者所发送的DHCP请求中指定最大消息大小小于最小IP MTU(278)的话,就会在OpenBSD中导致dhcpd(8)覆盖栈缓冲区,执行任意指令。 中国网管联盟bitsCN.com

漏洞存在于负责处理从客户端所接收到的DHCP选项的函数中。在src/usr.sbin/dhcpd/options.c文件中:

中国网管联盟bitsCN.com

int
cons_options(struct packet *inpacket, struct dhcp_packet *outpacket,
   int mms, struct tree_cache **options,
   int overload, /* Overload flags that may be set. */
   int terminate, int bootpp, u_int8_t *prl, int prl_len)
{
      unsigned char priority_list[300];
      int priority_len;
      unsigned char buffer[4096];     /* Really big buffer... */
      int main_buffer_size;
      int mainbufix, bufix;
      int option_size;
      int length;
  
dhcp.h中定义了DHCP_FIXED_LEN:

网管联盟bitsCN_com

      if (!mms &&
         inpacket &&
         inpacket->options[DHO_DHCP_MAX_MESSAGE_SIZE].data &&
         (inpacket->options[DHO_DHCP_MAX_MESSAGE_SIZE].len >=
         sizeof(u_int16_t)))
           mms = getUShort(
              inpacket->options[DHO_DHCP_MAX_MESSAGE_SIZE].data);

网管网www.bitscn.com

      if (mms)
           main_buffer_size = mms - DHCP_FIXED_LEN;
      else if (bootpp)
           main_buffer_size = 64;
      else
           main_buffer_size = 576 - DHCP_FIXED_LEN;

网管网www.bitscn.com

      if (main_buffer_size > sizeof(buffer))
           main_buffer_size = sizeof(buffer);

网管联盟bitsCN@com

main_buffer_size是有符型,可被攻击者控制。只要main_buffer_size是比较小的正整数(<= 4096),执行流就会正常进行: 网管bitscn_com

     /* Copy the options into the big buffer... */
      option_size = store_options(
         buffer,
         (main_buffer_size - 7 + ((overload & 1) ? DHCP_FILE_LEN : 0)+
           ((overload & 2) ? DHCP_SNAME_LEN : 0)),
         options, priority_list, priority_len, main_buffer_size,
         (main_buffer_size + ((overload & 1) ? DHCP_FILE_LEN : 0)),
         terminate);
网管bitscn_com

      /* Put the cookie up front... */
      memcpy(outpacket->options, DHCP_OPTIONS_COOKIE, 4);
      mainbufix = 4;
网管网www_bitscn_com

这里如果main_buffer_size为比较小的正值的话(<= 7),就会导致store_options迅速退出,执行流会继续。具体来讲,只要客户端报文中的Maximum Segment Size值(mms)满足(DHCP_FIXED_LEN < mms < DHCP_FIXED_LEN+4)这个条件,main_buffer_size就会为小于4的正数。 网管bitscn_com

      if (option_size <= main_buffer_size - mainbufix) {
           memcpy(&outpacket->options[mainbufix],
              buffer, option_size);
           mainbufix += option_size;
           if (mainbufix < main_buffer_size)
                 outpacket->options[mainbufix++] = DHO_END;
           length = DHCP_FIXED_NON_UDP + mainbufix;
      } else {
           outpacket->options[mainbufix++] = DHO_DHCP_OPTION_OVERLOAD;
           outpacket->options[mainbufix++] = 1;

中国网管联盟bitsCN.com

           if (option_size >
              main_buffer_size - mainbufix + DHCP_FILE_LEN)
                 outpacket->options[mainbufix++] = 3;
           else
                 outpacket->options[mainbufix++] = 1;
网管联盟bitsCN_com

           memcpy(&outpacket->options[mainbufix],
              buffer, main_buffer_size - mainbufix);
网管网www.bitscn.com

用负数的第三个参数触发memcpy(3)调用就会导致覆盖大部分的进程内存。 网管联盟bitsCN_com

<*来源:Gera Richarte
     Nahuel Riva
网管论坛bbs_bitsCN_com

链接:http://www.openbsd.org/errata40.html
     http://secunia.com/advisories/27160/
     http://www.openbsd.org/cgi-bin/cvsweb/src/usr.sbin/dhcpd/options.c
     http://marc.info/?l=bugtraq&m=119212200825215&w=2
*>
网管网www_bitscn_com

受影响系统:
OpenBSD OpenBSD 4.2
OpenBSD OpenBSD 4.1
OpenBSD OpenBSD 4.0
 
 
攻击方法:
暂无有效攻击代码
 
解决方案:
厂商补丁:

网管联盟bitsCN@com

OpenBSD
-------
目前厂商已经发布了升级补丁以修复这个安全问题,请到厂商的主页下载:
网管论坛bbs_bitsCN_com

ftp://ftp.openbsd.org/pub/OpenBSD/patches/4.0/common/016_dhcpd.patch
ftp://ftp.openbsd.org/pub/OpenBSD/patches/4.1/common/010_dhcpd.patch
ftp://ftp.openbsd.org/pub/OpenBSD/patches/4.2/common/001_dhcpd.patch

中国网管论坛bbs.bitsCN.com


 上一篇:没有了   下一篇:没有了
OpenBSD DHCPD服务程序远程栈溢出漏洞 评论:
loading.. 评论加载中…
评论:请自觉遵守互联网相关政策法规,评论不得超过250字。

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