
glassworm-hunter v1.0.4
通过扫描 VS Code 扩展、npm/PyPI 包和 Git 仓库中的不可见 Unicode 载荷、解码器模式、C2 标记以及已知恶意 IOC,检测 GlassWorm 供应链攻击载荷。
glassworm-hunter

在你的机器上检测GlassWorm供应链攻击载荷。扫描VS Code扩展、npm包、Python包和git仓库。
该扫描器检测攻击技术本身——不可见的Unicode变体选择器载荷、GlassWorm解码器模式、C2指示器和凭据窃取代码。
安装
pip install glassworm-hunter
或者使用pipx:
pipx install glassworm-hunter
快速开始
扫描当前目录,但不扫描VS Code/Cursor扩展:
glassworm-hunter scan --no-extensions
扫描特定项目:
glassworm-hunter scan /path/to/project
它检测什么
技术检测(捕获未知变体)
- 不可见的Unicode载荷 - 用于编码隐藏代码的变体选择器字符(U+FE00-FE0F, U+E0100-E01EF)。合法使用是1-2个字符用于表情符号。GlassWorm使用了数千个。
- GlassWorm解码器模式 - 解码不可见载荷的codePointAt + 变体选择器范围算法
- 双向覆盖字符 - Trojan Source攻击(CVE-2021-42574)
- 韩文填充符 - 不可见的有效JavaScript标识符(U+3164)
- eval/Function与动态内容 - 由解码字符串提供的执行槽
- 凭据访问 - 读取.npmrc、.gitcredentials、SSH密钥、令牌环境变量的代码
- C2通信模式 - Solana RPC调用、Google Calendar网址、WebRTC数据通道出现在意外上下文中
已知IOC匹配(补充)
- 21个已知恶意VS Code/OpenVSX扩展ID(所有5波)
- 4个已知恶意npm包
- 14个已知C2 IP地址
- 3个已知Solana C2钱包地址
- 攻击者电子邮件和构建路径工件
严重级别
| 级别 | 含义 |
|---|---|
| CRITICAL | 检测到活跃的GlassWorm载荷(代码中的不可见Unicode簇,解码器模式) |
| HIGH | 匹配到已知恶意IOC(C2 IP、钱包、扩展依赖已知恶意软件) |
| MEDIUM | 值得审查的可疑模式(eval+动态内容、凭据访问、Trojan Source) |
| LOW | 信息性(异常的零宽度字符密度,可疑的安装脚本) |
CLI选项
glassworm-hunter scan [OPTIONS] [PATHS...]
| 选项 | 默认值 | 描述 |
|---|---|---|
--extensions / --no-extensions | on | 扫描VS Code/Cursor/Codium扩展 |
--npm-scan / --no-npm-scan | on | 扫描node_modules |
--pip-scan / --no-pip-scan | off | 扫描Python site-packages |
--git / --no-git | on | 扫描git仓库 |
--format [console|json|sarif] | console | 输出格式 |
--output FILE | stdout | 将报告写入文件 |
--severity [critical|high|medium|low] | low | 报告的最低严重级别 |
--max-file-size SIZE | 10MB | 跳过大于此的文件 |
--include-hidden | off | 扫描隐藏文件/目录 |
--quiet | off | 抑制进度输出 |
--verbose | off | 显示每个正在扫描的文件 |
--exclude PATTERN | — | 要排除的Glob模式(可重复) |
--disable-rule RULE_ID | — | 抑制特定检测规则(可重复) |
--ioc-file FILE | — | 从JSON文件加载额外的IoC指示器 |
扫描期间会在stderr上显示Rich进度条。使用--quiet或--verbose时会自动抑制。扫描完成后,始终会在stderr上打印一行摘要(扫描的文件、发现项、输出路径)。
其他命令
# List all detection rule IDs (for use with --disable-rule)
glassworm-hunter rules
# Update local IoC database from GitHub (default source:
# https://raw.githubusercontent.com/afine-com/glassworm-hunter/main/data/ioc.json)
glassworm-hunter update
# Update from a custom source (e.g. internal threat intelligence server)
glassworm-hunter update --source https://internal.corp/ioc.json
# Force overwrite existing local IoC database
glassworm-hunter update --force
# Print version
glassworm-hunter version
退出代码
| 代码 | 含义 |
|---|---|
| 0 | 无发现 |
| 1 | 发现检测到 |
| 2 | 扫描器错误 |
如果发现了什么
- 不要惊慌。 扫描器找到了一个指示器,而不是已确认的入侵。某些检测可能是误报,我们的团队正在持续努力减少误报并提高检测准确性。
- 不要执行标记的代码。 在解决之前,不要运行、构建或测试受影响的项目。
- 严重发现: 立即卸载扩展/包。轮换你机器上的NPM令牌、GitHub令牌、SSH密钥以及任何其他凭据。
- 高发现: 调查标记的文件。如果它位于你未明确安装的依赖中,将其移除。
- 中发现: 审查代码。这些模式可疑,但在某些上下文中可能是合法的。
CI/CD集成
用于自动化处理的JSON输出:
glassworm-hunter scan . --format json --output report.json --no-extensions
用于GitHub代码扫描的SARIF:
glassworm-hunter scan . --format sarif --output results.sarif --no-extensions
将SARIF上传到GitHub:
- uses: github/codeql-action/upload-sarif@v3
with:
sarif_file: results.sarif
在CI中使用退出代码:
glassworm-hunter scan . --severity critical --no-extensions || exit 1
排除构建工件和供应商代码:
glassworm-hunter scan . --exclude "dist/**" --exclude "*.min.js" --no-extensions
无网络访问
该扫描器默认完全离线。仅读取本地文件。无遥测、无回拨、无自动更新检查。IoC数据库已捆绑在包中。
唯一发出网络请求的命令是glassworm-hunter update,它从GitHub(或自定义的--source URL)获取最新的IoC数据库。永远不会自动调用。
配置文件
在项目根目录放置一个.glassworm.yml来设置默认值:
exclude:
- "*.min.js"
- "vendor/**"
- "dist/**"
disable_rules:
- zero-width-chars
severity: medium
CLI标志会覆盖配置文件的值。
自定义IoC文件
使用--ioc-file从JSON文件加载额外的指示器。这对于团队特定或内部威胁情报很有用:
glassworm-hunter scan /path --ioc-file /path/to/team_ioc.json
文件必须遵循与data/ioc.json相同的模式:
{
"schema_version": "1.0",
"extensions": [{"id": "publisher.name"}],
"npm_packages": [{"name": "pkg", "malicious_versions": "1.0.0"}],
"c2_ips": [{"ip": "1.2.3.4"}],
"c2_wallets": [{"address": "..."}],
"attacker_artifacts": [{"type": "email", "value": "[email protected]"}]
}
自定义文件会合并到所有其他IoC层之上(硬编码 → 捆绑 → 用户~/.glassworm/ioc.json → --ioc-file)。
IoC数据库层
扫描器使用3+1层IoC系统(每一层会合并到上一层之上,从不移除):
- 硬编码 — 内置于Python源码中,始终可用
- 捆绑 — 随包分发的
data/ioc.json - 用户 —
~/.glassworm/ioc.json,通过glassworm-hunter update更新 - 自定义 —
--ioc-file标志,最高优先级
致谢
- Koi Security - GlassWorm的原始发现者(2025年10月),并对多波攻击进行持续追踪,包括OpenVSX/VSCode活动、Rust二进制切入点和macOS切入点。本扫描器中的IoC数据基于他们已发表的研究。
- Aikido Security - 对2026年3月针对GitHub仓库和npm包的GlassWorm波的分析,与Socket、Step Security和OpenSourceMalware社区共同完成。
- AFINE - 本扫描器。阅读完整研究:Hunting GlassWorm: Open-Source Detection for Invisible Supply Chain Payloads
Windows
扫描器可在Windows上运行。除非以提升的(管理员)命令提示符运行,否则有4项测试会失败。
License
MIT