面对域名过期漏洞,PyPI阻断了账户劫持与攻击风险
最新消息,Python 包索引 (PyPI) 目前已引入了新的保护措施,以防止通过密码重置劫持账户的域名复活攻击。
PyPI 是 Python 开源包的官方仓库,为软件开发人员、产品维护者以及使用 Python 库、工具和框架的企业所广泛使用。
项目维护者在PyPI上发布软件的账户与电子邮件地址相关联。对于部分项目而言,其关联的电子邮箱地址还与特定域名绑定。若该域名过期,攻击者便可注册此域名,随后通过搭建邮件服务器并发起账户密码重置请求,进而掌控 PyPI 上的对应项目。
此类攻击的风险在于可能引发供应链攻击:遭劫持的项目会推送恶意版本的热门 Python 包,而在多数情况下,这些恶意包会通过 pip 自动安装。2022 年 5 月“ctx”包遭入侵便是典型案例——攻击者在该包中植入代码,专门针对亚马逊 AWS 密钥及账户凭证。
为解决这一问题,PyPI 如今会对平台上已验证电子邮箱地址所对应的域名进行检查,若发现域名已过期或即将进入过期阶段,便会将相关邮箱地址标记为未验证状态。
从技术层面来看,PyPI 借助 Domainr 的 Status API 确定域名的生命周期阶段(活跃、宽限期、赎回期、待删除),以此判断是否需要对相应账户采取措施。
域生命周期
一旦电子邮箱地址对应的域名进入上述状态,该邮箱便无法用于密码重置或其他账户恢复操作,即便攻击者注册了该域名,也难以找到可乘之机。
实际上,这些新措施的开发工作于 4 月启动,当时已通过初步扫描对相关情况进行评估。最终,新措施于 2025 年 6 月正式推出,且平台会每日进行扫描。自实施以来,在新系统下已有超过 1800 个电子邮箱地址被标记为未验证。
尽管新措施并非无懈可击,也无法应对所有攻击场景,但它显著降低了攻击者通过利用过期域名劫持 PyPI 账户的风险。PyPI 建议用户在账户中添加一个来自非自定义域名的备用邮箱,以避免服务中断;同时,应开启 PyPI 账户的双因素认证,从而增强账户抵御劫持的保护能力。