Glassworm 把恶意代码藏进不可见 Unicode 字符,至少 151 个 GitHub 仓库受影响

这类供应链攻击最麻烦的地方,不是恶意代码写得有多复杂,而是它开始利用人眼和代码审查流程天然看不见的部分。

Aikido Security 近日披露,黑客组织 Glassworm 发起的新一轮攻击,已经影响至少 151 个 GitHub 仓库,并进一步扩展到 npm 和 VS Code 市场。研究人员表示,攻击者把恶意负载编码进不可见的 Unicode 字符中,让代码在审查界面里看上去像是空白,真正的 payload 则在运行时被解码并执行。

Glassworm 利用不可见 Unicode 字符发起供应链攻击

攻击利用的是“看不见的代码”

这次事件的核心,不是传统意义上的混淆,而是 Unicode 私用区字符的滥用。根据 Aikido 的分析,攻击者利用一组在多数编辑器、终端和代码审查界面中会显示为零宽空白的字符,把恶意字节隐藏在一段看似空字符串的内容里。

随后,一段很小的解码逻辑会把这些隐藏字节还原出来,并交给 eval() 执行。对开发者来说,这意味着代码审查看到的“空白”,在运行时并不是真的空白。

这也是这轮攻击最危险的地方:它不是单纯把恶意逻辑伪装得更深,而是直接绕过了人眼对代码可见部分的依赖。

影响范围已经不止 GitHub

Tom's Hardware 援引 Aikido 的研究称,当前已确认至少有 151 个 GitHub 仓库命中了相关解码器模式,而且实际规模可能更大,因为部分受影响仓库在研究公开前就已被删除。研究人员判断,这批 GitHub 仓库的受影响时间主要集中在 2026 年 3 月 3 日到 3 月 9 日之间。

更值得注意的是,这轮活动并没有停留在 GitHub。Aikido 同时观察到,相同技术已经出现在 npm 和 VS Code 市场中,至少涉及两个 npm 包和一个 VS Code 扩展。这说明 Glassworm 的操作已经明显呈现出跨平台、跨生态扩散的特征。

已被点名的目标中,包括 Wasmer、Reworm,以及 anomalyco 旗下的 opencode-bench 等项目。对开源生态来说,这种攻击的风险不只在于单个仓库被投毒,而在于它可能沿着依赖链继续向下游扩散。

更难防的是它看起来像正常提交

如果只是简单插入一段明显可疑的恶意代码,这类攻击还不至于这么棘手。问题在于,Aikido 认为攻击者正在把这些注入伪装成版本更新、文档修补、小型重构和 bug 修复,而且风格会尽量贴近目标项目本身。

这也是研究人员怀疑其中存在大语言模型辅助的重要原因。要在大量不同代码库里持续制造“像正常开发者写出来的提交”,靠人工逐个定制的成本很高,而 LLM 正好能在这类伪装工作里提供规模化能力。

这意味着开源供应链攻击又往前走了一步:不只是隐藏恶意代码,而是连提交表面上的“正常感”也一起生成出来。

后续载荷仍然值得警惕

Aikido 提到,Glassworm 过去的第二阶段 payload 曾借助 Solana 区块链作为投递或指令通道,用于窃取凭据、令牌和其他敏感信息。这让问题不再只是“仓库里混入了一段恶意逻辑”,而是后续联动、追踪和阻断都可能更复杂。

从防守角度看,这类攻击已经不适合继续主要依赖人工审查。原因并不复杂:当恶意内容本身对人眼不可见,同时外围提交又看起来足够正常时,仅靠 reviewer 的经验很难稳定发现问题。

对开发团队意味着什么

这次事件最值得记住的一点,是供应链安全的检查重点正在变化。过去很多团队把注意力放在可疑依赖、陌生作者、异常网络请求或明显混淆代码上,但 Glassworm 这类技术说明,“不可见字符”本身也已经成为需要单独审计的攻击面。

更现实的做法,是把不可见字符检测、恶意模式扫描和依赖安全检查尽量前移到自动化流程里,而不是把希望寄托在 PR 审查时的肉眼判断上。只要攻击开始规模化,人工 review 就很难继续承担第一道防线的职责。

参考来源