submit()函数整数溢出漏洞

发布日期:2010-09-21
更新日期:2010-09-27

受影响系统:
Linux kernel 2.6.x
不受影响系统:
Linux kernel 2.6.36-rc4
描述:
--------------------------------------------------------------------------------
BUGTRAQ  ID: 43353
CVE(CAN) ID: CVE-2010-3067

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
 
  链接:
        https://bugzilla.redhat.com/show_bug.cgi?format=multiple&id=629441
*>

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

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

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

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wwsfdy.html