linux使普通用户得到root权限的vmsplice系统调用漏洞解析[网络技术]
本文“linux使普通用户得到root权限的vmsplice系统调用漏洞解析[网络技术]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
From 幻泉之洲'blog
vmsplice系统调用是linux内核2.6.17第一次引入的,随 后被发现存在能让普通用户晋升到root权限的漏洞.该漏洞影响 的版本网络上笼统的说法是:2.6.17-2.6.24.1,实际上更切当的说是:2.6.17- 2.6.22.17,2.6.23-2.6.23.15 和 2.6.24-2.6.24.1.
关于这个漏洞,国内很少有人写过什么原创性的文章举行介绍,因为上研究生 操作系统课的课程报告就是做这个,所以把它放上来.漏洞固然已经补上,但学习其机理,还是对比有好处,有意思的.
1、预备知识
1. 本文的一些约定
这个颜色 的代码来自攻击程序
这个颜色的代码来自内核
这个颜色表示重要的地方,大概安装程序逻辑,下一步要进入的函数
所提到的攻击代码是本文附带的exp.c
2. vmsplice()介绍
原型:long vmsplice(int fd, const struct iovec *iov, unsigned long nr_segs, unsigned int flags);
此中:
struct iovec
{
void __user *iov_base;
__kernel_size_t iov_len;
};
这个系统调用将用户空间的内存映射到内核空间,从而避免了实际的内存写操作,提高了系统效率.这个功效的是主如果通过fs/splice.c的 do_vmsplice()来实现.
3. 有关Page的常量
#define PAGE_SHIFT 12
#define PAGE_SIZE (1UL << PAGE_SHIFT)
/*1UL:32位的unsigned int 1,左移12位,PAGE_SIZE=0×1000*/
#define PAGE_MASK (~(PAGE_SIZE-1))
/*PAGE_MASK=0×000*/
2、Splice系统调用漏洞考古
2006 Jun 18
在公布的Linux kernel 2.6.17中引入vmsplice(),用于提高性能.
没有人知道,对应的fs/splice.c中的get_iovec_page_array()函数存在漏洞.
2007 Oct 09
在公布的Linux kernel 2.6.23 中
加入了vmsplice_to_user()函数和copy_from_user_mmap_sem()函数,也存在一样的漏洞.
2007 Dec 03
ID为CVE-2008-0009和CVE-2008-0010的漏洞报告被提交到CVE.
辨别指出vmsplice_to_user()和copy_from_user_mmap_sem()存在这个漏洞.
但这两份报告有个错误:这两个漏洞存在于2.6.23-2.6.24而不是报告里说的2.6.22-2.6.24,因为这两个函数是在2.6.23里正式 被加进来的.
2008 Feb 05
ID为CVE-2008-0600的漏洞报告被提交到CVE
指出:
The vmsplice_to_pipe function in Linux kernel 2.6.17 through 2.6.24.1 does not validate a certain userspace pointer before dereference, which allows local users to gain root privileges via crafted arguments in a vmsplice system call, a different vulnerability than CVE-2008-0009 and CVE-2008-0010.
事实上,问题出在get_iovec_page_array()函数.但因为get_iovec_page_array()函数只被 vmsplice_to_pipe()调用,数据参数都来自vmsplice_to_pipe(),所以,get_iovec_page_array() 没有考证用户数据的合理性也可以被认为vmsplice_to_pipe()没有考证用户数据的合理性.
2008 Feb 08
在公布的Linux kernel 2.6.24.1和2.6.23.15补钉中补上了CVE-2008-0009和CVE-2008-0010提到这个这两个漏洞.
2008 Feb 09
ID为qaaz的Geek在milw0rm上公布了两个对应的POC代码,第一个是针对vmsplice_to_user()函数和 copy_from_user_mmap_sem()函数的,别的一个是针对get_iovec_page_array()函数,
2008 Feb 11
在公布的Linux kernel 2.6.24.2 、2.6.23.16和 2.6.22.18补钉中补上了get_iovec_page_array()函数的漏洞.
3、漏洞攻击效果
无图
4、漏洞攻击真实案例
This bug is being actively exploited in the wild — our server was just broken in to by an attacker using it. (They got a user’s password by previously compromising a machine somewhere else where that user had an account, and installed a modified ssh binary on it
以上是“linux使普通用户得到root权限的vmsplice系统调用漏洞解析[网络技术]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |