Linux包管理器snap本地提權漏洞安全通告

發布時間 2019-02-15

漏洞編號和級別


CVE編號:CVE-2019-7304,危險級別:高危,CVSS分值:官方未評定


影響版本


snapd 2.28 至2.37版本


漏洞概述


snap是一個Linux系統上的包管理軟件。在Ubuntu18.04后默認預安裝到了系統中。2019213日,Chris Moberly公開了利用snap包管理工具的服務進程snapd中提供的REST API服務因對請求客戶端身份鑒別存在問題從而提權的漏洞細節。


利用該漏洞可以讓普通用戶偽裝成root用戶向snapd提供的REST API發送請求。攻擊者利用精心構造的安裝腳本或Ubuntu SSO可以讓并不具有sudo權限的普通用戶獲得執行sudo的權限,從而獲得提升到root用戶權限的能力,達到本地提權的效果。


漏洞驗證


EXPhttps://shenaniganslabs.io/2019/02/13/Dirty-Sock.html


snapdsnap包管理器的一個服務進程。它以root用戶權限在后臺運行,并允許普通用戶以UNIX套接字的方式與其進行通信,并提供服務,其中一些特權操作需要鑒別用戶身份(uid)才能執行。其中獲取客戶端信息的代碼最終會使用ucrednetGet(如下)函數來獲取客戶端用戶id,在該函數中會把字符串remoteAddr";"分割后尋找"uid="字符串來判斷當前用戶的uid,通常情況下,remoteAddr大致為“ pid=5100;uid=1002;socket=/run/snapd.socket;@”這樣的格式。從代碼邏輯可以看出,后面出現的"uid="結果會覆蓋前面得到的uid。攻擊者利用這一點即可通過構造UNIX socket綁定地址,例如"/tmp/sock;uid=0;"。達到偽裝root用戶發出請求的目的。進而通過snapd執行一些特權操作達到提權的目的。






修復建議


目前漏洞細節已經披露,官方也在2.37.1中予以修復。


Ubuntu用戶可以通過apt update && apt-get install snap ,將snap升級至最新版本予以修復。

https://people.canonical.com/~ubuntu-security/cve/2019/CVE-2019-7304.html


參考鏈接


https://shenaniganslabs.io/2019/02/13/Dirty-Sock.html

https://initblog.com/2019/dirty-sock/