返回博客

846个恶意npm包:Flooding Dropper活动对数据抓取团队的危害

2026年8月5日,Sonatype在npm中记录了Flooding Dropper活动——846个恶意软件包(到8月11日,数量增加到1033)。跨平台的加载器清除环境变量、凭据和会话。我们分析了该活动的机制,以及为什么对于解析团队来说,这比普通的密码泄露要昂贵:与.env一起,代理凭据、cookie会话和反检测浏览器的配置文件也随之消失。

📅2026年8月12日
846个恶意npm包:Flooding Dropper活动对数据抓取团队的危害

2026年8月5日,Sonatype的研究人员在npm上记录了一场名为Flooding Dropper的活动:846个恶意组件通过数十个一次性账户发布。一周后,数字增长——在更新的OpenSourceMalware数据中,追踪同一活动的名称为WEL1DROPPER,已经有1033个确认的包。内部是一个跨平台的加载器,它在Windows、macOS和Linux上拉取第二阶段,并清除开发者机器上的一切:环境变量、凭证、会话。

对于依赖解析和自动化的团队来说,这不是“又一个关于npm的新闻”。抓取技术栈正是npm:Playwright、Puppeteer、Crawlee、代理代理的包装器、HTML解析器、队列。在同一台机器上,通常会有一个包含代理池的登录名和密码的.env文件、会话的cookie-jar和反检测浏览器的配置文件。让我们分析一下究竟发生了什么,以及这对实践的影响。

关于活动的已知信息

Sonatype以sonatype-2026-005660的标识进行活动,CVSS评分为8.7,分类为CWE-506(嵌入恶意代码)。研究人员将包关联到一个组的特征标志:

  • 自动生成名称。 名称通过插值重复的术语生成——报告中提到“bigops”和“bnpl”,例如bigops-api和长串拼接如dolyame-boxy-desktop-bnpl-card-gallery。OpenSourceMalware将其描述为“AI垃圾蹲”——大规模的类型蹲用随机生成的名称,而不是精确伪造一个流行包。
  • 版本来自同一范围。 发布集中在35.x.y周围——对于没有历史的包来说,这些号码异常高。
  • 分散在多个账户上。 每个账户发布一小批包,因此封锁一个发布者并不会摧毁整个操作。

启动机制的描述各不相同,这种差异很重要。Sonatype表示,代码在“安装或导入”包时触发。OpenSourceMalware进一步说明:部分样本不依赖经典的生命周期钩子,要求开发者通过require()手动连接包。实践的结论是:仅依靠--ignore-scripts并不能拯救你——如果依赖确实被导入到代码中,负载将会生效。

第二阶段如何交付

加载器通过HTTPS从隐藏列表中的随机主机拉取payload——根据The Hacker News的数据,交付点是三个Cloudflare Workers域名。如果直接下载失败,则启用备用通道:负载从域名wel1.ru的DNS TXT记录中收集,带有平台子域(sdk.dl、ext.dl、pkg.dl、net.dl)。也就是说,HTTP域名的出站过滤通过普通的DNS请求绕过——在企业网络中,能够切断这些请求的很少。

接下来是各个平台:

  • Windows: 修补ETW和AMSI(即抑制遥测和脚本的反病毒检查),通过注册表中的自启动键和计划任务进行固定,文件存储在AppData中。
  • macOS: 相同的规避技巧,通过LaunchAgent进行固定。在macOS负载中,研究人员发现了俄罗斯金融服务的域名(tcsbank.ru、cloudpayments.ru)——表明对讲俄语用户的银行会话的针对性兴趣。
  • Linux: 打包的UPX ELF二进制文件,展开Sliver框架的代理——这已经是一个完整的C2通道,而不是一次性的盗窃。

加上标准配置:沙箱和调试器检查、架构识别、读取环境变量、独立的后台进程(在终端关闭时存活)以及将负载反射到内存中,以避免在磁盘上留下文件。

为什么这会特别影响解析团队

信息窃取者不区分“重要”和“不重要”——它会收集所有看起来像秘密的东西。普通用户的秘密是浏览器中的密码和加密钱包。对于从事数据收集的人来说,战利品的组合不同,老实说,更加美味:

  • 环境变量和.env——这里几乎总是包含代理网关的主机、登录名、密码和会话参数(国家、城市、粘性标识符)。环境变量的外泄在活动分析中明确指出。
  • Cookie和会话令牌。 被窃取的会话意味着绕过MFA:cookie本身就是证明,表明第二次验证已经通过。有效令牌的日志可以在黑市上以5美元起的价格出售。
  • 反检测浏览器的配置文件——“cookie + 指纹 + 代理”的组合,即一个现成的工作账户,无需加热。
  • CI/CD、npm和云的令牌——不仅可以访问你的机器,还可以访问管道,从中可以发送你的构建。

