攻击者可通过旧版Python 包中的漏洞代码入侵攻Python 包索引

2025-11-28 09:27:29 1 43

遗留代码中隐藏的漏洞往往会给现代开发环境带来不易察觉的风险。 最近在 Python 生态系统中出现了一个这样的问题,与 zc.buildout 工具关联的过时引导脚本使用户容易受到域名劫持攻击。

遗留代码中隐藏的漏洞往往会给现代开发环境带来不易察觉的风险。

最近在 Python 生态系统中出现了一个这样的问题,与 zc.buildout 工具关联的过时引导脚本使用户容易受到域名劫持攻击。

这些脚本旨在自动安装软件包依赖项,其中包含对外部域的硬编码引用,而这些外部域已不再受原始维护者的控制。

问题的核心在于这些脚本中的一种特定行为,即它们尝试从 python-distribute[.]org 获取已弃用的 distribute 包。

该域名自 2014 年起已弃用,目前处于停放状态,可供购买。如果攻击者获得该域名,他们就可以投放恶意载荷,任何运行被入侵引导脚本的开发者都会自动下载并执行这些恶意载荷。



这为供应链攻击开辟了一条直接途径,绕过了标准的安全检查。

Reversinglabs 安全分析师发现了这一漏洞,并指出它会影响几个知名的软件包,包括 slapos.core、pypiserver 和 tornado。

尽管许多开发者已经过渡到更新的打包标准,但这些旧文件通常仍然存在于代码库中。

该漏洞不会在标准的 pip 安装过程中触发,通常需要手动执行或通过 Makefile 等构建过程调用。

一旦激活,该脚本就会盲目信任外部来源,从而造成类似于 npm 注册表中的 fsevents 事件的重大供应链风险。

分析执行机制
此漏洞的技术核心在于引导脚本处理依赖项解析的方式不安全。代码逻辑会专门检查分发包是否存在。



如果找不到,脚本会使用 Python 内置的 urllib 库启动下载程序。如上图所示,分布式设置是在bootstrap.py中获取并执行的;该脚本会显式地从现已关闭的 python-distribute[.]org 请求内容。

关键在于,来自此 URL 的响应直接传递给 exec() 函数,该函数会立即运行代码,而无需任何完整性检查或签名验证。



为了验证这一攻击途径,研究人员设计了一个针对 slapos.core 的概念验证攻击脚本。该脚本利用了 slapos.core 中的漏洞,其工作原理是通过操纵命令行参数,强制脚本运行在存在漏洞的下载路径上。

运行 PoC 脚本后终端输出的结果证实该脚本已成功连接到外部域,证明托管在那里的任何代码都将以用户的完整权限运行。

关于作者

socsoc42篇文章60篇回复

评论1次

要评论?请先  登录  或  注册