无淡季:48小时内三场供应链攻击活动针对npm、PyPI和Docker Hub

经过几周相对平静的时期,三起供应链攻击再次将敏感信息(secrets)推到了聚光灯下。

2026年4月21日至23日期间,三起独立攻击同时袭击了npm、PyPI和Docker Hub。攻击目标各有不同,威胁行为者组织可能也不相同,但他们的目标一致:每起案例中,恶意软件的主要目标是窃取开发者环境和CI/CD流水线中的敏感信息。API密钥、云凭证、SSH密钥和镜像仓库令牌都是攻击目标。

活动一 - Checkmarx KICS:被攻陷的安全扫描器反噬用户

第一起攻击破坏了官方的Checkmarx KICS Docker镜像和VS Code扩展。Docker在4月22日标记了checkmarx/kics仓库中的可疑活动,并向Socket发出警报。一个混淆的有效载荷窃取了GitHub认证令牌、AWS凭证、Azure和Google Cloud令牌、npm配置文件、SSH密钥和环境变量,并在外传前对所有内容进行压缩和加密。该有效载荷还收集了存储在环境变量中的所有API密钥。

TeamPCP很可能是这次攻击的幕后黑手,基于他们在披露后立即在X上发布的帖子。这将是该组织两个月内对Checkmarx的第二次攻击。

活动二 - CanisterSprawl:蠕虫将开发者机器变为发射台

4月21日,pgserve(Node.js的PostgreSQL服务器)的恶意版本出现在npm上。被篡改的版本会注入一个凭证收集脚本,通过postinstall钩子在每次npm install时运行。它会搜索npm发布令牌,对于受害者可以发布的每个包,它会递增补丁版本、注入自身代码,然后将其发布到npm。如果同时发现PyPI令牌,蠕虫会跨生态系统传播。

Socket和StepSecurity将其追踪为CanisterSprawl,名称来源于其使用互联网计算机协议(ICP) canister作为弹性、去中心化的C2通道。Socket的后续调查发现,被攻陷的Namastex.ai npm包与相同的核心方法有关:安装时执行、凭证窃取、通过canister支撑的基础设施进行离主机外传,以及自我传播逻辑。

活动三 - xinference:TeamPCP重返PyPI

4月22日,xinference在PyPI上的三次连续发布都携带了凭证窃取有效载荷。恶意软件解码第二阶段收集器,窃取SSH密钥、云凭证、环境变量和加密钱包。StepSecurity将其归因于TeamPCP,该组织也是3月litellm和telnyx PyPI攻击的幕后黑手。

与之前的TeamPCP活动有一个显著的技术差异:xinference有效载荷直接向C2服务器发送明文tar.gz文件。缺乏加密这一特点让一些研究人员怀疑是模仿者所为,尽管注入模式和多个版本发布的节奏与TeamPCP既定的攻击手法一致。

共同线索

三个活动,三个生态系统,一个目标。这些攻击都不是以干扰软件交付或破坏构建输出为目的。从CanisterSprawl蠕虫到被木马化的KICS扫描器再到xinference窃密器,每个有效载荷都经过精心设计,​只做一件事:从开发者和管理流水线所运行的环境中提取凭证。每个受影响团队现在应该问的问题不仅仅是"这个包是否在我的环境中运行过?"而是:如果运行了,哪些敏感信息是可访问的,它们是否已被轮换?

回答这个问题需要知道你的敏感信息存放在哪里:跨越代码仓库、CI配置、环境变量和开发者机器。GitGuardian提供跨所有攻击目标表面的敏感信息持续检测——代码仓库、CI配置、环境变量和开发者机器——因此当下一个被篡改的包在你的流水线中运行时,你不是从零开始。

@npm