<dd id="yzu3f"><tr id="yzu3f"><kbd id="yzu3f"></kbd></tr></dd>

              安基網 首頁 資訊 安全報 查看內容

              Linux 內核本地提權嚴重漏洞預警

              2019-2-28 10:51| 投稿: xiaotiger |來自: 互聯網


              免責聲明:本站系公益性非盈利IT技術普及網,本文由投稿者轉載自互聯網的公開文章,文末均已注明出處,其內容和圖片版權歸原網站或作者所有,文中所述不代表本站觀點,若有無意侵權或轉載不當之處請從網站右下角聯系我們處理,謝謝合作!

              摘要: 漏洞編號和級別 CVE 編號:CVE-2019-8912,危險級別:嚴重,CVSS 分值:9.8 影響版本 Linux 2 .6 ~ Linux 4.20.11 Red Hat Enterprise Linux 7,Package: kernel-alt Debian,Release:Jessie,Version:3.16.56-1+ ...

              漏洞編號和級別

              CVE 編號:CVE-2019-8912,危險級別:嚴重,CVSS 分值:9.8

              影響版本

              Linux 2 .6 ~ Linux 4.20.11

              Red Hat Enterprise Linux 7,Package: kernel-alt

              Debian,Release:Jessie,Version:3.16.56-1+deb8u1

              Debian,Release:Jessie (security),Version:3.16.56-1

              Debian,Release:stretch,Version:4.9.144-3

              Debian,Release:stretch (security),Version:4.9.110-3+deb9u6

              Debian,Release:buster,Version:4.19.16-1

              Debian,Release:sid,Version:4.19.20-1

              漏洞概述

              近日,Linux git 中發布一個 commit 補丁,該補丁對應的漏洞是一個本地提權漏洞 CVE-2019-8912,漏洞影響范圍較廣。根據 git 中的 commit 信息可知,該漏洞出現在內核 crypto/af_alg.c中的af_alg_release 函數中,可以通過 sockfs_setattr 函數觸發,漏洞類型是 use after free,可以導致本地代碼執行進行權限提升。

              Linux Crypto 模塊簡介Linux 內核從版本2.5 開始引入了加密機制,為內核提供加密功 能,應用包括:硬件加密設備驅動、內核代碼簽名、硬件隨機數生成器、文件系統加密等。 從版本 2.6.6 之后,內核源碼提供了豐富的密碼學算法支持,并可以通過配置編譯選項將加 密算法作為模塊編入內核。內核編譯配置如下圖所示:

              但是該加密功能提供的 API 接口只能在內核層進行使用,用戶層無法調用。2010 年, 有位維護者向Linux Crypto 維護組提交了一份 Crypato API 用戶接口,類似于netlink,基 于socket 進行通信,便于用戶層訪問內核加密子系統。功能實現代碼在文件crypto/af_alg.c 中。

              漏洞驗證

              漏洞存在于 crypto 模塊中的 af_alg_release()函數中。af_alg_release()函數在進行對象 釋放時,未將對象置空。對應commit:9060cb719e61b685ec0102574e10337fa5f445ea 補 丁代碼如下,補丁添加了一行代碼:sock->sk = NULL;

              在未添加補丁之前,如果該 sock->sk 引用計數是1,當調用sock_put()進行釋放后沒有 置空,就直接返回,會產生一個 sock->sk 懸掛指針。

              為了分析這個漏洞的前因后果,先分析下相關的socket 代碼。對每個新創建的socket, Linux 內核都將在 sockfs 中創建一個新的 inode。Sockfs_*系列函數就是用來操作 sockfs 文 件系統的。Sockfs_setattr()函數就是設置 socket 文件屬性的。在 net/socket.c 文件中 sockfs_setattr()函數將會使用sock->sk 對象。

              根據提交的commit:9060cb719e61b685ec0102574e10337fa5f445ea 細節可知,在該 漏洞披露之前,Linux 已經修復了sock_close()和sockfs_setattr()之間的條件競爭漏洞,對應 commit 為 6d8c50dcb029872b298eea68cc6209c866fd3e14,具體先看下 sockfs_setattr() 函數中的補丁。補丁代碼如下:

              行 544,首先判斷 sock->sk 是否為空,如果不為空,行 545 再將用戶層傳進來的 iattr->ia_uid 賦值為sock->sk->sk_uid。然后看sock_close ()函數中的補丁。補丁代碼如下:

              行1186,替換成了新函數__sock_release(),該函數多了一個參數inode。__sock_release() 函數實現如下:

              行 601,對 inode 進行判斷,如果不為空,然后調用 inode_lock()函數對其進行上鎖。 其實該 inode 本身和要進行釋放的 socket 對象是對應的。行 603,調用 ops 中 release()函 數進行釋放操作。這個ops 中release()函數只是一個函數指針,最終會根據用戶注冊哪種套 接字類型決定。行 604,再次判斷 inode 是否為空,如果不為空,再進行解鎖。通過對 inode 加鎖,防止在對socket 對象釋放時進行其他操作。

              從 commit :6d8c50dcb029872b298eea68cc6209c866fd3e14 提供的細節可知, sock_close()函數和 sockfs_setattr()函數之間的條件競爭可以通過用戶層 fchownat()函數引 發。根據man 手冊可知,該函數是用于設置文件屬性的,例如 uid 和gid,在內核中對應的 sockfs_setattr()函數,如下圖所示:

              細節中描述,該函數不會保持文件 fd 的引用計數,這也是導致存在條件競爭的原因。 根據前文可知,sockfs_setattr()函數其實就是設置 UID 才操作sock->sk 對象的。

              如果再繼續向前追溯的話,從 commit:86741ec25462e4c8cdce6df2f41ead05568c7d5e 提供的細節可知UID 的來龍去脈。該補丁提交于2016 年。由于socket 協議中的結構體struct sock 在大多時候都是和用戶層的 sockets 一一映射的,sockets 對應的內核結構體為 struct socket。考慮到方便操作,便通過向 struct sock 添加一個sk_uid 字段來簡化對struct socket中的UID 的匹配,也因此添加了一個關鍵函數。如下圖所示:

              由此可知,本來存在于 sock_close()和sockfs_setattr 之間的條件競爭已經被修復,由于 crypto/af_alg.c 中af_alg_release()函數沒有將釋放后的 sock->sk 及時置空,導致前面所做的 安全補丁全部失效。

              修復建議

              該漏洞補丁已經給出,請及時升級到最新版本。https://github.com/torvalds/linux/co mmit/9060cb719e61b685ec0102574e10337fa5f445ea

              參考鏈接

              https://access.redhat.com/security/cve/cve-2019-8912

              https://nvd.nist.gov/vuln/detail/CVE-2019-8912

              https://mp.weixin.qq.com/s?__biz=MzAwNTI1NDI3MQ==&mid=2649613887&idx=1 &sn=04b441a67101ef2463e264336b7ccc28&chksm=83063b2fb471b239f308e8906fabb5 1a768b3f492b1f88ed4ab259ca062c1ff1e2bcefaaed29&mpshare=1&scene=1&srcid=0225 kHPQ674XTCwBWcOAH1ef#rd



              小編推薦:欲學習電腦技術、系統維護、網絡管理、編程開發和安全攻防等高端IT技術,請 點擊這里 注冊賬號,公開課頻道價值萬元IT培訓教程免費學,讓您少走彎路、事半功倍,好工作升職加薪!

              本文出自:https://www.toutiao.com/a6662599627633590796/

              免責聲明:本站系公益性非盈利IT技術普及網,本文由投稿者轉載自互聯網的公開文章,文末均已注明出處,其內容和圖片版權歸原網站或作者所有,文中所述不代表本站觀點,若有無意侵權或轉載不當之處請從網站右下角聯系我們處理,謝謝合作!


              鮮花

              握手

              雷人

              路過

              雞蛋

              相關閱讀

              最新評論

               最新
              返回頂部
              十一选五奖金对照表