2017-02-23 13:00:19
来源:安全客 作者:adlab_puky
阅读:1724次
点赞(0)
收藏
漏洞描述
漏洞编号:CVE-2017-6074漏洞发现者:Andrey Konovalov
漏洞危害:通过非特权进程获得内核代码执行进而提升权限
影响范围:Linux内核版本>2.6.18(2006年9月)。但DCCP(数据报拥塞控制协议)最早是在05年10月的Linux内核版本2.6.14中支持的。目前该漏洞与2017年2月17修复。详情请参看
https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=5edabca9d4cff7f1f2b68f0bac55ef99d9798ba4
漏洞细节
数据报拥塞控制协议(DCCP)是一个针对传输层中UDP的新传输的协议而发展出来,用来传输实时业务。他是一个可以进行拥塞控制的非可靠传输协议,并同时提供多种拥塞控制机制,在通信开始时由用户进行协商选择。
更多详细的介绍说明:
https://www.kernel.org/doc/Documentation/networking/dccp.txt
http://www.read.cs.ucla.edu/dccp/这个漏洞需要内核编译的时候开启CONFIG_IP_DCCP ,许多linux发行版本默认开启。
在当前DCCP实现中,如果dccp_rcv_state_process中的dccp_v6_conn_request返回“成功” ,dccp_type 为DCCP_PKT_REQUEST的packet的skb会被__kfree_skb强制释放。
但是,如果在socket上设置IPV6_RECVPKTINFO,则skb地址会被保存在ireq-> pktopts,然后dccp_v6_conn_request中会增加skb的引用计数,所以skb仍在使用中。然而,它仍然会在dccp_rcv_state_process中被释放。
修复的方式是调用consume_skb,它占用skb->users,而不是跳转到discard 然后调用__kfree_skb。
diff --git a/net/dccp/input.c b/net/dccp/input.c
index ba34718..8fedc2d 100644
--- a/net/dccp/input.c
+++ b/net/dccp/input.c
intdccp_rcv_state_process(structsock*sk,structsk_buff*skb, structdccp_hdr*dh,unsignedintlen) { structdccp_sock*dp=dccp_sk(sk); structdccp_skb_cb*dcb=DCCP_SKB_CB(skb); constintold_state=sk->sk_state; intqueued=0; if(sk->sk_state==DCCP_LISTEN){ if(dh->dccph_type==DCCP_PKT_REQUEST){ if(inet_csk(sk)->icsk_af_ops->conn_request(sk, skb)<0) return1; - gotodiscard; + consume_skb(skb); + return0; } if(dh->dccph_type==DCCP_PKT_RESET) gotodiscard; /*Caller(dccp_v4_do_rcv)willsendReset*/ dcb->dccpd_reset_code=DCCP_RESET_CODE_NO_CONNECTION; return1; }elseif(sk->sk_state==DCCP_CLOSED){ dcb->dccpd_reset_code=DCCP_RESET_CODE_NO_CONNECTION; return1; }要利用这个 double-free,可以把它转变成一个 use-after-free:
//第一次释放 kfree(dccp_skb) //在与dccp_skb相同的位置分配的另一个对象: some_object=kmalloc() //第二次释放,实际释放的是some_object对象 kfree(dccp_skb)此时some_object持有一个悬空指针,如此就构造出了一个UAF。攻击者可以控制对象,同时可以通过使用内核堆喷射技术写入任意数据到被覆盖对象。
如果被覆盖的对象有任何可触发的函数指针,攻击者可以在内核中执行任意代码。
Linux各发行版本对于该漏洞相关信息
debian:https://security-tracker.debian.org/tracker/CVE-2017-6074redhat:https://rhn.redhat.com/errata/RHSA-2017-0295.html
ubuntu:http://people.canonical.com/~ubuntu-security/cve/2017/CVE-2017-6074.html
suse:https://www.suse.com/security/cve/CVE-2017-6074/
PoC
thePoCwillpublishinafewdays,pleaseupdateyourlinuxkernel
修复建议
建议用户通过系统更新到最新发行版修复此漏洞参考
http://www.openwall.com/lists/oss-security/2017/02/22/3
https://zh.wikipedia.org/wiki/%E6%95%B0%E6%8D%AE%E6%8B%A5%E5%A1%9E%E6%8E%A7%E5%88%B6%E5%8D%8F%E8%AE%AEhttp://www.cve.mitre.org/cgi-bin/cvename.cgi?name=2017-6074
https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=5edabca9d4cff7f1f2b68f0bac55ef99d9798ba4
https://www.kernel.org/doc/Documentation/networking/dccp.txt
http://www.read.cs.ucla.edu/dccp/
本文由 安全客 原创发布,如需转载请注明来源及本文地址。
本文地址:http://bobao.360.cn/learning/detail/3529.html