打开网易新闻 查看精彩图片

3月27日,两个看似普通的版本更新,让Python开发者社区经历了一场供应链惊魂。

SafeDep安全团队监测发现,PyPI仓库中的telnyx包4.87.1和4.87.2版本被植入了恶意代码。这个包月均下载量超过100万次,日均约3万次——相当于每天有3万台开发机可能主动"邀请"黑客进门。

攻击者把第二阶段的二进制 payload 藏进了 WAV 音频文件。这种操作像把毒药装进音乐CD:系统以为在播放音频,实际在执行指令。

攻击链拆解:从 pip install 到系统沦陷

攻击链拆解:从 pip install 到系统沦陷

恶意代码被注入在 telnyx/_client.py 文件中。开发者执行 pip install 时,这段代码会静默连接远程服务器,下载伪装成音频文件的第二阶段载荷。

Windows 系统下,payload 会释放一个持久化可执行文件;Linux 和 macOS 则直接收割凭证。攻击者显然做了平台适配,不是广撒网的脚本小子行为。

telnyx 本身是个正经项目。PyPI 官方描述称它"为 Python 3.9+ 应用提供对 Telnyx REST API 的便捷访问"。Telnyx 公司主营业务是语音 AI 代理和全球电信基础设施——简单说,做企业级通信服务的。

这意味着中招的很可能不是个人开发者,而是集成语音、短信功能的企业系统。供应链攻击的可怕之处就在这里:你信任官方仓库,官方仓库信任上游,上游被攻破时无人幸免。

WAV 伪装:为什么选音频格式?

WAV 伪装:为什么选音频格式?

打开网易新闻 查看精彩图片

把可执行代码塞进 WAV 文件不是新鲜手法,但用在 PyPI 供应链攻击里还算少见。WAV 作为无损音频格式,结构简单,有大量空间可以塞入任意数据而不破坏文件头。

安全工具扫描时,看到 .wav 后缀通常会放行。防火墙和 IDS 对音频流量的警惕性,远低于可执行文件或加密二进制流。攻击者利用的是"格式信任"——系统对特定文件类型的预设宽容。

这种手法和 2023 年某次 npm 供应链攻击类似:黑客把恶意代码藏进图片的 EXIF 元数据。供应链安全的本质,是信任链上每个环节都不能出事,而攻击者只需要找到最薄弱的那个。

telnyx 包的下载量数据来自 PyPI 公开统计。100 万月活意味着它处于 Python 生态的中上游——不是 requests 那种基础设施级依赖,但足够让攻击者收获颇丰。

PyPI 的供应链困局

PyPI 的供应链困局

这不是 PyPI 第一次遭遇此类事件。2024 年,ultralytics 包曾被植入加密货币挖矿程序;2023 年,pytorch 的依赖链中发现恶意包。Python 软件基金会持续投入安全改进,但开源生态的开放性本身就是双刃剑。

SafeDep 的报告没有披露攻击者如何获取 telnyx 包的发布权限——是通过窃取开发者账号、社工工程,还是其他供应链环节渗透。这种信息缺失在初期安全通告中很常见,但也留下了关键疑问。

对于已经安装 4.87.1 或 4.87.2 版本的开发者,建议立即降级到 4.87.0 或更早版本,并检查系统日志中是否有异常网络连接。企业环境应审查依赖锁定文件,确认没有固定到恶意版本。

语音 AI 基础设施的 Python SDK 被投毒,这件事的讽刺之处在于:Telnyx 帮企业做智能客服、语音机器人,自己的开发者工具却变成了攻击者的传声筒。

供应链安全没有银弹。SBOM(软件物料清单)正在逐步推广,但大多数团队还没养成习惯。这次事件后,有多少开发者会真正去检查自己 requirements.txt 里的版本号?