2016linux内核漏洞,Linux内核提权漏洞(CVE-2016-8655)

操作机:Ubuntu 15.10(内核版本4.2.0)

chocobo_root:是本次试验的POC文件,通过执行它来验证漏洞

漏洞简介

此漏洞可用于从未授权进程中执行内核代码,***者只需要本地普通权限,就能利用该漏洞导致拒绝服务(系统奔溃)或提升到管理员权限。

漏洞危害

***者可以利用漏洞从普通权限提升到管理员权限,执行任意指令,直接威胁服务器的安全

影响范围

Linux内核(2011年4月19日发行)开始就受影响了,直到2016年11月30日修复。

( 注:这里并非指从11年到16年所有的Linux内核都会受到影响,敬请依据各系统情况而定)

实验步骤

本实验首先分析其原理,然后利用POC对漏洞进行验证

步骤1:分析漏洞

本步骤将分析其漏洞产生的原理

这个漏洞问题出在inside packet_set_ring() 和 packet_setsockopt()函数中,我们可以看到当套接字使用PACKET_RX_RING选项时候,packet_set_ring()会调用setsockopt()函数,如下:switch (po->tp_version) {

case TPACKET_V3:

/* Transmit path is not supported. We checked

* it above but just being paranoid

*/

if (!tx_ring)

init_prb_bdqc(po, rb, pg_vec, req_u);

break;

default:

break;

}

在上述代码中可以看到,如果套接字的版本是TPACKET_V3,一个 timer_list对象将会在init_prb_bdqc()调用时被 packet_set_ring()初始化。

上述函数的流程如下:

packet_set_ring()->init_prb_bdqc()->prb_setup_retire_blk_timer()->prb_init_blk_timer()->prb_init_blk_timer()->init_timer()

当套接字关闭,packet_set_ring()会再次被调用,如果packet的版本> TPACKET_V2,会释放和删除先前初始化的定时器:

if (closing && (po->tp_version > TPACKET_V2)) {

/* Because we don't support block-based V3 on tx-ring */

if (!tx_ring)

prb_shutdown_retire_blk_timer(po, rb_queue);

}

当packet版本为TPACKET_V1时,init_prb_bdqc()将会在packet_setsockopt()后被执行,在packet_set_ring() 函数前返回。

ring buffer被初始化后,可以尝试拒绝改变套接字版本。但是这样的校验是不完整的。case PACKET_VERSION:

{

...          if (po->rx_ring.pg_vec || po->tx_ring.pg_vec)

return -EBUSY;

在 packet_set_ring()中init_prb_bdqc() 和 swap(rb->pg_vec, pg_vec) 之间的调用有足够的空间来竞争这条代码路径

当套接字关闭,packet_set_ring()将不会删除定时器,因此这时套接字的版本为TPACKET_V1,timer_list 结构体描述定时器对象定位在内部的packet_sock结构体中,套接字将调用kfree()释放。

我们可以在通过UAF利用定时器对象上对SLAB分配器实现不同的中毒***,这最终会导致当定时器过期内核跳到处理函数。

新建AF_PACKE套接字你需要CAP_NET_RAW在你的网络命名空间 ,然而系统中非权限的进程在非权限的命名空间可以获得这个能力(Ubuntu, Fedora等发行版),这个漏洞可以在容器内触发,从而***整个主机内核。在android上,有 gid=3004/AID_NET_RAW的进程可以新建AF_PACKET套接字 (mediaserver),从而触发这个漏洞。

使用POC验证漏洞

uname -a            查看系统内核版本

id                  查看用户属性

测试

709d61f870e1792501095c3dc9b1e3b3.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值