Python远程代码执行缝隙(CVE-2021-3177)

颁布功夫 2021-02-24

0x00 缝隙概述

CVE  ID

CVE-2021-3177

时   间

2021-02-24

类   型

RCE

等   级

严沉

远程利用

是

影响领域

Python 3.x- 3.9.1

 

0x01 缝隙详情

image.png

 

Python是当前最受迎接的法式设计说话之一,它提供了高效的高级数据结构,可能单一有效地面向对象编程。随着版本的不休更新和说话新职能的增长,逐步被用于独立的、大型项主张开发。

2021年02月19日,Python官方颁布安全布告,公开了python中的一个RCE缝隙(CVE-2021-3177),其CVSSv3评分为9.8。

 Python ctypes� ?槭荘ython内建的用于挪用动态链接库函数的职能� ?�。由于未查抄sprintf()函数的长度,_ctypes/callproc.c中的PyCArg_repr()函数中存在缓冲区溢露马脚,这可能会导致某些接受浮点数作为不成信输入的Python利用法式中的远程代码执行。

当天,Redhat官方也颁布了该缝隙的安全公告,其对该缝隙的CVSSv3评分为5.9,并暗示此缝隙带来的最大威胁是对系统的可用性。Python官方则以为该缝隙不太可能被利用,由于造成RCE必要满足以下前提:

l  从远程端传递一个不受信赖的浮点数到ctypes.c_double.from_param (把稳:Python浮点数不受影响)。

l  将该对象传递给repr()(例如通过日志纪录)。

l  使浮点数成为有效的机械代码。

l  让缓冲区溢出在正确的地位覆盖仓库,让代码得到执行。

 

可使用如下号令造成缓冲区溢出:

>>> from ctypes import *

>>> c_double.from_param(1e300)

*** buffer overflow detected ***: terminated

Aborted

 

目前该缝隙的PoC已经公开,验证如下:

image.png


image.png


此表,Python还公开了另一个Web缓存中毒缝隙(CVE-2021-23336)。0-3.6.13、3.7.0-3.7.10、3.8.0-3.8.8、3.9.0-3.9.2的python/cpython包通过使用名为parameter cloaking的向量,容易受到通过urllib.parse.parse_qsl和urllib.parse.parse_qs的Web缓存中毒。


0x02 措置建议

建议升级到Python 3.6.13、3.7.10、3.8.8或3.9.2。

下载链接:

Python 3.9.2

https://www.python.org/downloads/release/python-392/

 

Python 3.8.8

https://www.python.org/downloads/release/python-388/

 

0x03 参考链接

https://blog.python.org/2021/02/python-392-and-388-are-now-available.html

https://access.redhat.com/security/cve/cve-2021-3177

https://bugs.python.org/issue42938

https://www.randori.com/cve-2021-3177-vulnerability-analysis/

 

0x04 功夫线

2021-02-19  Python颁布安全布告

2021-02-24  VSRC颁布安全公告

 

0x05 附录

 

CVSS评分尺度官网:http://www.first.org/cvss/

image.png