• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: | 推荐给好友 上一篇 | 下一篇

Linux Kernel moxa串行驱动BSS溢出漏洞

发布: 2007-5-25 12:09 | 作者: 未知 | 来源: Blog.ChinaUnix.net | 查看: 33次 | 进入软件测试论坛讨论

领测软件测试网 发布日期:2005-02-22
更新日期:2005-02-25

受影响系统:
Linux kernel 2.6.x
Linux kernel 2.4.x
Linux kernel 2.2.x
描述:
CVE(CAN) ID: CAN-2005-0504

Linux Kernel是开放源代码操作系统Linux的内核。

Linux Kernel moxa驱动MoxaDriverIoctl函数存在缓冲区溢出,本地攻击者可以利用这个漏洞提升特权。

问题存在于如下代码drivers/char/moxa.c:

In MoxaDriverIoctl():

>        if(copy_from_user(&dltmp, argp, sizeof(struct dl_str)))
>                return -EFAULT;
                ^ dltmp.len 是由用户控制
>        if(dltmp.cardno < 0 || dltmp.cardno >= MAX_BOARDS)
>                return -EINVAL;
>                
>        switch(cmd)
>        {
>        case MOXA_LOAD_BIOS:
>                i = moxaloadbios(dltmp.cardno, dltmp.buf, dltmp.len);
                ^ 调用时没有任何长度检查
>                return (i);
>        case MOXA_FIND_BOARD:
>                return moxafindcard(dltmp.cardno);
>        case MOXA_LOAD_C320B:
>                moxaload320b(dltmp.cardno, dltmp.buf, dltmp.len);
                ^ 调用时没有任何长度检查
>        default: /* to keep gcc happy */
>                return (0);
>        case MOXA_LOAD_CODE:
>                i = moxaloadcode(dltmp.cardno, dltmp.buf, dltmp.len);
                ^ 调用时没有任何长度检查
                
在 moxaloadbios()中:

>static int moxaloadbios(int cardno, unsigned char __user *tmp, int len)
>{
>        void __iomem *baseAddr;
>        int i;
>
>        if(copy_from_user(moxaBuff, tmp, len))
                ^ copy_from_user没有进行任何长度检查
>                return -EFAULT;

在 moxaloadcode()中:

> static int moxaloadcode(int cardno, unsigned char __user *tmp, int len)
> {
>        void __iomem *baseAddr, *ofsAddr;
>        int retval, port, i;
>
>        if(copy_from_user(moxaBuff, tmp, len))
                ^ copy_from_user没有进行任何长度检查
>                return -EFAULT;

In moxaload320b():

>static int moxaload320b(int cardno, unsigned char __user *tmp, int len)
>{
>        void __iomem *baseAddr;
>        int i;
>
>        if(len > sizeof(moxaBuff))
                ^ signed int只有一个上界检查
>                return -EINVAL;
>        if(copy_from_user(moxaBuff, tmp, len))
                ^ copy_from_user的len可能大于sizeof(moxaBuff)
>                return -EFAULT;

攻击者可以控制长度值造成缓冲区溢出,精心构建提交数据可能以提升特权。

<*来源:grsecurity
  
  链接:http://lists.netsys.com/pipermail/full-disclosure/2005-January/030660.html
*>

建议:
厂商补丁:

Linux
-----
grsecurity linux 2.1.0已经修正此问题:

http://grsecurity.net/~spender/exploits_and_patches.tgz

延伸阅读

文章来源于领测软件测试网 https://www.ltesting.net/


关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备10010545号-5
技术支持和业务联系:info@testage.com.cn 电话:010-51297073

软件测试 | 领测国际ISTQBISTQB官网TMMiTMMi认证国际软件测试工程师认证领测软件测试网