GlassWorm供应链攻击深度分析:433个组件被感染,隐形Unicode载荷+Solana区块链C2

2026年3月,安全研究人员追踪到史上最大规模的开发者工具链蠕虫攻击之一——GlassWorm。该攻击在16天内感染了GitHub、npm和VSCode/OpenVSX三大生态系统的433个组件,使用不可见Unicode字符隐藏恶意载荷,并通过Solana区块链交易作为命令控制(C2)通信通道。
攻击时间线与规模
GlassWorm攻击活动可以追溯到2025年10月的首次发现,但2026年3月的第四波攻击是迄今规模最大、最复杂的一次。根据Aikido、Socket、Step Security和OpenSourceMalware社区的联合分析:
| 时间节点 | 事件 |
|---|---|
| 2025年10月 | GlassWorm首次被发现,影响约72个VSCode扩展 |
| 2026年3月3-9日 | GitHub上至少151个仓库被入侵 |
| 2026年3月11日 | npm生态系统确认2个包被注入Unicode恶意载荷 |
| 2026年3月18日 | 累计确认433个受影响组件 |
| 2026年3月20日 | 各安全厂商发布联合分析报告 |
受影响的生态系统分布:
| 生态系统 | 受影响数量 | 入侵方式 |
|---|---|---|
| GitHub仓库 | 151+ | 被盗token强制推送恶意代码 |
| Open VSX扩展 | 72+ | 扩展包被篡改 |
| npm包 | 2+ | Unicode注入(更多可能未被发现) |
值得注意的被入侵项目包括Wasmer、Reworm,以及anomalyco组织(OpenCode和SST的开发商)的opencode-bench项目。攻击者使用被盗的GitHub token对Python仓库进行强制推送(force-push),将恶意代码注入到合法项目中。
隐形Unicode载荷技术

GlassWorm最显著的特征是使用不可见的PUA(Private Use Area)Unicode字符来隐藏恶意载荷。攻击者将恶意JavaScript代码编码到以下Unicode范围内:
- U+FE00-U+FE0F:变体选择符(Variation Selectors)
- U+E0100-U+E01EF:变体选择符补充
这些字符在所有主流代码编辑器、终端和代码审查界面中渲染为完全不可见——肉眼无法通过代码审查发现注入的恶意代码。一旦解码后的payload被传入JavaScript的eval()函数,恶意代码就会执行。
// 概念演示(简化版,非实际恶意代码)
// 攻击者在合法代码的注释或字符串中插入不可见Unicode字符
const config = {
name: "legitimate-package\uFE00\uFE01\uE0100\uE0101", // 不可见字符隐藏在此
// 实际恶意payload经过混淆后嵌入变体选择符中
};
// 解码后通过eval执行
// eval(decodeInvisibleChars(config.name));
多阶段攻击链分析

GlassWorm的攻击链包含多个精心设计的阶段:
第一阶段:初始感染 攻击者通过被盗的GitHub token或npm凭据,将不可见Unicode载荷注入到合法的代码仓库或包中。
第二阶段:载荷解码与执行
当开发者安装被感染的包或克隆被入侵的仓库时,隐藏的Unicode字符被解码并传入eval()函数执行。
第三阶段:RAT部署 恶意代码部署一个多阶段远程访问木马(RAT),该RAT具有以下能力:
- 键盘记录(Keylogging)
- Cookie窃取
- 数据外泄
- 强制安装恶意Chrome扩展
第四阶段:C2通信 与传统的HTTP/HTTPS C2不同,GlassWorm使用Solana区块链交易作为Dead Drop解析器。攻击者的C2指令嵌入在Solana交易的memo字段中,这种技术有以下优势:
- 区块链交易不可篡改、不可删除
- 流量混入正常的区块链活动,难以被网络层检测
- C2基础设施是去中心化的,没有单点故障
检测与排查方法

# 1. 检查npm包中是否包含不可见Unicode字符
# 安装依赖后检查node_modules
find node_modules -name "*.js" -exec grep -Pl '[\x{FE00}-\x{FE0F}\x{E0100}-\x{E01EF}]' {} \;
# 2. 使用Aikido安全扫描工具
npx @aikido-cli/safe-chain scan
# 3. 检查VSCode扩展来源
code --list-extensions | while read ext; do
echo "=== $ext ==="
code --install-extension "$ext" --force 2>&1 | head -5
done
# 4. 检查GitHub仓库最近的force-push记录
git reflog --all | grep "reset:" | head -20
# 5. Python依赖检查
pip audit 2>/dev/null || pip install pip-audit && pip-audit
# 6. 使用Socket安全扫描
npx socket npm ls 2>/dev/null || echo "Install @socketsecurity/cli"
开发者防御建议

| 防御措施 | 优先级 | 实施方式 |
|---|---|---|
| 锁定依赖版本 | 高 | 使用lockfile,禁止自动升级 |
| 审计新依赖 | 高 | 安装前检查包的发布历史、维护者信誉 |
| 启用2FA | 高 | 所有npm/GitHub账号启用硬件密钥2FA |
| 代码签名 | 中 | 对发布的包进行GPG签名 |
| Unicode检测 | 中 | CI/CD中添加Unicode字符扫描 |
| 最小权限Token | 中 | GitHub PAT限制最小必要权限 |
| 依赖扫描 | 中 | 集成Socket、Snyk等供应链安全工具 |
# 在CI/CD管道中添加Unicode检测步骤
# .github/workflows/security.yml
name: Unicode Security Scan
on: [push, pull_request]
jobs:
scan:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Check for invisible Unicode
run: |
if grep -rP '[\x{FE00}-\x{FE0F}\x{E0100}-\x{E01EF}]' --include="*.{js,ts,py,json}" .; then
echo "ALERT: Invisible Unicode characters detected!"
exit 1
fi
供应链攻击趋势分析
GlassWorm是2026年供应链攻击浪潮中的标志性事件。同期发生的其他重大供应链攻击包括:
| 攻击事件 | 时间 | 影响规模 | 攻击手法 |
|---|---|---|---|
| GlassWorm | 2026年3月 | 433个组件 | Unicode隐形载荷+Solana C2 |
| Axios npm投毒 | 2026年3月 | 8300万周下载量受影响 | 维护者账号被盗 |
| Trivy蠕虫 | 2026年3月 | 安全扫描器本身被武器化 | 依赖链感染 |
| Red Hat npm | 2026年 | 32个官方包 | 7周凭据泄露链 |
| Mini Shai-Hulud | 2026年5月 | 170+ npm包 | 协调性跨生态系统攻击 |
这些攻击呈现出明确的趋势:攻击者从针对单一包的投毒,进化到跨生态系统、自我传播的蠕虫式攻击。开发者工具链正在成为攻击者的首选目标——因为感染一个开发者工具可以级联影响成千上万的下游项目。
数据来源与参考文献
- Aikido Security. "GlassWorm: Fourth Wave Analysis." aikido.dev, 2026-03.
- Socket Security. "GlassWorm Supply Chain Campaign." socket.dev, 2026-03.
- ProbablyPwned. "GlassWorm Supply Chain Attack Surges to 433 Compromised Components." probablypwned.com, 2026-03-20.
- Lifeboat Foundation. "GlassWorm Malware Hits 400+ Code Repos." lifeboat.com, 2026-03-18.
- Cloud Security Alliance. "GlassWorm Returns: Developer Toolchain Worm." labs.cloudsecurityalliance.org, 2026-03.
- Step Security & OpenSourceMalware Community. Joint analysis report, 2026-03.
更新时间: 2026-06-27
评论