OpenBSD ld.so 中的漏洞

動態裝載機 搜搜,包含在 OpenBSD 中,在某些條件下,可能, SUID/SGID- 應用程式保留 LD_LIBRARY_PATH 環境變量,從而允許在以提升的權限運行的進程的上下文中載入第三方程式碼。 修復該漏洞的補丁已發布 6.5 и 6.6。 二進位補丁(系統補丁)適用於 amd64、i386 和 arm64 平台的產品已經投入生產,在本新聞發佈時應該可供下載。

問題的本質是:在運行過程中,ld.so 首先從環境中提取 LD_LIBRARY_PATH 變數的值,並使用 _dl_split_path() 函數將其轉換為字串陣列 - 目錄路徑。 如果後來發現當前進程是由 SUID/SGID 應用程式啟動的,則已建立的陣列以及實際上的 LD_LIBRARY_PATH 變數都會被清除。 同時,如果 _dl_split_path() 耗盡記憶體(由於環境變數大小明確限制為 256 kB,這很困難,但理論上是可能的),則 _dl_libpath 變數將收到值 NULL,並進行後續檢查該變數的值將導致跳過對_dl_unsetenv("LD_LIBRARY_PATH") 的呼叫。

專家發現的漏洞 質量, 也 之前透露的幾位 問題。 發現該漏洞的安全研究人員注意到問題解決的速度有多快:在 OpenBSD 專案收到通知後三個小時內就準備好了修補程式並發布了更新。

補充:問題已經被分配了編號 CVE-2019,19726。 在 oss-security 郵件列表上製作 官方公告,包括在 OpenBSD 6.6、6.5、6.2 和 6.1 架構上運行的原型漏洞利用
amd64 和 i386(此漏洞可適用於其他架構)。
該問題在預設安裝中可被利用,並允許非特權本機使用者在執行 chpass 或 passwd suid 公用程式時透過程式庫替換以 root 身分執行程式碼。 若要建立操作所需的低記憶體條件,請透過 setrlimit 設定 RLIMIT_DATA 限制。

來源: opennet.ru

添加評論