背景圖片取自Arnold Francisca on Unsplash

開源碼程式語言R被發現有一個允許攻擊者執行惡意程式碼的重大漏洞,開發機構本周發布新版修補。

本漏洞為資安業者HiddenLayer研究人員Kasimir Schulz和Kieran Evans通報,命名為CVE-2024-27322。CERT公告說明,最新漏洞為一反序列化(deserialization)瑕疵,允許惡意檔案在反序列化時執行任意程式碼。這項攻擊若牽涉套件,則可能引發供應鏈攻擊。本漏洞風險值被列為8.8。

R語言支援資料序列化(data serialization)。序列化是指將物件轉換成可儲存格式,反序列化則是將儲存格式轉換成物件。序列化和反序列化發生在資料儲存及網路上傳輸,對開發人員來說,也經常發生在程式開發過程中:從套件庫下載套件即牽涉反序列化。但序列化與反序列化過程很容易遭到惡意人士濫用。

R語言開發使用RDS檔案格式進行序列化資料的儲存或傳送。RDS格式包括二種:.rdb檔及.rdx檔。R程式執行過程使用readRDS函式從套件庫讀取這二種檔案,再以eva1函式評估檔案中的表達式(expression)的值,以便將物件由RDS檔解壓縮並反序列化,在目標平臺上執行。

研究人員指出,CVE-2024-27322即牽涉R程式序列化/反序列化過程中,利用 promise物件及惰性求值(lazy evaluation)。在反序列化載入RDS檔或套件時,由於R支援惰性求值(lazy evaluation),未能及時檢查Promise物件RDS檔中的指令值。攻擊者可建立包含有特定指令值的RDS檔,再以社交工程誘使使用者下載。因此若是惡意RDS檔,則使用者程式參照RDS檔時就會直接執行指令程式碼。若物件是組譯成R套件,攻擊者可將之加入R儲存庫中,等其他使用者載入該套件時即執行程式碼。研究人員指出,一旦攻擊者只要能覆寫掉原本的.rdx或.rdb檔,就能以R套件發動供應鏈攻擊。

不過在獲得通報後,R語言開發單位已發布新版本R Core Version 4.4.0解決這項漏洞。安全廠商呼籲開發人員儘速更新。

熱門新聞

Advertisement