受损的 dYdX npm 与 PyPI 包投放钱包窃取器和远程访问木马
网络安全研究人员发现了一种新的供应链攻击,合法的 npm 和 Python 包索引(PyPI)仓库中的包被篡改,发布了恶意版本,以窃取钱包凭证并实现远程代码执行。
受影响的两个包版本如下:
- @dydxprotocol/v4-client-js(npm)- 3.4.1, 1.22.1, 1.15.2, 1.0.31
- dydx-v4-client(PyPI)- 1.1.5post1
“@dydxprotocol/v4-client-js(npm)和 dydx-v4-client(PyPI)包为开发者提供与 dYdX v4 协议交互的工具,包括交易签名、下单和钱包管理,” Socket 安全研究员 Kush Pandya 说明。“使用这些包的应用会处理敏感的加密货币操作。”
dYdX 是一个非托管、去中心化的加密货币交易所,提供保证金和永续合约交易,同时让用户完全掌控资产。该去中心化金融交易所称其累计交易量已超过 1.5 万亿美元。
虽然目前尚不清楚这些被投毒的更新是如何被推送的,但怀疑是开发者账户被盗,因为恶意版本是使用合法的发布凭证发布的。
威胁行为者引入的更改针对 JavaScript 和 Python 生态系统,载荷不同。对于 npm,恶意代码充当加密货币钱包窃取器,窃取助记词和设备信息。Python 包则在窃取功能之外,还嵌入了远程访问木马(RAT)。
RAT 组件在包被导入后立即运行,联系外部服务器(dydx.priceoracle[.]site/py)获取后续在主机上执行的指令。在 Windows 系统上,它使用 CREATE_NO_WINDOW 标志,以确保在没有控制台窗口的情况下执行。
“威胁行为者对包内部结构了如指掌,将恶意代码插入核心注册文件(registry.ts、registry.js、account.py),这些代码会在正常使用包时执行,” Pandya 说。
“PyPI 版本的 100 次迭代混淆以及跨生态系统的协同部署表明,威胁行为者直接访问了发布基础设施,而不是利用注册表本身的技术漏洞。”
在 2026 年 1 月 28 日负责任披露后,dYdX 在 X(Twitter)上发布了一系列帖子,承认此事件,并敦促可能下载了受损版本的用户隔离受影响的机器、从干净系统将资金转移到新钱包、并轮换所有 API 密钥和凭证。
它补充说,托管在 dydxprotocol Github 上的 dydx-v4-client 版本不包含恶意软件。
这并非 dYdX 生态系统首次成为供应链攻击目标。2022 年 9 月,Mend 和 Bleeping Computer 报道,dYdX 员工的 npm 账户被劫持,发布了多个包含窃取凭证等敏感数据代码的 npm 包新版本。
两年后,交易所还透露,其已停用的 dYdX v3 平台关联的网站被入侵,重定向用户至钓鱼站点,目的是盗取钱包。
“结合 2022 年的 npm 供应链泄露和 2024 年的 DNS 劫持事件,此次攻击凸显了对手通过可信分发渠道持续针对 dYdX 相关资产的模式,” Socket 说。
“几乎相同的跨语言凭证窃取实现表明是有计划的。威胁行为者保持一致的渗漏端点、API 密钥和设备指纹逻辑,同时部署针对不同生态系统的攻击向量。npm 版本侧重凭证窃取,PyPI 版本则增加了持久化系统访问。”
不存在的包的供应链风险
此披露正值 Aikido 详细说明在 README 文件和脚本中引用但从未实际发布的 npm 包构成了有吸引力的供应链攻击向量,攻击者可以以这些名称发布包来分发恶意软件。
此发现是软件供应链威胁日益成熟的最新表现,攻击者通过利用开源仓库的信任一次性危害多个用户。
“复杂的攻击者正向上游软件供应链移动,因为它提供了低噪声的初始访问路径,进入下游环境,” Sygnia 的 Omer Kidron 说。
“同样的方法既支持针对特定供应商、维护者或构建身份的精准妥协,也支持通过广受信任的生态系统进行规模化的机会主义攻击(‘喷洒’),对所有组织都有相关性,无论其是否自视为主要目标。”
Aikido 的分析发现,128 个虚幻包在 2025 年 7 月至 2026 年 1 月期间累计下载 121,539 次,平均每周 3,903 次,最高峰上月达 4,236 次。下载量最高的包如下:
- openapi-generator-cli(48,356 次下载),模仿 @openapitools/openapi-generator-cli
- cucumber-js(32,110 次下载),模仿 @cucumber/cucumber
- depcruise(15,637 次下载),模仿 dependency-cruiser
- jsdoc2md(4,641 次下载)
- grpc_tools_node_protoc(4,518 次下载)
- vue-demi-switch(1,166 次下载)
“openapi-generator-cli 在过去七天内就有 3,994 次下载,” 安全研究员 Charlie Eriksen 说。“这几乎是有人尝试运行不存在的命令的次数。”
这些发现凸显了 npm 拼写抢注防护的盲点,虽然会阻止与已有包名称相似的抢注,但无法防止创建从未注册过的包名,因为没有可比对的对象。
为降低 npx 混淆风险,Aikido 建议采取以下措施:
- 使用
npx --no-install阻止注册表回退,如果本地未找到包则安装失败 - 显式安装 CLI 工具
- 如果文档要求用户运行某个包,请先验证该包是否存在
- 注册明显的别名和拼写错误,以防坏人抢注
“npm 生态系统拥有数百万个包,” Eriksen 说。“开发者每天数千次运行 npx 命令。‘便利默认’与‘任意代码执行’之间的差距,就是一个未被声明的包名。”
The Last 24 Hours | 安全无小事