CVE-2026-41486Ray是一个AI计算引擎。在2.54.0至2.55.0之前的版本中,Ray Data在PyArrow中全局注册了自定义Arrow扩展类型。当PyArrow读取包含这些扩展类型的Parquet文件时,会调用`__arrow_ext_deserialize__`处理元数据字节。Ray的实现将这些字节直接传递给`cloudpickle.loads()`,导致在解析架构期间(读取任何行数据之前)即可实现任意代码执行。该问题已在2.55.0版本中修复。
该漏洞的根源在于Ray Data在PyArrow中全局注册了自定义Arrow扩展类型(如`ray.data.arrow_tensor`)。当PyArrow加载Parquet文件时,如果文件头中定义了这些特定的扩展类型字段,它会自动调用这些类型的`__arrow_ext_deserialize__`方法来解析字段元数据。Ray在实现此方法时存在严重的安全缺陷,它未经验证直接将元数据字节传递给了`cloudpickle.loads()`函数。Cloudpickle是Python用于序列化和反序列化对象的库,它可以序列化几乎任何Python对象,包括函数和代码。攻击者可以构造一个恶意的Parquet文件,其元数据中包含经过cloudpickle序列化的恶意代码对象。当受害者使用受影响版本的Ray读取此文件时,PyArrow会触发反序列化过程,执行`cloudpickle.loads()`,从而在系统上执行任意代码。值得注意的是,这种代码执行发生在读取任何实际行数据之前的架构解析阶段,使得攻击非常隐蔽且无需大量数据传输即可触发。