動態裝載機
問題的本質是:在運行過程中,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") 的呼叫。
專家發現的漏洞
補充:問題已經被分配了編號
amd64 和 i386(此漏洞可適用於其他架構)。
該問題在預設安裝中可被利用,並允許非特權本機使用者在執行 chpass 或 passwd suid 公用程式時透過程式庫替換以 root 身分執行程式碼。 若要建立操作所需的低記憶體條件,請透過 setrlimit 設定 RLIMIT_DATA 限制。
來源: opennet.ru