警告:PyPI特性在Python包下载后自动执行代码

另一项发现可能会增加开发人员遭受供应链攻击的风险,发现PyPI(Python包索引)中近三分之一的包在下载时触发自动代码执行。
Checkmarx研究员Yehuda Gelb在本周发布的一份技术报告中说:“pip/PyPI中的一个令人担忧的特性是,当开发人员仅仅下载一个软件包时,代码就可以自动运行”。
“此外,由于我们发现的大量恶意软件包在安装时使用此代码执行功能以实现更高的感染率,因此此功能也令人担忧”。
安装Python软件包的方法之一是执行“pip install”命令,该命令将调用模块附带的名为“setup.py”的文件。
顾名思义,“setup.py”是一个安装脚本,用于指定与包关联的元数据,包括其依赖项。
而威胁行为人则在设置中加入恶意代码.py文件中,Checkmarx发现对手可以通过运行所谓的“pip下载”命令来实现相同的目标。
“pip下载的解析和下载与pip安装相同,但不是安装依赖项,而是将下载的发行版收集到提供的目录中(默认为当前目录),”文档中写道。

换句话说,该命令可用于下载Python包,而无需将其安装在系统上。但事实证明,执行下载命令也会运行前面提到的“setup.py”脚本,导致执行其中包含的恶意代码。
但是,值得注意的是,只有当包包含tar时才会出现问题。gz文件而不是wheel(.whl)文件,它“将‘setup.py’执行从等式中删除”。
“选择下载而不是安装软件包的开发人员合理地预期,下载文件后,不会有代码在机器上运行,”Gelb指出,将其描述为设计问题,而不是错误。
尽管pip默认使用轮子而不是tar.gz文件,攻击者可以利用这种行为故意发布python包,而不使用.whl文件,从而导致执行安装脚本中存在的恶意代码。
“当用户从PyPi下载python包时,pip会优先使用.whl文件,但如果缺少.whl,则会返回tar.gz文件,”Gelb说。
调查结果发布之际,美国国家安全局(NSA)、网络安全和基础设施安全局(CISA)以及国家情报局长办公室(ODNI)发布了软件供应链安全指南。
“随着网络威胁继续变得更加复杂,对手开始攻击软件供应链,而不是依赖于众所周知的漏洞,”该机构表示。“除非所有DevOps都是DevSecOps,否则软件开发生命周期将面临风险”。