我有 3 个运行 Ubuntu 22.04.4 LTS 的 AWS EC2 实例,AWS Inspector 抱怨我遇到 CVE-2023-52323 - pycryptodomex 问题。我没有什么可以升级的:
ubuntu@ip-XX-XX-XX-XX:~$ apt list --upgradeable 列表...完成
我尝试使用文档中的命令安装它:
ubuntu@ip-XX-XX-XX-XX:~$ pip3 安装 pycryptodomex 默认为用户安装,因为普通站点包不可写 已满足要求:/usr/lib/python3/dist-packages (3.11.0) 中的 pycryptodomex ubuntu@ip-XX-XX-XX-XX:~$
但是正如你所看到的,它没有更新,而且我也无法以root身份更新:
ubuntu@ip-XX-XX-XX-XX:~$ sudo pip3 install pycryptodomex 已满足要求:/usr/lib/python3/dist-packages (3.11.0) 中的 pycryptodomex 警告:以“root”用户身份运行 pip 可能会导致权限损坏以及与系统包管理器的行为冲突。建议使用虚拟环境:https://pip.pypa.io/warnings/venv ubuntu@ip-XX-XX-XX-XX:~$
那么,我应该如何更新这个包?
简短的回答:你不能也不应该这样做。
这是发行版的一个众所周知的问题,特别是 LTS 发行版。主要产品都会在发行版中定期更新,您不必担心它们,发行版确实关心这一点。但像 pycrytodromex 这样较少使用的库可能会落后几个版本。原因是在发行版中维护包需要关心它的任何依赖项以及发行版中依赖于它的任何其他产品。在每次升级时,都必须控制所有这些依赖项,并且其中一个可能会阻止更新。或者维护者可能不再有足够的时间来这样做,因为大多数时候,他们是在空闲时间维护包的志愿者。
换句话说,如果您使用的是 distrib 的 Python 安装,则站点库预计将通过 distrib 进行管理。
您当然可以忽略该规则并使用
pip install --upgrade
作为 root 来强制更新,但这样做可能会破坏发行版保证的许多依赖关系。
最好的方法是创建一个虚拟环境(Python venv),您可以在其中安装更新版本,并让所有需要该库的您的应用程序使用该 venv。您甚至可以选择通过发行版删除易受攻击的软件包,以确保攻击者无法使用它。但这可能涉及手动安装相关应用程序,而不再通过发行版。
长答案简而言之:没有简单的方法。发行版可以为您做的事情(您确实应该将其用于每个足够最新的产品,包括其依赖项)和手动安装某些产品的复杂性之间将存在平衡,并且可以完全控制更新和依赖项。因为这种自由是有代价的:您现在负责控制已发布的漏洞并手动升级每个安装。