公眾號關注?“GitHubDaily”
設為 “星標”,帶你了解技術圈內新鮮事!
來自量子位
無需系統密碼,就能添加新的 sudo 用戶、獲取 root 權限,事后還能刪除不留痕跡。
這是 GitHub 安全研究員 Kevin Backhouse 發現的一個?Ubuntu?系統大漏洞。
這種攻擊方法非常簡單,Backhouse 在官方博客中寫道:“使用終端中的一些簡單命令,并單擊幾次鼠標,標準用戶就可以為自己創建一個管理員帳戶。”
目前還在維護的 Ubuntu 操作系統均受到影響,包括?20.10?以及?20.04、18.04、16.04?三個 LTS 版。
Backhouse 是如何操作的?我們接著往下看。
攻擊方法
首先打開終端,在你的主目錄下創建一個軟鏈接:
ln?-s?/dev/zero?.pam_environment
(注:如果以上命令無法運行,說明已經存在名為.pam_environment 的文件,請把這個文件重命名做好備份!)
接下來,在系統設置中打開?“區域和語言”,然后嘗試更改語言。
該對話框會凍結,只需忽略它,然后返回到終端即可。
此時,一個名為?accounts-daemon?的程序正在消耗 100%的 CPU 內核,因此你的計算機可能會變慢并開始變熱。
在終端中,刪除軟鏈接。否則,你可能無法使用自己的帳戶!
rm?.pam_environment
下一步是將?SIGSTOP?信號發送到 accounts-daemon,阻止它破壞該 CPU 內核。但是要做到這一點,首先需要知道 accounts-daemon 的 PID。
你可以通過運行?top?來找到 PID。由于 accounts-daemon 被卡在一個無限循環中,因此它很快進入 top 列表的頂部。
或者使用 pidof 命令來查找 PID:
$?pidof?accounts-daemon
597
接著用 kill 命令殺死 SIGSTOP 信號:
kill?-SIGSTOP?597
然后注銷帳戶,但首先需要設置一個計時器,保證在注銷后重置 accounts-daemon。否則,前面的努力都將白費。
nohup?bash?-c?“sleep?30s;?kill?-SIGSEGV?597;?kill?-SIGCONT?597”
注銷后等待幾秒鐘,讓 SIGSEGV 起效。如果漏洞利用成功,則會顯示一系列對話框,讓你創建一個新的用戶帳戶。這個新帳戶具有管理員權限,可以運行 sudo 命令。
Backhouse 將整個過程錄成了 2 分多鐘的視頻,不明白操作方法的可以前去觀看:
攻擊原理
該漏洞利用了 Ubuntu 系統中的兩個錯誤:
第一個是?accountservice,它是管理計算機上用戶帳戶的服務。
第二個是?GNOME 顯示管理器(gdm3),它可以處理登錄屏幕。
accounts-daemon 漏洞
accountsservice 守護程序(accounts-daemon)是一項系統服務,可以執行諸如創建新用戶帳戶或更改用戶密碼的操作,但也可以執行對安全性較不敏感的操作,例如更改用戶的圖標或首選語言。
Ubuntu 使用了經過修改的 accountservice 服務版本,添加了一個名為 is_in_pam_environment 的函數,該函數會在用戶的主目錄中查找一個名為.pam_environment 的文件并進行讀取。
將.pam_environment 鏈接到 /dev/zero 可以讓 accountservice 服務被拒絕。
因為 /dev/zero 實際上是磁盤上不存在的特殊文件。它由操作系統提供,其行為就像一個無限長的文件,其中每個字節均為 0。
當 is_in_pam_environment 嘗試讀取.pam_environment 時,它會通過軟鏈接重定向到 /dev/zero,然后由于 /dev/zero 無限長而陷入無限循環。
如此操作會讓 accounts-daemon 喪失其 root 權限,轉而采用用戶的較低特權。然后將 SIGSEGV 發送給帳戶守護程序使其崩潰。
GNOME 漏洞
GNOME 顯示管理器(gdm3)是 Ubuntu 用戶界面的基本組件。它可以處理用戶登錄和注銷時啟動和停止用戶會話之類的事情,還管理登錄屏幕。
當用戶進行新系統的初始設置時,會啟動一個對話框,它其實是一個單獨的應用程序,稱為 gnome-initial-setup。
當 gdm3 查詢到用戶數量為 0 時,會啟動這個程序。那么 gdm3 如何檢查系統上有多少用戶?通過詢問 accounts-daemon!
不幸的是,accounts-daemon 已經被我們前面的操作整崩潰了,所以 gdm3 在檢查超時后認為帳戶數量為 0,并啟動 gnome-initial-setup。
而初始化設置的用戶必須有管理員權限。
官方緊急修復
Backhouse 于 10 月 17 日向 Ubuntu 和 GNOME 維護人員報告了這些錯誤,官方已經最新代碼中提供了修復程序。建議所有 Ubuntu 用戶都盡快安裝更新。
不過,該漏洞僅對桌面版 Ubuntu 有效。如果使用的是命令行界面,或者是 GNOME 之外的其他桌面環境,則暫時不受影響。
博客地址:
https://securitylab.github.com/research/Ubuntu-gdm3-accountsservice-LPE
網友討論:https://news.ycombinator.com/item?id=25053238