R 编程语言的核心实现中发现了一个严重漏洞 (CVE-2024-27322)。R 语言专为统计处理、数据分析和可视化而设计。该漏洞允许攻击者在反序列化不受信任的数据时执行代码。攻击者可以利用此漏洞处理精心构造的 R 数据序列化 (RDS) 和 RDX 格式文件,这两种格式用于在应用程序之间交换数据。该问题已在 R 4.4.0 版本中修复。您可以在以下页面跟踪各发行版中的软件包更新: Debian, UbuntuRHEL、SUSE/openSUSE、Fedora、Arch、FreeBSD。
该漏洞是由 readRDS 函数引起的,该函数用于加载 RDS 和 RDX 格式的文件,允许传输序列化的 R 对象以在另一个系统上进行处理。序列化使得捕获状态并在程序之间交换数据集成为可能。 RDS 格式允许您存储有关一个对象的状态,而 RDX 格式与 RDB 文件结合使用可以传输有关多个对象的信息。问题在于,RDS 格式支持与 Promise 类型关联的 PROMSXP 对象代码,该对象代码用于定义在使用其关联值时异步调用的表达式。
在反序列化过程中,使用三个部分来定义 Promise 对象:Promise 值、表达式和环境。如果 Promise 类型没有预先计算的值,则在反序列化期间通过使用“eval”函数执行表达式来计算该值。通过这种方式,攻击者可以通过将任意 R 代码替换为与 RDS 或 RDX 文件中未计算值关联的表达式来执行任意 R 代码。
来源: opennet.ru
