知名程式語言Rust上周修補了一個允許駭客逕自刪除檔案與目錄的安全漏洞CVE-2022-21658,建議所有用戶升級到Rust 1.58.1,特別是那些預期所開發的程式可於特權環境中執行,或是其它高風險的開發者。

該安全漏洞存在於std::fs::remove_dir_all函式中,可能造成Race Condition Enabling Link Following缺陷。此一缺陷意味著程式在存取文件或目錄之前先檢查了它們的狀態,因而產生了競爭條件,讓駭客得以在程式存取之前以連結來取代該文件,最後存取到錯誤的文件。

Rust解釋,想像一名駭客擁有存取系統的非特權權限,並企圖刪除一個需要特權才能執行的系統目錄sensitive/,倘若std::fs::remove_dir_all可跟隨符號連結,駭客將能找到一個可移除temp/目錄的特權程式,再建立sensitive/與temp/foo之間的符號連結,並等待特權程式刪除foo/。由於特權程式可跟隨temp/foo到sensitive/之間的連結,使得sensitive/也隨之被刪除。

事實上,std::fs::remove_dir_all針對上述現象也部署了保護機制,但因沒有妥善地實施檢查,依舊形成了競爭條件,駭客只要建立一個目錄,並在檢查與實際刪除之間的空檔以符號連結取代它,就能展開攻擊。

此一漏洞波及Rust 1.0.0至Rust 1.58.0,Rust呼籲開發者應儘速升級到Rust 1.58.1,此外,有鑑於macOS 10.10以前的版本或REDOX等系統,缺乏可用來緩解相關攻擊的APIs,就算工具鏈已修補也依然存在風險。


熱門新聞

Advertisement