Rust迎來第一個通用漏洞披露(Common Vulnerabilities and Exposures,CVE),紅帽(Red Hat)主動於7月3日向Rust官方通報,Rustdoc的套件功能存在意料之外的路徑臭蟲,當使用者沒有傳遞路徑給Rustdoc時,系統則會使用預設位置/tmp,而多數作業系統/tmp是公開可寫入的,便讓駭客有機可乘放入惡意程式。官方提到,這個漏洞影響很小,但是許多人過度宣稱Rust的安全性,而這個事件剛好能夠警惕開發者,Rust無法保證沒有臭蟲發生。

在Rust標準發布版中,會夾帶一個名為Rustdoc的工具,為Rust專案產生說明文件,Rustdoc可以將Crate root或是Markdown檔案作為輸入參數,生成HTML、CSS與JavaScript格式的檔案。而Rust有一個套件功能,允許開發者使用特定的符號創建函式庫來開發套件,藉由指示Rustdoc使用該套件,系統會載入並以回呼的方式執行函式來修改Rustdoc的AST型態。

而當使用者沒有給定系統套件路徑參數,Rustdoc則會使用預設路徑tmp/rustdoc/plugins,由於在多數的作業系統上/tmp是開放公開寫入的,因此駭客就能趁機把惡意的套件放到tmp/rustdoc/plugins中,並以Rustdoc載入該套件,執行攻擊者的回呼函式以及任意Rust程式碼。

但官方提到,這個漏洞很難被駭客利用,因為本身Rustdoc套件功能就已經很難使用了。由於函式輸入以及回傳需要使用Rustdoc的AST型態,但是Rust專案並沒有對終端用戶發送librustdoc,也就是說使用者必須自己合成該型態,而且Rust的ABI又極度不穩定,因此動態載入套件這個動作,只有在套件與Rustdoc使用相同的編譯器修訂時才能保證被執行。所以雖然這個功能在程式碼中,但缺乏實際用處。

不使用Rustdoc這個功能的開發者就不受漏洞影響,也由於這個套件功能長期被棄用,在缺乏必需的函式庫情況下,在當前所有Rust版本中都無法使用,但畢竟該臭蟲還是可能為用戶帶來問題,官方預計會將該行為從Rustdoc中刪除,新的更新版本將於下星期在各版本的頻道中發送,這個套件的基礎架構在1.0前就存在,但即刻起已無法在Rust穩定版或是Nightly中使用,這個功能刪除也不會影響任何Rust用戶。

這個漏洞是Rust第一個官方CVE資安通報,由於該漏洞還在申請CVE的過程,目前還未有編號。雖然該漏洞影響非常小,但官方仍然決定遵循完整的安全漏洞程序,並在7月10日發布1.27.1穩定版修補這個臭蟲。由於官方確定沒有人可以利用這個漏洞,因此在更新發布前,就提早釋出漏洞的資訊。

官方特別提醒,Rust雖然在程式編譯的過程,阻擋了許多可能產生的問題,但這些僅限於記憶體不安全所導致的問題,而這個Rustdoc套件功能的漏洞,是一個邏輯錯誤,代表Rust程式碼本身並不是必定安全且沒有臭蟲的,官方認為,部分使用者太過狂熱,會過度宣稱Rust的安全性,這樣反而是危險的事,而這個臭蟲正好證明了Rust無法阻擋所有安全性問題。


Advertisement

更多 iThome相關內容