这一现象的规模不再是小众的。SpyCloud在2026年的报告中统计了1810万个泄露的API密钥和令牌,正是从恶意软件日志中获得的。根据Recorded Future和Flashpoint的数据,2025年,信息窃取者感染了1110万台机器,导致33亿个被盗账户。而在Sonatype关于2026年软件供应链状态的报告中,提到2025年新增的恶意包超过454,600个,累计封锁超过1,233,000个——同比增长75%。Flooding Dropper不是异常,而是流量中的普通事件。

代理账户的拥有者损失了什么

我特别要提到的是,在安全分析中通常不会写的内容,因为作者不与代理打交道。泄露的代理凭证并不是“密码丢失”,而是三个问题同时出现:

  1. 支付的流量。 住宅和移动流量按千兆计费。其他人的解析器使用你的凭证——这笔费用是你的账单,而你可能会在很久之后才注意到。
  2. 他人在你的IP上的声誉。 攻击者需要“干净”的住宅出口,以使其活动看起来像普通家庭用户。你的目标网站会在你的会话中看到可疑行为——并会对你多年来培养的账户进行封禁。
  3. 与提供商的争论。 从任何正常提供商的角度来看,流量是从你的账户发出的,你需要为此解释。

该怎么办:实践最低限度

  1. 隔离环境。 抓取技术栈安装在容器或单独的虚拟机中——而不是在存放个人cookie、工作邮件和生产令牌的机器上。这是唯一一项即使针对尚未被发现的包也有效的措施。
  2. 将代理凭证从.env中移除,远离代码。 秘密存放在秘密管理器或运行者的环境变量中,而不是在项目根目录中的文件中,任何导入的模块都可以读取。
  3. 在有条件的地方启用IP授权。 将访问权限绑定到你的服务器上,使被盗的登录/密码组合失去价值:从其他地址访问将无法工作。关于如何实现以及适用的场景,已在关于代理的IP地址白名单的材料中进行了讨论。存储访问的通用规则在安全存储代理凭证的指南中。
  4. 为每个项目设置单独的子凭证和流量限制。 如果为每个脚本设置了自己的访问权限,并设定了千兆的上限,那么一个凭证的泄露不会耗尽整个余额,并且可以在几分钟内本地化。
  5. 监控消耗。 在没有任务增长的情况下,GB消耗的突然激增是你拥有的最早和最便宜的妥协检测器。
  6. 依赖纪律。 使用npm ci根据锁定文件,而不是自由的install,对新版本进行隔离(7-14天),检查包的年龄和发布者历史,内部镜像与允许列表。版本为35.x.y、历史为零且名称由拼接词组成的包——是停下来而不是安装的理由。

如果怀疑已经被捕获

Sonatype在这里的建议非常具体,顺序也很重要:将主机视为完全被攻陷;寻找描述的固定机制(Windows中的自启动键和计划任务,macOS中的LaunchAgent);在清理机器后旋转凭证——npm、GitHub、云、CI/CD——而不是之前,否则新的秘密将通过相同的路径流失;检查锁定文件、依赖缓存和内部镜像以查找保留的副本;在重新安装之前逐字检查包名称。

在此列表中添加你自己的内容:更改代理访问的密码、撤销反检测浏览器中的活动会话以及检查过去两周的流量消耗历史。如果流量按千兆购买——住宅移动代理——消费报告就是你的访问日志。

结论

Flooding Dropper的兴趣不在于其复杂性,而在于其经济性:一千个一次性包、生成的名称、成批的账户——这是一个流水线,旨在让某人不加思索地安装依赖。某些活动将需要数周才能从注册表中清除,但流量不会停止:Sonatype去年的数字没有留下任何幻想。

对于那些收集数据的人来说,实践的结论很简单。开发者的机器是一个汇聚所有访问的点:代理、账户、会话、管道。隔离技术栈,将访问绑定到IP,将凭证分散到项目中,并监控流量消耗的图表。这些步骤中的任何一步都不需要等待新的活动被索引。