| 网站首页 | 新闻中心 | 系统安全 | 网络安全 | 安全技术 | 下载中心 | 安全365社区 |
安全365
收藏本站
设为首页
会员登录:
站内搜索: 新闻中心 系统安全 网络安全 安全技术 下载中心
| 系统安全首页 | 漏洞分析 | 入侵检测 | 升级补丁 | 安全配置 |
Linux内核isdn_net.c文件
Linux内核isdn_net.c文件 本地溢出漏洞
作者:未知 文章来源:互联网 点击数: 更新时间:2008-4-8 17:05:20

  开源操作系统Linux内核Linux Kernel实现上存在本地溢出漏洞,此漏洞存在于drivers/isdn/i4l/isdn_net.c文件中的isdn_net_setcfg()函数在处理发送给ISDN伪设备(/dev/isdnctrl)的IOCTL配置请求时。

  受影响系统

  Linux kernel 2.6.23

  描述:

  BUGTRAQ ID: 26605

  CVE(CAN) ID: CVE-2007-6063

  Linux Kernel是开放源码操作系统Linux所使用的内核。

  Linux Kernel实现上存在漏洞,本地攻击者可能利用此漏洞提升权限。

  Linux Kernel的drivers/isdn/i4l/isdn_net.c文件中的isdn_net_setcfg()函数在处理发送给ISDN伪设备(/dev/isdnctrl)的IOCTL配置请求时存在缓冲区溢出漏洞

  isdn_ioctl (drivers/isdn/i4l/isdn_common.c):

  1270 isdn_ioctl(struct inode *inode, struct file *file, uint cmd, ulong arg)

  ...

  ...

  1410 case IIOCNETSCF:

  1411

  1412 if (arg) {

  1413 if (copy_from_user(cfg, argp, sizeof(cfg))) *** <- cfg is user-controlled

  1414 return -EFAULT;

  1415 return isdn_net_setcfg(cfg); *** <-call isdn_net_setcfg()

  1416 } else

  1417 return -EINVAL;

  ...

  在1413行,cfg是从用户空间读取的,因此受用户控制。在1415行调用了isdn_net_setcfg()函数,cfg作为参数传送给了isdn_net_setcfg()。

  isdn_net_setcfg (drivers/isdn/i41/isdn_net.c):

  2664 isdn_net_setcfg(isdn_net_ioctl_cfg * cfg)

  2665 {

  ...

  2777 if (cfg->exclusive > 0) {

  2778 unsigned long flags;

  2779

  2780

  2781 spin_lock_irqsave(dev->lock, flags);

  2782 if ((i = isdn_get_free_channel(ISDN_USAGE_NET,

  2783 lp->l2_proto, lp->l3_proto, drvidx,

  2784 chidx, lp->msn)) < 0) {

  2785

  2786 lp->exclusive = -1;

  2787 spin_unlock_irqrestore(dev->lock, flags);

  2788 return -EBUSY;

  2789 }

  2790

  2791 dev->usage = ISDN_USAGE_EXCLUSIVE;

  2792 isdn_info_update();

  2793 spin_unlock_irqrestore(dev->lock, flags);

  2794 lp->exclusive = i;

  2795 } else {

  2796

  2797 lp->exclusive = -1;

  2798 if ((lp->pre_device != -1) && (cfg->exclusive == -1)) {

  2799 isdn_unexclusive_channel(lp->pre_device, lp->pre_channel);

  2800 isdn_free_channel(lp->pre_device, lp->pre_channel, ISDN_USAGE_NET);

  2801 drvidx = -1;

  2802 chidx = -1;

  2803 }

  2804 }

  2805 strcpy(lp->msn, cfg->eaz); *** <- Possible overrun of lp->msn by cfg-eaz

  2806 lp->pre_device = drvidx;

  2807 lp->pre_channel = chidx;

  2808 lp->onhtime = cfg->onhtime;

  2809 lp->charge = cfg->charge;

  ...

  2884 return -ENODEV;

  2885 }

  在2805行调用了strcpy(),lp->msn参数大小为32,cfg->eaz大小为256。由于*cfg的数据是用户可控的,因此cfg->eaz也是用户可控的,这样就可以通过cfg->eaz字符串覆盖目标字符串lp->msn。如果cfg->eaz字符串的长度大于32的话,就可以触发缓冲区溢出。

  建议使用此软件的用户随时关注厂商的主页以获取最新版本:http://www.kernel.org/

文章录入:小张    责任编辑:小张 
  • 上一篇文章:

  • 下一篇文章: 没有了
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
     
     
     
    Linux系统安全隐患及加固
    如何防范Linux操作系统下
    Linux系统配置VI或VIM的
    服务器硬盘启动Linux独立
    服务器硬盘启动Linux独立
    服务器硬盘启动Linux独立
    Linux用户和用户配置文件
    终端乱码的终极解决方案
    Nero Linux 3.5.0.1新版
    Linux操作系统内存泄漏的
    站长邮箱:webmaster@anquan365.com
    联系电话:86-10-67634029 点击这里给我发消息

    Copyright © 2006-2008 www.anquan365.com 北京华安普特网络科技有限公司 版权所有