社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

Python 又爆重大漏洞,你的电脑可能正在被攻击!

AirPython • 5 年前 • 389 次点击  

1 安全漏洞

2月19号,Python 软件基金会(PSF)发布了 Python 3.8.8 和 3.9.2 版本。

这两个版本主要修复了两个值得注意的安全漏洞,其中一个名为“CVE-2021-3177”的漏洞容易被攻击者远程利用,基于代码执行可让计算机崩溃。

本来只要发布最新的3.9.2就可以,同时发布3.8.8是为了方便使用3.8的用户只要更新补丁版本就可以了,没必要为此升级到3.9。毕竟对于复杂的软件,升级一个小版本需要做全面的测试,代价沉重。

PSF敦促Python用户尽快将系统升级到Python3.8.8或3.9.2,特别是需要解决被跟踪为 CVE-2021-3177 的远程代码执行(RCE)漏洞。

Linux,Windows等平台也纷纷通知各自的用户的尽快升级Python:

  1. Redhat给的警告

  2. Windows给的警告

2 原理解释

这个漏洞的英文描述是这样的:

这是3.9的Release notes:

说人话,简单来说漏洞的发生是这样的:

  1. Python使用了一些C语言写的数据类型,被称为ctype,其中一个就是callproc.c。
  2. 这个callproc.c有漏洞,可以造成黑客在你的电脑上执行他的代码,访问或者修改缓存区的敏感数据,造成系统崩溃等。
  3. 这个漏洞发生的条件是:你的程序接受用户输入的浮点数,并且没有验证浮点数的合法性。黑客可能传入的不是浮点数,而是一段代码,进而非法访问缓存区内的数据,造成系统崩溃。更进一步这个漏洞和C语言中的sprintf有关系。

大概的过程是这样的:

基本上,这个问题最大的伤害就是造成你的系统崩溃。

这对于个人用户是关系不大的。但是对服务器影响就很大了。

如果一些银行系统运行着Python的程序,结果造成了系统崩溃,影响了用户使用系统,可能技术部的奖金都都没了。

3 代码示例

来点直观的认识,用代码举一个类似的安全漏洞,同样关于打印,同样关于远程代码执行:

CONFIG = {
    “API_KEY”: “secret_key”
}
class User:
    name = “”
    email = “”
    def __init__(self, name, email):
        self.name = name
        self.email = email
    def __str__(self):
        return self.name

name = “Toby”
email = “oyetoketoby80@gmail.com”
user = User(name, email)
print(f”{user.__init__.__globals__[‘CONFIG’][‘API_KEY’]}”)

代码说明:最后一行使用的答应方法,如果无脑接受用户的输入,用户可以访问全局配置,并打印出程序的密码,从此你的数据就对黑客敞开。这是非常严重的安全漏洞。

下面是摘自csdn的一些解释:

具体的漏洞在于,Python 3.x 到 3.9.1 的 ctypes/callproc.c 中 PyCArg_repr 具有缓冲溢出,这可能导致远程代码执行。

它也会影响到 "接受浮点数作为不信任的输入的 Python 应用程序,如 c_double. param 的 1e300 参数所示。

该 Bug 的发生是因为不安全地使用了"sprintf"。影响之所以广泛,因为 Python 已预装安装到了多个 Linux 发行版和 Windows 10 系统中。

当前,各种 Linux 发行版(如 Debian)已经向后移植了安全补丁,以确保屏蔽内置版本的 Python。

4. 你应该做什么?

这个安全漏洞告诉我们:

  1. 如果你的服务器上运行着Python,建议尽快升级到3.8.8或者3.9.2。
  2. 自己的电脑建议升级,但是没有那么重要,除非在上面运行Python网站等。

但是作为一个程序员,要注意一点:

  1. 永远要验证用户的输入。在这个又大又坏的世界,这样可以活的久一点。

安全漏洞描述地址:https://nvd.nist.gov/vuln/detail/CVE-2021-3177

Python 新版下载地址:https://www.python.org/downloads/

Python 3.9.2发布说明:https://www.python.org/downloads/release/python-392/

编码是否安全也关乎到一个程序员是否专业,后面文章会总结了Python编码安全规范,代码扫描工具等,让他在专业的道路上更进一步,面试,吹牛都用得到

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/108457