linux ip协议栈 漏洞,【漏洞预警】雪藏11年:Linux kernel DCCP double-free 权限提升漏洞(CVE-2017-6074)...

本文详细介绍了Linux内核中的CVE-2017-6074漏洞,该漏洞允许非特权进程通过数据报拥塞控制协议(DCCP)提升权限,执行内核代码。漏洞由于DCCP处理过程中的内存管理错误导致double-free问题,可能引发use-after-free情况,进而允许攻击者执行任意内核代码。修复方案是使用consume_skb代替直接释放skb。建议用户更新内核到最新版本以消除风险。
摘要由CSDN通过智能技术生成

85546

漏洞描述

漏洞编号:CVE-2017-6074

漏洞发现者:Andrey Konovalov

漏洞危害:通过非特权进程获得内核代码执行进而提升权限

影响范围:Linux内核版本>2.6.18(2006年9月)。但DCCP(数据报拥塞控制协议)最早是在05年10月的Linux内核版本2.6.14中支持的。目前该漏洞与2017年2月17修复。详情请参看

漏洞细节

数据报拥塞控制协议(DCCP)是一个针对传输层中UDP的新传输的协议而发展出来,用来传输实时业务。他是一个可以进行拥塞控制的非可靠传输协议,并同时提供多种拥塞控制机制,在通信开始时由用户进行协商选择。

更多详细的介绍说明:

这个漏洞需要内核编译的时候开启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

int dccp_rcv_state_process(struct sock *sk, struct sk_buff *skb,

struct dccp_hdr *dh, unsigned int len)

{

struct dccp_sock *dp = dccp_sk(sk);

struct dccp_skb_cb *dcb = DCCP_SKB_CB(skb);

const int old_state = sk->sk_state;

int queued = 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) 

return 1;

-goto discard;

+consume_skb(skb);

+return 0;

}

if (dh->dccph_type == DCCP_PKT_RESET)

goto discard;

/* Caller (dccp_v4_do_rcv) will send Reset */

dcb->dccpd_reset_code = DCCP_RESET_CODE_NO_CONNECTION;

return 1;

} else if (sk->sk_state == DCCP_CLOSED) {

dcb->dccpd_reset_code = DCCP_RESET_CODE_NO_CONNECTION;

return 1;

}

要利用这个 double-free,可以把它转变成一个 use-after-free:

//第一次释放

kfree(dccp_skb)

//在与dccp_skb相同的位置分配的另一个对象:

some_object = kmalloc()

//第二次释放,实际释放的是some_object对象

kfree(dccp_skb)

此时some_object持有一个悬空指针,如此就构造出了一个UAF。攻击者可以控制对象,同时可以通过使用内核堆喷射技术写入任意数据到被覆盖对象。

如果被覆盖的对象有任何可触发的函数指针,攻击者可以在内核中执行任意代码。

Linux各发行版本对于该漏洞相关信息

PoC

修复建议

建议用户通过系统更新到最新发行版修复此漏洞

参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值