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