本文原創(chuàng)作者:kuma
來源:FreeBuf.COM
漏洞編號
CVE-2017-6074
漏洞概述
Linux內(nèi)核近日又曝出權(quán)限提升漏洞,該漏洞可追溯至2005年,漏洞影響Linux操作系統(tǒng)主要發(fā)行版本,包括Redhat、Debian、OpenSUSE和Ubuntu。利用該漏洞,攻擊者可以從低權(quán)限進(jìn)程中進(jìn)行內(nèi)核代碼執(zhí)行。目前已知受影響的最老版本是2.6.18(2006年9月),不過該漏洞可能在先前的版本中已經(jīng)存在,或許從支持DCCP開始(2005年10月的2.6.14)就已經(jīng)存在問題了。
在Seclists.org發(fā)布該漏洞的作者Andrey Konovalov表示,很快就會放出PoC,在此期間給予修復(fù)時間。
安全研究員Andrey Konovalov最近用Syzkaller fuzzing工具,發(fā)現(xiàn)了數(shù)據(jù)報擁塞控制協(xié)議(DCCP)實現(xiàn)中的Linux內(nèi)核漏洞,漏洞潛伏時間超過10年。
DCCP協(xié)議
DCCP協(xié)議是面向消息的傳輸層協(xié)議,可最小化數(shù)據(jù)包報頭帶來的開銷和終端處理的工程量。該協(xié)議可建立、維護和拆卸不可靠連接的數(shù)據(jù)流以及對不可靠數(shù)據(jù)流進(jìn)行擁塞控制。
漏洞詳情
這個漏洞是一個使用后釋放漏洞,具體而言,就是“套接字中設(shè)置了IPV6_RECVPKTINFO 選項時,Linux內(nèi)核的DCCP協(xié)議實現(xiàn)針對DCCP_PKT_REQUEST包釋放SKB(套接字緩沖區(qū))資源。”(“DCCP protocol implementation freed SKB (socket buffer) resources for a DCCP_PKT_REQUEST packet when the IPV6_RECVPKTINFO option is set on the socket.”)
該DCCP雙重釋放漏洞可允許本地低權(quán)限用戶修改Linux內(nèi)核內(nèi)存,導(dǎo)致拒絕服務(wù)(系統(tǒng)崩潰),或者提升權(quán)限,獲得系統(tǒng)的管理訪問權(quán)限。
在當(dāng)前的DCCP實現(xiàn)中,如果dccp_v6_conn_request成功返回,就會通過__kfree_skb in dccp_rcv_state_process針對DCCP_PKT_REQUEST包強制釋放一個skb。
但是,如果套接字中設(shè)置了IPV6_RECVPKTINFO,該skb的地址會被保存至ireq->pktopts,這個skb的引用數(shù)是在dccp_v6_conn_request增加,所以這個skb仍在使用中。不過,這個skb還是會在dccp_rcv_state_process中被釋放。
攻擊者使用某些內(nèi)核堆噴射技術(shù)就能控制任意對象,并用任意數(shù)據(jù)重寫其內(nèi)容。如果重寫過的對象中包含任何可觸發(fā)的函數(shù)指針,攻擊者便可在該內(nèi)核中執(zhí)行任意代碼。
這個漏洞并不是遠(yuǎn)程代碼執(zhí)行漏洞,所以攻擊者必須擁有系統(tǒng)本地賬戶,才能利用該漏洞。
兩個月前,Linux內(nèi)核也曝出了類似的提權(quán)漏洞CVE-2016-8655,該漏洞可以追溯到2011年,低權(quán)限本地用戶利用Linux內(nèi)核af_packet實現(xiàn)中的競爭條件,可獲得root權(quán)限(漏洞詳情:http://www.freebuf.com/vuls/122152.html)。
修復(fù)方案
手動修復(fù):調(diào)用consume_skb,而非直接goto discard并調(diào)用__kfree_skb。
更詳細(xì)的修復(fù)方案請點擊這里。如果你是高級Linux用戶,那么可以應(yīng)用補丁,重新構(gòu)建內(nèi)核,或者等待發(fā)行商發(fā)布更新。
原文地址:http://www.freebuf.com/news/127620.html