Gate 广场「创作者认证激励计划」开启:入驻广场,瓜分每月 $10,000 创作奖励!
无论你是广场内容达人,还是来自其他平台的优质创作者,只要积极创作,就有机会赢取豪华代币奖池、Gate 精美周边、流量曝光等超 $10,000+ 丰厚奖励!
参与资格:
满足以下任一条件即可报名👇
1️⃣ 其他平台已认证创作者
2️⃣ 单一平台粉丝 ≥ 1000(不可多平台叠加)
3️⃣ Gate 广场内符合粉丝与互动条件的认证创作者
立即填写表单报名 👉 https://www.gate.com/questionnaire/7159
✍️ 丰厚创作奖励等你拿:
🎁 奖励一:新入驻创作者专属 $5,000 奖池
成功入驻即可获认证徽章。
首月发首帖(≥ 50 字或图文帖)即可得 $50 仓位体验券(限前100名)。
🎁 奖励二:专属创作者月度奖池 $1,500 USDT
每月发 ≥ 30 篇原创优质内容,根据发帖量、活跃天数、互动量、内容质量综合评分瓜分奖励。
🎁 奖励三:连续活跃创作福利
连续 3 个月活跃(每月 ≥ 30 篇内容)可获 Gate 精美周边礼包!
🎁 奖励四:专属推广名额
认证创作者每月可优先获得 1 次官方项目合作推广机会。
🎁 奖励五:Gate 广场四千万级流量曝光
【推荐关注】资源位、“优质认证创作者榜”展示、每周精选内容推荐及额外精选帖激励,多重曝光助你轻
NPM 投毒分析 — Shai-Hulud 攻击重现
作者:Joker & Ccj
背景
近日,NPM 社区再次爆发大规模 NPM 包投毒事件,本次事件与 2025 年 9 月的 Shai-Hulud 攻击事件高度相关,本次的 NPM 包中的恶意代码窃取开发者密钥和 API 密钥以及环境变量等敏感信息,利用密钥创建公开仓库并上传这些窃取的敏感信息。
慢雾(SlowMist) 自主研发的 Web3 威胁情报与动态安全监控工具 MistEye 第一时间响应,迅速推送相关威胁情报,为客户提供关键的安全保障。
同时,后台会在第一时间保存恶意样本,并计算其对应的 SHA-256 等特征值。
分析过程
以 @asyncapi/php-template@0.1.1 包为例,在对比旧版本 @asyncapi/php-template@0.1.0 时可以发现,0.1.1 版本比 0.1.1 版本新增了两个 js 文件,为 setup_bun.js 和经过混淆的 bun_environment.js 文件。
在 package.json 中新增了 preinstall 脚本,使得在依赖安装之前会自动执行 setup_bun.js。
在 setup_bun.js 中,首先会去检查系统是否已经安装了 Bun,如果未安装,会自动从官方下载并安装 Bun,并且正确设置环境变量以便找到 Bun 可执行文件。
最后使用 bun 执行 bun_environment.js 文件,该 bun_environment.js 是一个经过高度混淆的恶意文件。
经过将恶意脚本的部分代码反混淆后,可知 aL0() 是整个恶意脚本的主入口函数,大概的可以看出此恶意脚本进行了敏感信息的窃取,会先对运行环境进行检查是否存在 NPM 或 GitHub 等凭据,若检测到这些凭据,它会利用 NPM 凭据进行供应链传播,并且所有收集到的系统信息和敏感数据最终会被打包并上传到攻击者控制的 GitHub 仓库,用于后续利用。
凭据窃取
AWS:该恶意脚本实现 runSecrets() 和 listAndRetrieveAllSecrets() 方法,runSecrets() 方法会遍历所有能找到的云访问凭据以及所有可能的区域,最大化扫描范围;而 listAndRetrieveAllSecrets() 则在指定凭据与区域内进行“深度挖掘”,遍历出所有 Secret,并获取其最新明文内容。两者配合后,攻击者能够将受害者 AWS 账号中可访问的所有 SecretString 和 SecretBinary 一次性全部导出。
而 enumerateValidCredentials() 方法主要用来全面搜集所有能用的云服务密钥。它会从环境变量、配置文件、CLI 登录等各种来源逐一尝试,凡是能成功验证的凭据都会被记录下来,供后续窃取云端机密时使用。
GCP:该恶意脚本中实现的另一个 listAndRetrieveAllSecrets() 方法主要是针对 GCP 模块,它会先根据指定的 Project ID 列出该 GCP 项目下所有的 Secret,然后直接定位每个 Secret 的最新版本,并调用 accessSecretVersion 读取其明文内容。最终将所有获取到的机密(如 API Key、数据库密码等)逐一收集起来。
Azure:该恶意脚本中实现的另一个 listAndRetrieveAllSecrets() 方法主要专门针对 Azure 模块。它会先通过 Azure Resource Manager 扫描整个订阅,找出所有 Key Vault;随后使用获得的凭据逐一连接每个 Vault;最后枚举其中的所有 Secrets,并调用 getSecret 获取每个机密的明文值。
在窃取敏感信息的实现中,还使用合法的安全工具来攻击受害者。在 extractAndInstall() 方法中,解压并提取出 TruffleHog 的二进制文件,TruffleHog 本是用于在代码库中检测和验证泄漏的机密信息,如 API 密钥和凭证,则被攻击者使用来对受害者的整个文件系统进行扫描。
NPM 供应链传播
该恶意脚本实现了个 updatePackage() 函数用于进行 NPM 供应链传播。首先使用窃取的 NPM Token,下载受害者拥有发布权限的合法 NPM 包的源代码,然后修改 package.json 文件,在 scripts 字段中插入恶意的 preinstall 脚本命令。同时将恶意脚本放入包中,自动将包的版本号加 1,以触发用户的自动更新,将带有恶意脚本的 NPM 包推送到 NPM 官方仓库中。
后门与 C2
在窃取完信息后,将利用窃取的 GitHub Token 在其账号下创建一个随机名称的仓库,并获取注册令牌,将受害者的电脑伪装成该仓库的自托管 GitHub Actions Runner。随后,攻击者在仓库中植入恶意工作流,使得任何被触发的 Actions 任务都会在受害者机器上执行,从而实现远程代码执行。
并把这些窃取的信息经过双重 base64 加密上传到创建的仓库里,这些创建的仓库的描述都是“Sha1-Hulud: The Second Coming.”。
经过解密后可以看到用户泄漏的敏感数据。
总结
本次的 NPM 仓库投毒结合了蠕虫和自托管运行程序的长期持久性且利用了 TruffleHog 进行攻击。慢雾安全团队建议开发者在构建和发布新迭代时,应采用依赖包版本锁定策略。若依赖包存在必要的安全或功能更新,应通过内部严格的安全审计流程进行更新,并同步更新锁定版本,避免盲目更新引入新的风险。