本篇內(nèi)容主要講解“Linux包管理器snap本地提權(quán)漏洞分析”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“Linux包管理器snap本地提權(quán)漏洞分析”吧!
成都創(chuàng)新互聯(lián)公司專(zhuān)注于紹興企業(yè)網(wǎng)站建設(shè),成都響應(yīng)式網(wǎng)站建設(shè)公司,商城網(wǎng)站定制開(kāi)發(fā)。紹興網(wǎng)站建設(shè)公司,為紹興等地區(qū)提供建站服務(wù)。全流程定制制作,專(zhuān)業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,成都創(chuàng)新互聯(lián)公司專(zhuān)業(yè)和態(tài)度為您提供的服務(wù)
snap是一個(gè)Linux系統(tǒng)上的包管理軟件。在Ubuntu18.04后默認(rèn)預(yù)安裝到了系統(tǒng)中。2019年2月13日,Chris Moberly公開(kāi)了利用snap包管理工具的服務(wù)進(jìn)程snapd中提供的REST API服務(wù)因?qū)φ?qǐng)求客戶(hù)端身份鑒別存在問(wèn)題從而提權(quán)的漏洞細(xì)節(jié)。下面是利用已公開(kāi)的exp進(jìn)行提權(quán)成功后的截圖。
利用該漏洞可以讓普通用戶(hù)偽裝成root用戶(hù)向snapd提供的REST API發(fā)送請(qǐng)求。攻擊者利用精心構(gòu)造的安裝腳本或Ubuntu SSO可以讓并不具有sudo權(quán)限的普通用戶(hù)獲得執(zhí)行sudo的權(quán)限,從而獲得提升到root用戶(hù)權(quán)限的能力,達(dá)到本地提權(quán)的效果。
snapd是snap包管理器的一個(gè)服務(wù)進(jìn)程。它以root用戶(hù)權(quán)限在后臺(tái)運(yùn)行,并允許普通用戶(hù)以UNIX套接字的方式與其進(jìn)行通信,并提供服務(wù),其中一些特權(quán)操作需要鑒別用戶(hù)身份(uid)才能執(zhí)行。其中獲取客戶(hù)端信息的代碼最終會(huì)使用ucrednetGet(如下)函數(shù)來(lái)獲取客戶(hù)端用戶(hù)id,在該函數(shù)中會(huì)把字符串remoteAddr按";"分割后尋找"uid="字符串來(lái)判斷當(dāng)前用戶(hù)的uid,通常情況下,remoteAddr大致為“ pid=5100;uid=1002;socket=/run/snapd.socket;@”這樣的格式。從代碼邏輯可以看出,后面出現(xiàn)的"uid="結(jié)果會(huì)覆蓋前面得到的uid。攻擊者利用這一點(diǎn)即可通過(guò)構(gòu)造UNIX socket綁定地址,例如"/tmp/sock;uid=0;"。達(dá)到偽裝root用戶(hù)發(fā)出請(qǐng)求的目的。進(jìn)而通過(guò)snapd執(zhí)行一些特權(quán)操作達(dá)到提權(quán)的目的。
func ucrednetGet(remoteAddr string) (pid uint32, uid uint32, socket string, err error) {
...
for _, token := range strings.Split(remoteAddr, ";") {
var v uint64
...
} else if strings.HasPrefix(token, "uid=") {
if v, err = strconv.ParseUint(token[4:], 10, 32); err == nil {
uid = uint32(v)
} else {
break
}
目前漏洞細(xì)節(jié)已經(jīng)披露,官方也在2.37.1中予以修復(fù)。Ubuntu用戶(hù)可以通過(guò)apt update && apt-get install snap ,將snap升級(jí)至最新版本予以修復(fù)。
到此,相信大家對(duì)“Linux包管理器snap本地提權(quán)漏洞分析”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢(xún),關(guān)注我們,繼續(xù)學(xué)習(xí)!