Exim 中的嚴重漏洞允許以 root 權限在伺服器上執行程式碼

在 Exim 郵件伺服器中 已確定 批判的 脆弱性 (CVE-2019,10149),這可能會導致在處理特製請求時以 root 權限在伺服器上遠端執行程式碼。 在 4.87 到 4.91 版本中或使用 EXPERIMENTAL_EVENT 選項建置時,注意到了利用該問題的可能性。

在預設配置中,本機使用者可以在沒有不必要的複雜性的情況下執行攻擊,因為應用了「驗證=收件者」ACL,它對外部位址執行額外的檢查。 當設定發生變更時,例如充當另一個網域的輔助 MX、刪除「verify=recipient」ACL 或對 local_part_suffix 進行某些更改,可能會發生遠端攻擊。 如果攻擊者能夠將與伺服器的連線保持開啟 7 天(例如,每分鐘發送一個位元組以繞過逾時),則遠端攻擊也是可能的。 同時,可能存在更簡單的攻擊向量來遠端利用該問題。

此漏洞是由於 /src/deliver.c 檔案中定義的 Deliver_message() 函數中收件人地址驗證不正確造成的。 透過操縱位址格式,攻擊者可以將其資料替換為透過 root 權限的 execv() 函數呼叫的命令的參數。 操作不需要使用用於緩衝區溢位或記憶體損壞的複雜技術;簡單的字元替換就足夠了。

該問題與地址轉換結構的使用有關:

交付本地部分 = 展開字串(
string_sprintf("${local_part:%s}", new->address));
交付域=展開字串(
string_sprintf("${網域名稱:%s}", new->address));

Expand_string() 函數是一個過於複雜的組合器,包括識別命令“${run{commandargs}”,這會導致啟動外部處理程序。 因此,要在 SMTP 會話中進行攻擊,本機使用者只需發送類似「RCPT TO “username+${run{...}}@localhost」的命令,其中 localhost 是 local_domains 清單中的主機之一, username 是現有本地用戶的名稱。

如果伺服器用作郵件中繼,則遠端發送命令「RCPT TO「${run{...}}@relaydomain.com」就足夠了,其中relaydomain.com是relay_to_domains中列出的主機之一設定部分。 由於 Exim 不預設為刪除特權模式 (deliver_drop_privilege = false),因此透過「${run{...}}」傳遞的指令將以 root 身分執行。

值得注意的是,該漏洞是 淘汰 在 4.92 月發布的 XNUMX 版本中,沒有強調修復可能會導致安全性問題。 沒有理由相信 Exim 開發人員故意隱瞞了漏洞,因為問題已在 修復 傳輸錯誤位址時發生的故障,Qualys 在審核 Exim 變更期間發現了該漏洞。

對繼續在發行版中使用的先前版本的修復目前僅提供 修補。 計劃於 11 月 XNUMX 日發布之前分支的修正版本以解決該問題。 軟體包更新已準備就緒 Debian, Ubuntu, openSUSE. Arch Linux и Fedora 他們提供了4.92版本,該問題沒有出現。 RHEL 和 CentOS 題 不敏感,因為 Exim 不包含在其常規包存儲庫中。

來源: opennet.ru

添加評論