Numpy反序列化命令执行(CVE-2019-6446)浅析

栏目: Python · 发布时间: 7年前

内容简介:NumPy是一个功能强大的Python库,主要用于对多维数组执行计算。NumPy提供了大量的库函数和操作,可以帮助程序员轻松地进行数值计算。这类数值计算广泛用于以下任务:

*本文原创作者:nancyy,本文属FreeBuf原创奖励计划,未经许可禁止转载

Numpy反序列化命令执行(CVE-2019-6446)浅析

0×01 前言

NumPy是一个功能强大的 Python 库,主要用于对多维数组执行计算。NumPy提供了大量的库函数和操作,可以帮助 程序员 轻松地进行数值计算。这类数值计算广泛用于以下任务:

机器学习模型 :在编写机器学习算法时,需要对矩阵进行各种数值计算。例如矩阵乘法、换位、加法等。NumPy提供了一个非常好的库,用于简单(在编写代码方面)和快速(在速度方面)计算。NumPy数组用于存储训练数据和机器学习模型的参数。

图像处理和计算机图形学 :计算机中的图像表示为多维数字数组。NumPy成为同样情况下最自然的选择。实际上,NumPy提供了一些优秀的库函数来快速处理图像。例如,镜像图像、按特定角度旋转图像等。

数学任务 :NumPy对于执行各种数学任务非常有用,如数值积分、微分、内插、外推等。因此,当涉及到数学任务时,它形成了一种基于Python的MATLAB的快速替代。

0×02 影响范围及利用条件

NumPy <=1.16.0

用户加载恶意数据源造成命令执行。

0×03 漏洞分析

我们以ubuntu最新版pip源下载的numpy 1.16.0版本为例进行分析。漏洞点位于npyio.py的第268行,file字符串对象经过格式验证,如果不满足默认的numpy以及zip格式,将会尝试使用序列化的方式进行读取文件。如果是老司机的话,估计大概知道是什么问题了。

Numpy反序列化命令执行(CVE-2019-6446)浅析

我们顺着pickle.load函数继续跟进看看。最终会发现他会逐字节的去读取命令。

Numpy反序列化命令执行(CVE-2019-6446)浅析

如下图,pickle默认支持很多命令语句。

Numpy反序列化命令执行(CVE-2019-6446)浅析

有了这些数据,我们就开始构造命令执行了。在构造命令执行之前,我们得先导入我们所需要的包,以及一个可以执行反射的函数。通过代码检索,发现pickle的操作符号“c”和操作符“R”,分别代表着导入和调用两个操作。

那接下来我们开始构造执行“ls”的命令函数了。

Numpy反序列化命令执行(CVE-2019-6446)浅析

通过上面的操作符号,我们编写出对应的命令,熟悉汇编的同学就看出来了,左边是命令符号,右边是数据。

然后我们把这个数据转化成pickle能够理解的语言。

cposix
system
p0
(S'ls'
p1
tp2
Rp3
.

然后我们把这个payload文件,用numpy.load函数读取一下。

Numpy反序列化命令执行(CVE-2019-6446)浅析

就看到对应的效果了。

0×04 修复方案

2019年1月15日,官方在issue中确认了该漏洞,并准备在下一个小版本中修复

暂时缓解措施,将默认支持allow_pickle函数去掉。

参考链接

https://github.com/numpy/numpy/commit/a2bd3a7eabfe053d6d16a2130fdcad9e5211f6bb

https://bugzilla.suse.com/show_bug.cgi?id=1122208

*本文原创作者:nancyy,本文属FreeBuf原创奖励计划,未经许可禁止转载


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。

Python for Data Analysis

Python for Data Analysis

Wes McKinney / O'Reilly Media / 2012-11-1 / USD 39.99

Finding great data analysts is difficult. Despite the explosive growth of data in industries ranging from manufacturing and retail to high technology, finance, and healthcare, learning and accessing d......一起来看看 《Python for Data Analysis》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试