允許您替換其他人終端中的轉義序列的漏洞

util-linux 軟體包中提供的 wall 公用程式中已發現一個漏洞 (CVE-2024-28085),該漏洞旨在向終端機發送訊息,允許透過操縱轉義序列對其他使用者的終端進行攻擊。這個問題是由於 wall 實用程式會阻止輸入流上的轉義序列而不是在命令列參數上這樣做,從而允許攻擊者在其他使用者的終端上轉義轉義序列。

例如,執行 'wall $(printf "\033[33mHI")' 您可以用黃色列印“HI”。透過使用可讓您移動指針、清除和替換螢幕上內容的轉義序列,您可以模擬在另一個使用者的終端機中顯示 sudo 密碼提示。如果使用者沒有註意到這個伎倆並輸入了他的密碼,那麼該密碼將作為一條不存在的命令出現在輸入歷史記錄中(事實上,使用者將在命令列上輸入他的密碼而不是命令)。 “\033[3A” // 將遊標向上移動 3 行 “\033[K” // 刪除先前的輸出 “[sudo] password for a_user:” // 顯示一個虛擬 sudo 請求 “\033[?25l” / / 設定背景顏色隱藏輸入“\033[38;2;48;10;36m”

當發出未找到輸入的命令的警告時,許多發行版都會執行 /usr/lib/command-not-found 處理程序,該處理程序會嘗試識別包含遺失命令的套件並提供有關是否可以安裝該套件的提示。問題是,當啟動“command-not-found”處理程序時,一個不存在的命令會作為命令列參數傳遞給它,該參數在查看系統上的進程時可見(例如,當嘗試運行已卸載的實用程式時) “xsnow”、“/usr”將在進程清單 /lib/command-not-found - xsnow 中可見”)。因此,攻擊者可以監視正在運行的進程(例如,透過分析「/proc/$pid/cmdline」的出現來預測PID號)並確定受害者在命令列上輸入的密碼。

為了讓使用者輸入密碼以回應虛構的 sudo 提示,有人提出了一個技巧,其本質是追蹤進程清單中 sudo 實用程式的實際啟動,等待它完成,然後之後立即穿過「牆」進行攻擊。透過操縱轉義序列,攻擊者可以在實際執行 sudo 後用偽造的密碼重新輸入提示替換訊息。受害者可能認為他在輸入密碼時犯了一個錯誤,並再次輸入密碼,從而在「command-not-found」處理程序的參數中洩露了密碼。

成功的攻擊需要將“mesg”模式設為“y”,這是 Ubuntu、Debian 和 CentOS/RHEL 中的預設值。該攻擊已在 Ubuntu 22.04 中使用 gnome-terminal 的預設配置進行了演示。在Debian 中,攻擊很困難,因為發行版中預設未啟用「command-not-found」處理程序,而在CentOS/RHEL 中,攻擊將不起作用,因為wall 實用程式安裝時沒有setgid 標誌,並且不會執行任何操作。無法存取其他人的終端。使用Windows終端機時,攻擊以變更剪貼簿的內容可以修改。

該漏洞自 2013 年起就存在於 util-linux 軟體包中,2.24 版本添加了在 wall 命令列上指定訊息的功能,但忘記清理轉義序列。昨天發布的 util-linux 2.40 中包含了對該漏洞的修復。值得注意的是,在嘗試修復 util-linux 2.39 版本中的漏洞時,發現了另一個類似的漏洞,該漏洞允許透過操作區域設定來替換控製字元。

來源: opennet.ru

添加評論