Apache Arrow R package反序列化漏洞CVE-2024-52338
Apache Arrow 是通用列式格式和多语言工具箱,通过一种高效内存布局来提高数据处理的性能,如稀疏数据存储、列式存储、数据压缩。
Apache Arrow 提供一种跨语言数据交换格式,使不同语言数据高效交换,如数据类型一致性、二进制数据表示和数据序列化和反序列化。
Apache Arrow 与其他分布式计算框架(如 Apache Flink 和 Apache Beam)也有密切联系,后者可使用其作为底层数据存储和处理框架。
一、基本情况
Apache Arrow 通过一种高效内存布局和数据结构及一种跨语言数据交换格式,专为分布式计算环境设计,用于快速数据交换和内存分析。
Apache Arrow R 包是Apache Arrow的R语言组件,用于处理高性能的列式数据格式,允许R语言用户读取、写入和操作Arrow格式的数据。
栋科技漏洞库关注到 Apache Arrow 的 R 语言包中存在一个反序列化漏洞,该漏洞被追踪为CVE-2024-52338,该漏洞的CVSS评分为9.8。
二、漏洞分析
CVE-2024-52338是Apache Arrow R 包(版本 4.0.0 - 16.1.0)中存在的一个缺陷,可能触发反序列化漏洞,从而可能导致任意代码执行。
该漏洞源于 IPC 和 Parquet 数据读取器在处理元数据时未对输入进行严格验证,从而导致不受信任数据的反序列化,允许任意代码执行。
受影响版本中extension_metadata() 中直接调用 unserialize函数,在读取R元数据时没有进行类型或内容检查,允许恶意数据通过x参数。
这就使得应用程序在加载这些文件时,unserialize() 函数会直接解析元数据,从而可能会触发反序列化漏洞,从而可能导致任意代码执行。
因此,攻击者可以通过构造恶意的 Arrow IPC、Feather 或 Parquet 文件,在元数据中嵌入恶意对象(如 promises、environments 等)。
需要明确的是,该漏洞只影响Apache Arro R语言包,而不会影响到其他Apache Arrow 实现或绑定,除非这些绑定是通过R包专门使用的。
例如,如果Arrow R包使用的是受影响的版本,嵌入Python解释器并使用PyArrow从不可信来源读取文件的R应用程序仍然容易受到攻击。
修复代码通过新增 safe_unserialize 和 safe_r_metadata 函数来确保反序列化操作仅限安全类型,建议相关用户升级到17.0.0或更高版本。
三、影响范围
Apache Arrow R package 4.0.0 - 16.1.0
四、修复建议
目前该漏洞已经修复,受影响用户可将Apache Arrow R包或Apache Arrow升级到 17.0.0或更高版本。
五、参考链接
https://lists.apache.org/thread/0rcbvj1gdp15lvm23zm601tjpq0k25vt
https://github.com/apache/arrow/commit/801de2fbcf5bcbce0c019ed4b35ff3fc863b141b