新聞 | iThome ( ) • 2024-05-02 11:56

背景图片取自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解决这项漏洞。安全厂商呼吁开发人员尽速更新。