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