Glibc 動(dòng)態(tài)加載器存在嚴(yán)重本地提權(quán)漏洞
近日有關(guān) Glibc 動(dòng)態(tài)加載器 (Dynamic Loader) 的一個(gè)嚴(yán)重漏洞被公開(kāi),攻擊者獲取本地用戶(hù) (local users) 身份后,利用該漏洞制造緩沖區(qū)溢出,即可獲得完整 root 權(quán)限。
據(jù)介紹,攻擊者使用由 ld.so 動(dòng)態(tài)加載器制作的 GLIBC_TUNABLES 環(huán)境變量來(lái)觸發(fā)漏洞,然后通過(guò) SUID 權(quán)限安裝文件時(shí),能以 root 權(quán)限執(zhí)行任意代碼。
Glibc 即 GNU C Library,是 GNU 系統(tǒng)以及大多數(shù)采用 Linux 內(nèi)核的系統(tǒng)中的 C 運(yùn)行庫(kù)。Glibc 是 Linux 系統(tǒng)中最底層的 API,幾乎其它任何運(yùn)行庫(kù)都會(huì)依賴(lài)于 Glibc。
它定義了典型程序所需的系統(tǒng)調(diào)用和其他基本功能,例如 open、malloc、printf、exit 等。 Glibc 的動(dòng)態(tài)加載器是 glibc 的重要組成部分,負(fù)責(zé)準(zhǔn)備和運(yùn)行程序。當(dāng)程序啟動(dòng)時(shí),該加載器首先檢查該程序以確定其所需的共享庫(kù)。然后它搜索這些庫(kù),將它們加載到內(nèi)存中,并在運(yùn)行時(shí)將它們與可執(zhí)行文件鏈接。
在此過(guò)程中,動(dòng)態(tài)加載器解析符號(hào)引用,例如函數(shù)和變量引用,確保為程序的執(zhí)行做好一切準(zhǔn)備。鑒于其作用,動(dòng)態(tài)加載器對(duì)安全性高度敏感,因?yàn)楫?dāng)本地用戶(hù)啟動(dòng) set-user-ID 或 set-group-ID 程序時(shí),其代碼會(huì)提權(quán)來(lái)運(yùn)行。
該漏洞最早由 Qualys 報(bào)告,被命名為 Looney Tunables,追蹤編號(hào)為 CVE-2023-4911。據(jù)稱(chēng)過(guò)去兩年發(fā)布的 Linux 發(fā)行版均受存在 Looney Tunables 漏洞 ,例如 Ubuntu 22.04 LTS、23.04、Fedora 38 以及其他容易受到此本地提權(quán)漏洞影響的發(fā)行版。
漏洞曝光后,獨(dú)立安全研究員 Peter Geissler (blasty) 很快就發(fā)布了 PoC 代碼,確認(rèn)可以攻擊 Linux 發(fā)行版。
上文提到的 GLIBC_TUNABLES 環(huán)境變量旨在微調(diào)和優(yōu)化與 glibc 相關(guān)的應(yīng)用程序,是開(kāi)發(fā)者和系統(tǒng)管理員的必備工具。它的濫用會(huì)廣泛影響系統(tǒng)性能、可靠性和安全性。