網路調度程序中允許 root 存取的漏洞

Microsoft 的安全研究人員在代號為 Nimbuspwn 的網路調度程序服務中發現了兩個漏洞(CVE-2022-29799、CVE-2022-29800),這些漏洞允許非特權使用者以 root 權限執行任意命令。 該問題已在 networkd-dispatcher 2.2 版本中修復。 目前還沒有關於發行版(Debian、RHEL、Fedora、SUSE、Ubuntu、Arch Linux)發布更新的資訊。

Networkd-dispatcher在許多Linux發行版中都有使用,包括Ubuntu,它使用後台進程systemd-networkd來配置網路參數,並執行與NetworkManager-dispatcher類似的功能,即用於在網路連線狀態變更時啟動腳本,例如,用於在主網路連線建立後啟動VPN。

與networkd-dispatcher關聯的後台進程會作為root運作並透過D-Bus接收事件訊號。 與網路連線狀態變更相關的事件資訊由 systemd-networkd 服務傳送。 問題是非特權使用者可以產生不存在的狀態事件並觸發其腳本以 root 身分執行。

Systemd-networkd 設計為僅執行位於 /etc/networkd-dispatcher 目錄中的系統處理程序腳本,使用者無法取代此腳本,但由於檔案路徑處理程式碼中的漏洞 (CVE-2022-29799),出現了超出範圍的基本目錄和啟動任意腳本的可能性。 特別是,在形成腳本的檔案路徑時,使用了透過D-Bus傳輸的OperationalState和AdministrativeState值,其中特殊字元沒有被清除。 攻擊者可以產生自己的狀態,其名稱包含字元“../”,並將網路調度程序呼叫重定向到另一個目錄。

第二個漏洞 (CVE-2022-29800) 與競爭條件有關 - 在檢查腳本參數(屬於 root)和運行它之間,有很短的一段時間,足以替換文件並繞過檢查是否腳本屬於root用戶。 此外,networkd-dispatcher 不會檢查符號鏈接,包括透過 subprocess.Popen 呼叫運行腳本時,這顯著簡化了攻擊的組織。

操作技巧:

  • 建立一個目錄“/tmp/nimbuspwn”和一個指向目錄“/sbin”的符號連結“/tmp/nimbuspwn/poc.d”,用於檢查 root 擁有的可執行檔。
  • 對於“/sbin”中的可執行文件,會在“/tmp/nimbuspwn”目錄中創建同名文件,例如,對於文件“/sbin/vgs”,可執行文件“/tmp/nimbuspwn/vgs”為創建,由非特權用戶擁有,其中放置攻擊者想要運行的程式碼。
  • 訊號透過 D-Bus 傳送到網路調度程序進程,指示 OperationalState 中的值「../../../tmp/nimbuspwn/poc」。 若要在命名空間「org.freedesktop.network1」中傳送訊號,可以使用將其處理程序連接到 systemd-networkd 的功能,例如,透過 gpgv 或 epmd 進行操作,或者您可以利用 systemd-networkd預設情況下不執行(例如,在Linux Mint 上)。
  • 收到訊號後,Networkd-dispatcher 會建立 root 使用者擁有的可執行檔列表,並在目錄「/etc/networkd-dispatcher/../../../tmp/nimbuspwn/poc.d」中可用,它實際上連結到“/sbin”。
  • 當收到檔案清單但尚未啟動腳本時,符號連結將從“/tmp/nimbuspwn/poc.d”重定向到“/tmp/nimbuspwn”,並且networkd-dispatcher將啟動由具有root 權限的攻擊者託管的腳本。

網路調度程序中允許 root 存取的漏洞


來源: opennet.ru

添加評論