NumPy 库的当前版本默认使用不安全的 Python 模块,可导致受影响应用程序遭远程代码执行影响。
这个问题是在1月16日披露的,影响 NumPy 版本 1.10(2015年发布)至1.16(1月14日发布,目前为止的最新版本)。目前开发人员正在着手推出补丁。
NumPy 是科学计算中使用的最流行的 Python 库之一。它也是通用数据的多维容器,可与多个数据库集成。
默认设置存在风险
问题在于‘pickle’模块,它的作用是将 Python 对象结构转换为可存储在磁盘或数据库中的格式或转换为允许在网络中传输的格式。
报告该问题的安全研究员 Sherwel Nan 指出,如果 Python 应用程序通过 ‘numpy.load’ 函数加载恶意数据,那么攻击者能够在机器上执行远程代码。
在 npy 文件中加载 pickled 对象数组是默认操作。NumPy 开发者手册中清楚地提到了允许 ‘pickles’ 的安全风险,“因为加载 pickled 数据可执行任意代码”。然而,如果不允许 pickles,那么就无法加载对象数组。
‘allow_pickle’ 参数是在 NumPy 1.10 中引入的,目前开发团队正在着手解决这一问题。
Nan 表示,使用带有 ‘allow_pickle’ 参数的 ‘numpy.load’ 函数时,如果不确定数据是否安全,那么用户应当默认将值设置为 ‘False’。
该项目的维护人员同时建议在 NumPy 1.17 中将 ‘allow_pickle’ 参数的默认值更改为 ‘False’,并从互联网导入数据集时展示警告信息,以便用户只有在信任数据时允许该操作。
CVSS 评分9.8
Nan 提交的这个漏洞的编号是 CVE-2019-6446,安全等级为“严重”,CVSS v3 的评分为9.8(满分为10分)。
一般可从 Linux 发行版本的官方数据包库中获取该库,尤其是为企业使用的库。SUSE 安全研究员 Alexandros Toptsoglou 表示该漏洞影响 SUSE Linux 企业版15 和 SUSE Linux 企业版12 Service Pack 2。
NumPy 出现在使用 RPM 数据包管理器 (RPM) 的多种 Linux 发行版本中。NumPy RPM 维护人员将很快增加一条新的警告信息并发布在版本1.17中,前提是这种呼声足够高。
Sebastian Berger 表示,“如果有人极其担忧,我们可以考虑回滚或加速推出,但这种决定很大程度上取决于下游是否对它的依赖程度很高。”
本文由360代码卫士翻译自BleepingComputer
声明:本文来自代码卫士,版权归作者所有。文章内容仅代表作者独立观点,不代表安全内参立场,转载目的在于传递更多信息。如有侵权,请联系 anquanneican@163.com。