在本文档中,将详细讨论 Pipenv 漏洞(CVE-2022-21668)。以下章节介绍了 pipenv/utils.py 文件中的缺陷代码,该缺陷为各种 RCE 攻击打开了大门,并介绍了最近的修复,该修复验证了 SSL/TLS 连接,并将主机名与受信任主机列表进行核对。
Pipenv 是一种工具,可自动为你的项目创建并管理 virtualenv,并在你安装/卸载软件包时向 Pipfile 添加/删除软件包。
更多信息 点击这里
每当我们处理复杂系统时,都需要一个 requirements.txt 文件。当我们想要将应用程序移植到另一个环境时,这个文本文件也非常方便。该文件保存了成功运行应用程序所需的所有软件包/依赖项及其版本号。
示例 requirements.txt 文件:
图片来源:https://www.idkrtm.com/what-is-the-python-requirements-txt/
如果我们没有 requirements.txt 文件,则可能无法将应用程序成功移植到另一个系统,因为软件包版本之间可能存在兼容性问题。
从 Pipenv 版本 2018.10.9 开始到 2022.1.8 版本之前,pipenv 解析 requirements 文件时的一个缺陷允许攻击者在 requirements.txt 文件中的任意位置的注释中插入特制字符串,这将导致使用 pipenv 安装该 requirements 文件的受害者从攻击者控制的包索引服务器下载依赖项。对于此类高度易受攻击的系统,RCE 攻击非常可行。
cvedetails 将此漏洞评为 严重 / 高危。
来自 cvedetials 的 CVSS 评分:
(来源:https://www.cvedetails.com/cve/CVE-2022-21668/)
该函数会针对 requirements 文件的每一行进行迭代调用,并使用 argparse 模块查找和处理 --index-url、--extra-index-url 和 --trusted-host 选项
然而,当这些选项出现在注释中时,它并不会忽略它们。 问题在于,代码会解析文件中任何位置以 "--index-url、--extra-index-url 和 --trusted-host" 开头的字符串。这一功能使其更容易受到攻击。
更多信息 点击这里
远程代码执行(RCE)攻击允许攻击者在计算机上远程执行恶意代码。RCE 漏洞的影响范围可能从执行恶意软件到攻击者完全控制受感染的机器。
如果攻击者能够在受害者使用 pipenv 安装的 requirements 文件中隐藏一个恶意的 --index-url 选项,攻击者就可以在其恶意索引服务器提供的软件包中嵌入任意恶意代码,这些代码将在安装过程中于受害者的主机上执行(远程代码执行/RCE)。对于具备基本 Python 知识的攻击者来说,利用此技术进行攻击相对简单,因为攻击者只需为 requirements 文件中指定的任何软件包构建一个源代码分发包,并在 setup.py 文件中嵌入任意恶意代码。当 pip 从源代码分发包安装时,setup.py 中的任何代码都会在安装过程中被执行。
更多详细信息 点击这里
2022.1.8 及更高版本已修复此问题。在 pipenv/utils.py 文件中添加了一个新函数 “get_host_and_port(url)”。该函数检索 requirements.txt 文件中提交的 URL 的主机和端口。检索到的主机地址使用 urllib3 解析,urllib3 会在内部验证 SSL/TLS 连接。同时,还会将主机地址与受信任主机地址列表进行核对。
更多信息 此处
基础攻击可能会利用受害者在安装攻击者恶意软件包时触发的初始 RCE 来窃取受害者主机上的凭据、榨取主机资源以挖掘加密货币,或安装漏洞利用工具包或其他恶意软件。更老练的攻击者可能会使用更高级的技术来持久化对受害者主机的访问,通过删除 pipenv 生成的 Pipfile 和 Pipfile.lock 中对恶意索引服务器的引用或其他潜在的入侵指标,来隐藏或清除攻击证据。高度老练的攻击者可能会尝试从最初被入侵的主机转向其他目标,并可能利用被入侵主机环境中暴露的任何凭据或授予该主机的隐式授权,以获得对其他系统或资源(如源代码仓库或软件包注册表)的特权访问。(来源:https://github.com/pypa/pipenv/security/advisories/GHSA-qc9x-gjcv-465w)
一个未正确解析注释的解析错误, 已造成一个严重漏洞。
列表项 有了这样的漏洞,即使构建恶意索引 服务器来提供被入侵的软件包版本也相对简单, 即使对于不太老练的攻击者也是如此。