Linux Kernel do_io_submit()函数整数溢出漏洞

受影响系统:

Linux kernel 2.6.x

不受影响系统:

Linux kernel 2.6.36-rc4

描述:

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

Linux Kernel的fs/aio.c文件中的do_io_submit函数存在整数溢出漏洞,本地用户可以通过io_submit调用导致拒绝服务。

io_submit系统调用直接调用了do_io_submit()函数:

SYSCALL_DEFINE3(io_submit, aio_context_t, ctx_id, long, nr,
        struct iocb __user * __user *, iocbpp)
{
    return do_io_submit(ctx_id, nr, iocbpp, 0);
}

do_io_submit仅检查了nr是否小于0,但没有检查access_ok乘积是否会溢出:

long do_io_submit(aio_context_t ctx_id, long nr,
          struct iocb __user *__user *iocbpp, bool compat)
{

    if (unlikely(!access_ok(VERIFY_READ, iocbpp, (nr*sizeof(*iocbpp)))))
        return -EFAULT;

之后对__get_user_nocheck()使用了这个循环,这并不安全:


    for (i=0; i<nr; i++) {
        struct iocb __user *user_iocb;
        struct iocb tmp;

        if (unlikely(__get_user(user_iocb, iocbpp + i))) {
            ret = -EFAULT;
            break;
        }

<*来源:Tavis Ormandy (taviso@gentoo.org
  
  链接:
http://secunia.com/advisories/41284/
        https://bugzilla.redhat.com/show_bug.cgi?format=multiple&id=629441
*>

建议:

厂商补丁:

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

http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=75e1c70fc31490ef8a373ea2a4bea2524099b478

发表评论?

0 条评论。

发表评论