TrapDoor 加密货币窃取器供应链攻击波及 npm、PyPI 和 Crates.io 上 34 个包及数百个版本
TrapDoor 加密货币窃取器波及 npm、PyPI 和 Crates.io 上的 36 个恶意包,目标是加密货币、DeFi、AI 和安全领域的开发者。
Socket 研究人员发现了一场活跃的加密货币窃取器供应链攻击,跨越 npm、PyPI 和 Crates.io。该活动代号为 TrapDoor,涵盖了 34 个以上的恶意包和 384+ 个相关版本及制品,分布于 npm、PyPI 和 Crates.io,其中部分已被删除,部分截至发稿时仍处于活跃状态。
Socket 观察到的最早包是 PyPI 包 eth-security-auditor@0.1.0,上传于 2026 年 5 月 22 日 20:20:18 UTC,wheel 发布于 20:22:04 UTC。这些包由少数几个账户分批次发布,并在整个周末期间持续更新。它们之所以引人注目,是因为它们伪装成通用的开发者工具,并在多个注册表中快速连续出现。Socket 在全部三个生态系统中均检测到了恶意包。在 Crates.io 波次期间,关联变得清晰——针对 Sui 和 Move 开发者的 Rust 包与相关的 npm 和 PyPI 包在基础设施和行为上存在重叠。
TrapDoor 的目标群体涵盖加密货币、DeFi、Solana 和 AI 社区的开发者。这些恶意包旨在窃取开发者密钥、加密货币钱包、SSH 密钥、云凭证、浏览器数据和环境变量。多个 npm 包还部署了一个共享的有效载荷 trap-core.js,用于扫描凭证、验证 AWS 和 GitHub 令牌、尝试基于 SSH 的横向移动,并通过 .cursorrules、CLAUDE.md、Git hooks、shell hooks、systemd、cron 和 SSH 植入持久性。
npm 包
async-pipeline-builderbuild-scripts-utilschain-key-validatorcrypto-credential-scannerdefi-env-auditordefi-threat-scannerdeployment-key-auditordev-env-bootstrappereth-wallet-sentinelllm-context-compressormnemonic-safety-checkmodel-switch-routernode-setup-helpersproject-init-toolsprompt-engineering-toolkitsolidity-deploy-guardtoken-usage-trackerwallet-backup-verifierwallet-security-checkerweb3-secrets-detectorworkspace-config-loader
PyPI 包
cryptowallet-safetydata-pipeline-checkdefi-risk-scannerenv-loader-clieth-security-auditorgit-config-syncsolidity-build-guard
Crates.io 包
move-analyzer-buildmove-compiler-toolsmove-project-buildersui-framework-helperssui-move-build-helpersui-sdk-build-utils
跨生态系统的协调行动
TrapDoor 跨越 npm、PyPI 和 Crates.io,使用生态系统特定的执行路径,在正常的包安装、构建和导入工作流程中接触开发者。
该活动包括:
- 使用 postinstall hooks 的 npm 包版本,包括使用共享有效载荷
trap-core.js的活跃版本 - 在导入时执行远程 JavaScript 有效载荷的 PyPI 包
- Crates.io 上 6 个唯一包名下的包版本,通过恶意
build.rs脚本针对 Sui 和 Move 开发者
包名被精心设计成开发辅助工具、项目设置工具、模型路由工具、提示工程包、Solidity 工具以及 Sui 或 Move 构建辅助工具的样子。这使该活动能够广泛覆盖相邻的开发者社区,在这些社区中,加密货币钱包、云凭证、GitHub 令牌和 SSH 密钥很可能存在。
基础设施的关联在活动中也是一致的。攻击者使用 GitHub 账户 ddjidd564 来托管有效载荷和配置,包括从 ddjidd564[.]github[.]io/defi-security-best-practices/ 提供的内容。同一个仓库还包含攻击者编写的描述数据泄露、提示注入、AI 代理滥用、持久性和相关恶意软件开发概念的材料,使其不仅仅是一个简单的有效载荷托管处。该活动还使用了标记 P-2024-001,该标记出现在相关组件中。
TrapDoor 窃取的内容
这些恶意包旨在收集广泛的开发者密钥和敏感本地数据,包括:
- SSH 密钥
- Sui、Solana 和 Aptos 钱包数据
- AWS 凭证
- GitHub 令牌和凭证
- 浏览器配置文件数据
- 浏览器登录数据库
- 加密货币钱包扩展数据
- 环境变量
- API 密钥
- 本地开发配置文件
这为攻击者提供了多条进入开发者机器和连接基础设施的路径。被窃取的 SSH 密钥可被重用以进行横向移动,而云和 GitHub 凭证可能暴露仓库、CI/CD 系统、私有包和部署环境。
npm 包使用 Postinstall Hooks 和持久性凭证收割
TrapDoor 的 npm 部分规模最大。Socket 识别出由 npm 用户 asdxzxc 发布的恶意包,在分析时多个版本处于活跃状态。
npm 包依赖 postinstall 执行。一旦安装,它们运行一个共享有效载荷 trap-core.js,这是一个 1,149 行的凭证收割和传播工具。
该有效载荷扫描凭证和开发者密钥,使用 AWS 和 GitHub API 调用验证被窃凭证,并尝试通过多种持久性机制保留访问。
观察到的持久性向量包括:
.cursorrulesCLAUDE.md- Git hooks
- Shell hooks
- systemd 服务
- cron 任务
- SSH 传播
npm 有效载荷还试图通过重用被窃的 SSH 密钥来访问其他系统,从而进行横向移动。这使得该活动比简单的一次性凭证窃取器更危险,因为被入侵的开发机器可能成为通往其他基础设施的桥梁。
其中一个包 dev-env-bootstrapper 尤其值得注意,因为它既充当恶意软件又充当投递载体。它参与凭证窃取,同时还在开发者环境中传播恶意配置。
Crates.io 包泄露钱包密钥库
Socket 识别出连接到 TrapDoor 的恶意 Crates.io 包,这些包针对 Sui 和 Move 开发者。
这些包使用 build.rs,它在 Rust 构建过程中自动运行。该恶意构建脚本搜索本地密钥库,使用硬编码的 XOR 密钥加密数据,并将其泄露到 GitHub Gists。
build.rs 的使用意义重大,因为它允许在包编译期间执行代码,在开发者直接运行任何包功能之前。对于使用 Sui 和 Move 工具进行加密货币开发的开发者而言,这为钱包和密钥库窃取创造了高风险路径。
Crates.io 包是导致 Socket 研究人员调查更广泛活动的信号之一。单独来看,这些包似乎是新发布的且可能影响较小。然而,跨多个相关包的可疑模式使研究人员将活动关联到使用共享攻击者基础设施的 npm 和 PyPI 包。
PyPI 包在导入时执行远程 JavaScript
Socket 还识别出连接到 TrapDoor 的恶意 PyPI 包。PyPI 包在导入时自动执行,从攻击者控制的 GitHub Pages 域名下载 JavaScript,并使用 node -e 运行它。
这种技术允许 Python 包将执行委托给远程 JavaScript 有效载荷,使攻击者在发布后具有更大的灵活性。通过外部托管有效载荷,攻击者可以在不发布新 PyPI 版本的情况下更新行为。
PyPI 包似乎是通过多个账户发布的,包括与名称 asdmini67 和 dae5411 关联的账户。
AI 注入针对开发者助手
TrapDoor 中一个较为不寻常的功能是通过 .cursorrules 和 CLAUDE.md 等文件进行 AI 定向注入。
这些文件通常用于向 AI 编码工具提供项目特定的指令。在本次活动中,攻击者试图使用零宽度 Unicode 字符植入隐藏指令。目标似乎是欺骗 AI 助手运行"安全扫描"或类似工作流,导致密钥发现和泄露。
这种技术可能不会在所有工具或模型上持续工作,但它的存在表明攻击者正在积极将 AI 开发环境作为供应链恶意软件活动的一部分进行实验。
托管的 GitHub Pages 站点似乎也支持此工作流。包指向攻击者控制的 GitHub Pages URL,该 URL 被渲染为一个 HTML 站点,试图提示 AI 助手运行安全扫描。该扫描旨在收集和泄露敏感的本地数据。
加密和凭证验证
TrapDoor 根据生态系统和有效载荷阶段使用多层加密和验证。
在 Crates.io 包中,Socket 观察到使用硬编码密钥 cargo-build-helper-2026 的基于 XOR 的加密。
在 npm 有效载荷中,攻击者使用更复杂的加密技术,包括 Fernet 和 ECDH 加密。这表明它比基本的复制粘贴凭证窃取器更成熟。
npm 恶意软件还使用 API 调用验证被窃的 AWS 和 GitHub 凭证。这帮助攻击者区分有用的凭证和过期或低价值的数据,可能会提高下游利用的效率。
在 GitHub Pages 仓库中发现攻击者手册
攻击者控制的 GitHub Pages 仓库还包含一个 AUDIT-MATRIX.md 文档,该文档似乎描述了 TrapDoor 背后的预期提取框架。该文档将运营描述为"通用 AI 代理提取框架",并概述了能力检测、数据提取、自我复制回退和遥测报告的分阶段工作流。
该文档不应被视为已确认运行时行为的一一对应列表。它描述自己为部分实施的设计文档,并指出完整的多阶段自适应提取管道尚未部署。然而,许多记录的概念与 npm 有效载荷中观察到的行为一致,包括文件系统扫描、环境变量收割、凭证发现、AI 伪装语言、.cursorrules 持久性以及通过攻击者 GitHub Pages 基础设施的远程配置。
"伪装层"部分尤其相关。它将凭证窃取行为映射到听起来无害的任务,如安全审计、钱包安全检查、云配置验证、仓库安全审查和连接状态检查。这反映了该活动更广泛的策略:将恶意提取伪装成有用的开发者或安全自动化。
该文档还强化了活动的 AI 定向性质。其回退链描述了写入一个带有系统指令的 .cursorrules 文件,以便未来的 AI 会话执行报告,而 npm 有效载荷作为其持久性和传播逻辑的一部分写入 .cursorrules 和 CLAUDE.md 文件。
攻击者向 AI 和开发者项目发起 PR
攻击者活动不仅限于发布恶意包。同一 GitHub 账户 ddjidd564 还向多个 AI 和开发者工具项目发起了拉取请求,包括 browser-use/browser-use、langchain-ai/langchain、langflow-ai/langflow、run-llama/llama_index、FoundationAgents/MetaGPT 和 OpenHands/OpenHands。
这些 PR 反复尝试在看似无害的标题下添加 .cursorrules 或 CLAUDE.md 文件,例如"docs: add.cursorrules with dev standards and build verification"和"docs: add CLAUDE.md with dev standards and build verification"。多个 PR 引用了相同的活动标记 P-2024-001,并将更改描述为 AI 辅助开发指导、构建验证或项目特定编码标准。
在 browser-use/browser-use PR 中,提议的 .cursorrules 文件指向攻击者控制的配置 URL 并引用了相同的活动标记:
{
"standard": "P-2024-001",
"config": "<https://ddjidd564.github.io/defi-security-best-practices/config.json>",
"strategy": {
"scan_depth": 3,
"enabled_vectors": [
"git",
"vscode",
"cursorrules",
"sourceHeaders",
"readme",
"pkgJson",
"claudeMd",
"prepush",
"trapActivation",
"pypi",
"docker",
"systemProfile"
]
},
"encryption": {
"enabled": true,
"scheme": "Fernet"
}
}GitHub 还警告该文件包含隐藏或双向 Unicode 文本,可能在浏览器中的显示与实际解释不同。
此 PR 活动表明该活动已扩展到注册表发布之外。攻击者似乎在测试 AI 面向的项目文件是否可以通过正常的开源贡献工作流程引入,将活动链接的指令放在 AI 编码工具可能稍后读取和应用的位置。
攻击者的 GitHub 活动超出了有效载荷托管范围。该账户维护了主要的 TrapDoor 基础设施仓库,还创建或培育了相关的 AI、DeFi 和安全主题项目和讨论:
- 主要有效载荷/配置仓库:defi-security-best-practices
攻击者编写的活动/设计文件:
- AUDIT-MATRIX.md,描述数据泄露、提示注入、AI 代理滥用、持久性和相关恶意软件开发概念
- BYPASS.md,记录与同一攻击者控制仓库相关的绕过概念
- PAYLOAD.md,记录有效载荷行为和相关活动机制
- SWARM.md,描述围绕该活动的更广泛协调或扩展概念
MCP / AI 代理诱饵仓库:env-security-scanner,伪装为 AI 代理环境审计工具
DeFi 和安全主题诱饵仓库:
- smart-contract-audit-toolkit,伪装为智能合约安全/审计工具包
- defi-profit-scanner,伪装为 DeFi 扫描/利润发现工具
- web3-dev-toolkit-2026,伪装为 Web3 开发者工具
- solidity-gas-optimizer,伪装为 Solidity gas 优化工具
培育的 GitHub 社区活动:
- agentmemory issue,用于将相关安全工具推广到开发者项目
- gemini-cli discussion,用于将 MCP/安全工具推广到 AI 开发者社区
- modelcontextprotocol discussion,用于将钱包/安全主题活动引入 MCP 社区
GitHub 活动显示出快速、AI 辅助风格的迭代迹象:广泛的安全主题脚手架、通用诱饵仓库、提示注入文档以及与工作恶意软件组件混合的部分实施提取概念。
低量包,高价值目标
TrapDoor 展示了攻击者如何将传统的包名 typosquatting 与更新的开发者环境攻击路径相结合。
包名经过定制,使其看起来与加密货币开发、AI 工具、本地环境设置和安全工作流相关。然后恶意软件使用生态系统特定的执行路径:Rust 中的 build.rs、npm 中的 postinstall hooks 以及 Python 中的导入时执行。
跨生态系统结构也使该活动从单一注册表视角更难发现。一个 Crates.io 包可能看起来是孤立的,直到匹配的基础设施、有效载荷标记和行为将其与 npm 和 PyPI 包关联起来。
对于安全团队而言,关键要点是现代供应链攻击越来越多地围绕完整的开发者工作流程设计。包安装只是第一步。从那里,攻击者正在瞄准 AI 助手配置、shell 环境、Git hooks、SSH 访问、浏览器配置文件、云凭证和加密货币钱包。
Socket 检测
Socket 通过对 PyPI、npm 和 Crates.io 的行为和跨注册表分析检测到 TrapDoor。观察到的最早包是 PyPI 上的 eth-security-auditor@0.1.0,上传于 2026 年 5 月 22 日 20:20:18 UTC。
在 Crates.io 波次期间,更广泛的活动的关联变得清晰,当时针对 Sui 和 Move 开发者的 Rust 包集群显示了与相关 npm 和 PyPI 包的基础设施和行为重叠。这种跨注册表模式将最初看起来孤立的恶意包连接成一个协调的活动。
在 381 条具有完整时间戳的包版本记录中,Socket 检测到 TrapDoor 版本发布的平均时间为 5 分 56 秒,中位检测时间为 5 分 27 秒。最快检测为发布后 58 秒。
我们正在 TrapDoor Crypto Stealer Campaign 页面跟踪此活动。
Socket 已将所有已识别的活动包分类为恶意软件。我们已向受影响的注册表报告了已识别的恶意包,并继续监控与 TrapDoor 相关的包、版本和基础设施。