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模塊是Python內建的用于調用動態鏈接庫函數的功能模塊。由于未檢查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