-
-
[原创]Linux Kernel CVE-2013-1763 Local Privilege Escalation Vulnerability 利用分析
-
发表于:
2013-7-28 22:43
5706
-
[原创]Linux Kernel CVE-2013-1763 Local Privilege Escalation Vulnerability 利用分析
近日闲的蛋疼, 刚开始把自己的Ubuntu执行命令sudo apt-get remove libc6, 然后又重新编内核,重新装各种东西,最终终于看到图形界面.
然后忽然网上出现了apache struts2的漏洞,又在思考tomcat的帐号在linux平台上如何get root.
于是准备搭环境自己黑自己一把.
上网搜了一下,最新的提权的漏洞是CVE-2013-1763, 影响的版本具多, 有现成的poc, 值得一试.
(1)漏洞描述
系统在处理sock_diag_handlers数组的时候, 未对传入的值进行验证, 从而导致越界,进而导致可执行代码的漏洞.
未授权用户可以通过执行代码, 得到root权限.
(2)漏洞产生的原因
首先看sock_diag_handlers的定义
static struct sock_diag_handler *sock_diag_handlers[AF_MAX]; //可以看出,这个指针数组最大为AF_MAX AF_MAX = 41.
static int __sock_diag_rcv_msg(struct sk_buff *skb, struct nlmsghdr *nlh)
{
int err;
struct sock_diag_req *req = NLMSG_DATA(nlh);
struct sock_diag_handler *hndl;
if (nlmsg_len(nlh) < sizeof(*req))
return -EINVAL;
hndl = sock_diag_lock_handler(req->sdiag_family);//这里传入sdiag_family的值,然后返回sock_diag_handlers中存放的hanlder.我们看一下sock_diag_lock_handler函数
if (hndl == NULL)
err = -ENOENT;
else
err = hndl->dump(skb, nlh);
sock_diag_unlock_handler(hndl);
return err;
}
----
static inline struct sock_diag_handler *sock_diag_lock_handler(int family)
{
if (sock_diag_handlers[family] == NULL)
request_module("net-pf-%d-proto-%d-type-%d", PF_NETLINK,
NETLINK_SOCK_DIAG, family);
mutex_lock(&sock_diag_table_mutex);
return sock_diag_handlers[family]; //这个函数没有对传入的family的值的范围,进行验证,从而造成数组越界.
}
if (hndl == NULL)
err = -ENOENT;
else
err = hndl->dump(skb, nlh);
struct sock_diag_handler {
__u8 family;//
int (*dump)(struct sk_buff *skb, struct nlmsghdr *nlh);
};
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!