Python远程代码执行误差(CVE-2021-3177)
宣布时间 2021-02-240x00 误差概述
CVE ID | CVE-2021-3177 | 时 间 | 2021-02-24 |
类 型 | RCE | 等 级 | 严重 |
远程使用 | 是 | 影响规模 | Python 3.x- 3.9.1 |
0x01 误差详情

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已经果真,验证如下:


别的,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/



京公网安备11010802024551号