Linux Kernel SGI GRU驱动单字节溢出漏洞


发布日期:2009-07-16
更新日期:2009-07-22

受影响系统:
Linux kernel 2.6.x
描述:
--------------------------------------------------------------------------------
BUGTRAQ  ID: 35753
CVE(CAN) ID: CVE-2009-1897

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

Linux kernel的drivers/misc/sgi-gru/gruprocfs.c驱动文件中存在单字节溢出漏洞:

static ssize_t options_write(struct file *file, const char __user *userbuf,
                             size_t count, loff_t *data)
{
        unsigned long val;
        char buf[80];

        if (copy_from_user
            (buf, userbuf, count < sizeof(buf) ? count : sizeof(buf)))
                return -EFAULT;
        buf[count - 1] = '';
        if (!strict_strtoul(buf, 10, &val))
                gru_options = val;

        return count;
}

这个函数用于处理对相关procfs文件的写操作,仅在用户控制的count小于sizeof(buf)(根据之前分配,这个值为80)的情况下才会调用copy_from_user()。但是空终止没有执行这个检查便直接使用了受用户控制的count值减去1。因此,可以+w访问procfs文件的用户可以向内核内存中的任意位置写入一个空字节。

<*来源:Michael Buesch (mb@bu3sch.de)
 
  链接:http://xorl.wordpress.com/2009/07/21/linux-kernel-sgi-gru-driver-off-by-one-overwrite/
*>

建议:
--------------------------------------------------------------------------------
厂商补丁:

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

http://lkml.org/lkml/2009/7/20/348

相关内容