Linux Kernel sock_sendpage()函数空指针引用漏洞


发布日期:2009-08-13
更新日期:2009-08-14

受影响系统:
Linux kernel 2.6.x
Linux kernel 2.4.x
描述:
--------------------------------------------------------------------------------
BUGTRAQ  ID: 36038
CVE(CAN) ID: CVE-2009-2692

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

在Linux内核中,每个套接字都有一个名为proto_ops的相关操作结构,其中包含有用于实现各种功能(如接受、绑定、关闭等)的函数指针。如果对特定套接字的操作没有实现,就应将相关的函数指针指向预定义的存根。例如,如果没有定义accept功能,就应指向sock_no_accept()。但是,如果某些指针没有初始化,就可能出现其他情况。例如,sock_sendpage()函数在引用函数指针之前没有执行验证,因此依赖于proto_ops结构的初始化情况。

这个漏洞可能被用于获得本地权限提升。如果要利用这个漏洞,攻击者必须能够在0地址创建包含有将以内核权限执行代码的映射,然后使用以下序列触发有漏洞的操作:

/* ... */
    int fdin = mkstemp(template);
    int fdout = socket(PF_PPPOX, SOCK_DGRAM, 0);

    unlink(template);

    ftruncate(fdin, PAGE_SIZE);

    sendfile(fdout, fdin, NULL, PAGE_SIZE);
/* ... */

请注意sendfile()只是在套接字中导致sendpage操作的方法之一。

<*来源:Tavis Ormandy (taviso@gentoo.org)
 
  链接:http://marc.info/?l=bugtraq&m=125019106315517&w=2
        http://blog.cr0.org/2009/08/linux-null-pointer-dereference-due-to.html
        http://secunia.com/advisories/36278/
*>

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

警 告

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

http://milw0rm.com/exploits/9435
http://milw0rm.com/exploits/9436

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

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

http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=e694958388c50148389b0e9b9e9e8945cf0f1b98

相关内容