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
 
  链接:?l=bugtraq&m=125019106315517&w=2
       
       
*>

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

警 告

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


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

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

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

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

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