Rust編程語言曝出漏洞,攻擊者可輕松刪除文件和目錄
日前,Rust編程語言的維護者修復了一個編號為 CVE-2022-21658的高危漏洞,該漏洞讓攻擊者可以從易受攻擊的系統刪除文件和目錄。該漏洞影響Rust 1.0.0到Rust 1.58.0,近期發布的Rust 1.58.1版本已修復了該漏洞。
Rust編程語言維護者發布的安全公告稱:“Rust安全響應工作組已接到通知,獲悉 std::fs::remove_dir_all標準庫函數易受啟用符號鏈接跟隨的競態條件攻擊(CWE-363)。攻擊者可以利用這個安全問題,欺騙特權程序刪除攻擊者原本無法訪問或刪除的文件和目錄。” 安全公告指出std::fs::remove_dir_all已經含有防范遞歸刪除符號鏈接的機制,但它們并沒有正確實施。
“遺憾的是,該檢查機制在標準庫中未正確實施,導致了TOCTOU(Time-of-check Time-of-use)競態條件。標準庫不是告訴系統別跟隨符號鏈接,而是先檢查它要刪除的東西是不是符號鏈接,否則它將繼續遞歸刪除目錄。這暴露了競態條件:攻擊者可以創建一個目錄,并在檢查和實際刪除之間將該目錄換成符號鏈接。雖然這種攻擊在首次嘗試時可能不會得逞,但在試驗中能夠在幾秒鐘內可靠地執行這種攻擊。” Rust 維護者表示。
攻擊者利用該漏洞的原理是:假設對系統擁有非特權訪問權限的攻擊者想要刪除一個名為sensitive/的系統目錄,但他沒有操作權限,就可以利用該漏洞,找到一個特權程序來刪除其有權訪問的目錄(名為temp/),創建從temp/foo到sensitive/的符號鏈接,等待上述特權程序刪除foo/。特權程序將跟隨從temp/foo到ensitive/的符號鏈接,同時遞歸刪除,從而導致sensitive/被刪除。
參考鏈接:
https://securityaffairs.co/wordpress/127135/security/rust-programming-language-flaw.html