R 编程语言中发现了一个安全漏洞,威胁参与者可能会利用该漏洞创建恶意 RDS(R 数据序列化)文件,从而在加载和引用时导致代码执行。
AI 应用安全公司 HiddenLayer 在与 The Hacker News 分享的一份报告中表示,该漏洞的 CVE 标识符为CVE-2024-27322,“涉及 R 中承诺对象的使用和惰性评估”。
RDS与 Python 中的 pickle 类似,是一种用于序列化和保存 R 中数据结构或对象状态的格式,R 是一种用于统计计算、数据可视化和机器学习的开源编程语言。
保存和加载 R 包时也会利用序列化过程(serialize() 或 saveRDS())和反序列化过程(unserialize() 和 readRDS())。
CVE-2024-27322背后的根本原因在于,它在反序列化不受信任的数据时可能导致任意代码执行,从而使用户面临通过特制R包进行的供应链攻击。
因此,想要利用该缺陷的攻击者可以利用 R 包利用 RDS 格式来保存和加载数据的事实,从而在包解压和反序列化时导致自动执行代码。
安全研究人员 Kasimir Schulz 和 Kieran Evans 表示:“R 包很容易受到这种攻击,因此可以通过包存储库用作供应链攻击的一部分。” “对于攻击者来说,要接管R包,他们所需要做的就是用恶意制作的文件覆盖rdx文件,当包加载时,它会自动执行代码。”
经过负责任的披露后,该安全缺陷已在 2024 年 4 月 24 日发布的4.4.0 版本中得到解决。
HiddenLayer 表示:“攻击者可以通过制作 RDS 格式的文件来利用此[缺陷],其中包含将值设置为 unbound_value 的 Promise 指令以及包含任意代码的表达式。” “由于延迟求值,只有在访问与 RDS 文件关联的符号时才会求值并运行表达式。”
“因此,如果这只是一个 RDS 文件,当用户为其分配一个符号(变量)以便使用它时,当用户引用该符号时,将执行任意代码。如果该对象是在 R 包中编译的,该包可以添加到 R 存储库(例如 CRAN)中,当用户加载该包时,将计算表达式并运行任意代码。”
文章原文链接:https://www.anquanke.com/post/id/296166