linux社区爱心援助Linux认证系列教程业界动态站务新闻公司招聘建议留言网址大全LPI专题CISCO专题
设为首页
加入收藏
管理团队
JSP  
JAVA  
PERL  
 您的位置:首页 > article > Linux开发区 > 内核研究 >
栏目导栏
资料搜索
热门文章
·linux-2.6内核升级文档
·Linux源代码的注释
·linux2.6内核编译方法详述
·Linux操作系统内核编译详解
·Linux内核结构详解
·Linux配置与编译内核
·定时器
·Linux内核升级全攻略
·FC5(Fedora Core5)下编译内核总
·Ubuntu 6.06 dapper 内核编译初
·Linux 内核编译详解
·Linux内核管理基础知识概述
·Linux2.4升级到2.6内核升级指南
·第八章 设备驱动
·如何编译linux内核
最新文章
·Linux内核bootsplash功能的实现
·Linux内核2.6.25全新发布加入众
·Debian Linux系统编译内核标准
·Linux2.4内核和2.6内核对Initr
·2.6.24内核编译 initrd-2.6.24
·Qtopia应用程序与Linux内核数据
·Linux 2.6内核中sysfs文件系统
·Linux2.6内核驱动移植参考
·Andrew Morton:Linux内核的执法
·Fedora 8 Linux系统的内核配置
·Kernel中的irq.c函数
·Linux核心出现权限扩张及记忆体
·Linux 2.6本地权限提升漏洞
·结合Linux系统内核源码理解SYN
·关于Linux 内核中五个主要子系
Google
 
Linux内核isdn_net.c文件 本地溢出漏洞
[ 作者:  加入时间:2007-12-07 13:48:23  来自:Linux联盟收集整理 ]

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

3qTLinux联盟
更新日期:2007-12-03

3qTLinux联盟
受影响系统:

Linux kernel 2.6.23

3qTLinux联盟
描述:

BUGTRAQ ID: 26605

3qTLinux联盟
CVE(CAN) ID: CVE-2007-6063

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

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

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

isdn_ioctl (drivers/isdn/i4l/isdn_common.c):3qTLinux联盟
  1270 isdn_ioctl(struct inode *inode, struct file *file, uint cmd, ulong arg)3qTLinux联盟
  ...3qTLinux联盟
  ...3qTLinux联盟
  1410 case IIOCNETSCF:3qTLinux联盟
  1411 3qTLinux联盟
  1412 if (arg) {3qTLinux联盟
  1413 if (copy_from_user(&cfg, argp, sizeof(cfg))) *** <- cfg is user-controlled3qTLinux联盟
  1414 return -EFAULT;3qTLinux联盟
  1415 return isdn_net_setcfg(&cfg); *** <-call isdn_net_setcfg()3qTLinux联盟
  1416 } else3qTLinux联盟
  1417 return -EINVAL;3qTLinux联盟
  ...3qTLinux联盟
  在1413行,cfg是从用户空间读取的,因此受用户控制。在1415行调用了isdn_net_setcfg()函数,&cfg作为参数传送给了isdn_net_setcfg()。3qTLinux联盟
  isdn_net_setcfg (drivers/isdn/i41/isdn_net.c):3qTLinux联盟
  2664 isdn_net_setcfg(isdn_net_ioctl_cfg * cfg)3qTLinux联盟
  2665 {3qTLinux联盟
  ...3qTLinux联盟
  2777 if (cfg->exclusive > 0) {3qTLinux联盟
  2778 unsigned long flags;3qTLinux联盟
  27793qTLinux联盟
  2780 3qTLinux联盟
  2781 spin_lock_irqsave(&dev->lock, flags);3qTLinux联盟
  2782 if ((i = isdn_get_free_channel(ISDN_USAGE_NET,3qTLinux联盟
  2783 lp->l2_proto, lp->l3_proto, drvidx,3qTLinux联盟
  2784 chidx, lp->msn)) < 0) {3qTLinux联盟
  2785 3qTLinux联盟
  2786 lp->exclusive = -1;3qTLinux联盟
  2787 spin_unlock_irqrestore(&dev->lock, flags);3qTLinux联盟
  2788 return -EBUSY;3qTLinux联盟
  2789 }3qTLinux联盟
  2790 3qTLinux联盟
  2791 dev->usage = ISDN_USAGE_EXCLUSIVE;3qTLinux联盟
  2792 isdn_info_update();3qTLinux联盟
  2793 spin_unlock_irqrestore(&dev->lock, flags);3qTLinux联盟
  2794 lp->exclusive = i;3qTLinux联盟
  2795 } else {3qTLinux联盟
  2796 3qTLinux联盟
  2797 lp->exclusive = -1;3qTLinux联盟
  2798 if ((lp->pre_device != -1) && (cfg->exclusive == -1)) {3qTLinux联盟
  2799 isdn_unexclusive_channel(lp->pre_device, lp->pre_channel);3qTLinux联盟
  2800 isdn_free_channel(lp->pre_device, lp->pre_channel, ISDN_USAGE_NET);3qTLinux联盟
  2801 drvidx = -1;3qTLinux联盟
  2802 chidx = -1;3qTLinux联盟
  2803 }3qTLinux联盟
  2804 }3qTLinux联盟
  2805 strcpy(lp->msn, cfg->eaz); *** <- Possible overrun of lp->msn by cfg-eaz3qTLinux联盟
  2806 lp->pre_device = drvidx;3qTLinux联盟
  2807 lp->pre_channel = chidx;3qTLinux联盟
  2808 lp->onhtime = cfg->onhtime;3qTLinux联盟
  2809 lp->charge = cfg->charge;3qTLinux联盟
  ...3qTLinux联盟
  2884 return -ENODEV;3qTLinux联盟
  2885 }3qTLinux联盟
 

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

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

Linux联盟收集整理 ,转贴请标明原始链接,如有任何疑问欢迎来本站Linux论坛讨论

评论】【加入收藏夹】【 】【打印】【关闭
※ 相关链接
 ·Linux内核有待提高的七个领域  (2007-11-29 11:11:54)
 ·关于Linux内核源码使用的心得  (2007-11-23 10:09:35)
 ·linux内核模块管理命令  (2007-11-21 11:51:46)
 ·开源社区在挑战Linux内核开发的极限速度  (2007-11-21 10:42:46)
 ·Linux内核编程风格  (2007-11-09 10:17:16)
 ·Linux内核模块开发详细解析  (2007-10-23 09:51:19)
 ·Linux内核模块开发--宏说明  (2007-10-22 10:26:07)
 ·交叉编译Linux内核(2.6.22.6)  (2007-10-11 10:57:41)
 ·AKA 2007 Linux内核开发者大会邀请函  (2007-09-28 12:09:21)
 ·Linux内核Linux Kernel 2.6.22.7发布  (2007-09-25 11:40:06)