GlassWormがOpen VSXで急拡大、拡張機能の依存関係を悪用したトランジティブ感染に手口が進化
Open VSXレジストリでGlassWormマルウェアの大規模拡大が確認された。Socketの調査によると、2026年1月31日以降に72個の悪意ある拡張機能が新たに発見されており、GitHubリポジトリへのUnicode文字埋め込みやnpmパッケージへの感染も組み合わせた複合的なサプライチェーン攻撃キャンペーン(一連の攻撃活動)に発展している。
extensionDependenciesを踏み台にするトランジティブ配信
今回のキャンペーンで最も注目すべきは手口の進化だ。以前のGlassWormは各拡張機能にローダーを直接埋め込む方式だったが、第2波では extensionPack と extensionDependencies というVSCode拡張機能マニフェストのフィールドを悪用するようになった。
この2つのフィールドはそれぞれ異なる用途を持つ。
| フィールド | 本来の用途 | インストール時の挙動 |
|---|---|---|
extensionPack | 関連拡張機能をひとまとめのパックとして配布する | パックに含まれる全拡張機能が一括インストールされる |
extensionDependencies | 拡張機能の動作に必要な依存関係を宣言する | 依存として登録された拡張機能が自動インストールされる |
攻撃者はこれを利用し、一見無害に見えるフロント拡張機能の extensionDependencies に悪意ある拡張機能のIDを登録する。開発者がフロント拡張機能をインストールした瞬間、エディタが依存チェーンをたどって自動インストールを実行し、意図せずマルウェアを引き込む形になる。インストール確認画面には最初の1件しか表示されないため、ユーザーには依存関係として何が入るのか見えない。
Socketはこれを「全ての悪意あるリストに直接ローダーを埋め込む代わりに、一見スタンドアロンに見える拡張機能をトランジティブ(推移的)配信の媒体に変えている」と評した。
攻撃フロー
graph TD
A[攻撃者が無害に見えるフロント拡張機能を公開] --> B[extensionDependenciesに<br/>悪意ある拡張機能IDを登録]
B --> C[開発者がフロント拡張機能をインストール]
C --> D[エディタが依存関係チェーンを自動解決]
D --> E[悪意ある拡張機能が自動インストール]
E --> F[GlassWormローダー実行]
F --> G[Solanaブロックチェーンから<br/>C2サーバーアドレスを取得]
G --> H[トークン・認証情報・シークレットを窃取]
なりすまし対象
悪意ある72件の拡張機能は正規の開発者ツールに偽装している。対象カテゴリは以下の通り。
- Angularリンター・フォーマッター
- コードランナー・デバッガー
- AI支援コーディングツール(Claude Code、Google Antigravityを騙るもの)
- XMLエディタ・PDFツール
- SQLデータベースユーティリティ
確認された悪意あるパッケージ名の例として gvotcha.claude-code-extension(Claude Code拡張機能を騙る)、mswincx.antigravity-cockpit(Google Antigravityを騙る)、angular-studio.ng-angular-extension などがある。
GitHub・npmへの横展開
攻撃はOpen VSXにとどまらない。Aikidoのセキュリティ研究者が2026年3月3日〜9日の間に151件のGitHubリポジトリへの不可視Unicode文字埋め込みを発見している。
ここで使われているのはゼロ幅Unicode文字による情報ステガノグラフィだ。これらの文字はほとんどのコードエディタやdiffビューで表示されないため、視覚的なコードレビューでは検出できない。
| 文字 | Unicode | 正式名称 | 本来の用途 |
|---|---|---|---|
| ZWSP | U+200B | Zero-Width Space | テキスト内の任意改行ポイントを示す |
| ZWNJ | U+200C | Zero-Width Non-Joiner | 隣接文字の合字(リガチャ)を抑制する |
| ZWJ | U+200D | Zero-Width Joiner | 絵文字シーケンス等で文字を結合する |
| WJ | U+2060 | Word Joiner | 改行を防止する(BOMなし版) |
| LRM | U+200E | Left-to-Right Mark | テキスト方向を左→右に強制する |
| RLM | U+200F | Right-to-Left Mark | テキスト方向を右→左に強制する |
コードに埋め込まれたエンコード済みペイロード(悪意あるコード本体)は、実行時にローダーへとデコードされ、トークンや認証情報の窃取スクリプトをリモートから取得する。
さらに攻撃者はLLMを活用したカモフラージュコミットを生成している。リアルなドキュメント修正・バージョンバンプ・スタイル統一リファクタリングに見せかけることで、コードレビューでの検出を困難にする。
npm側では @aifabrix/miso-client と @iflow-mcp/watercrawl-watercrawl-mcp の2件が同手法による感染を確認された。
PhantomRavenとRemote Dynamic Dependencies
Endor Labsは関連キャンペーンとして、50の使い捨てアカウント経由でアップロードされた88件の悪意あるnpmパッケージ(PhantomRavenと名付けられた)を発見した(2025年11月〜2026年2月)。
PhantomRavenが採用するRemote Dynamic Dependencies(RDD)は特に厄介な手口だ。新バージョンを公開することなくコードを書き換えられるため、スキャン・検査機構を事実上バイパスできる。バージョン固定やロックファイルが有効なのはパッケージのバージョンが変わる場合のみで、既存バージョンのコードが動的に差し替えられるRDDには対応できない。
GlassWormの恒常的な特徴
GlassWormは当初から以下の機能を備えており、第2波でも引き続き有効だ。
- ロシア国内システムへの感染を意図的に回避するロケールチェック(攻撃者の所在地を示唆する)
- SolanaブロックチェーントランザクションをC2サーバーアドレスのデッドドロップリゾルバ(正規サービスを経由してC2アドレスを間接取得する手法)として利用(ブロックチェーンの不変性により、アドレス情報の削除が困難になる)
- ウォレットローテーションによる追跡・検出回避
- 強化された難読化技術
対応状況
Open VSXは特定された悪意ある拡張機能をレジストリから削除済み。ただし今回の攻撃は extensionPack・extensionDependencies を経由した推移的インストール機構という構造的な問題を突いており、事後削除だけでは根本的な解決にならない。
開発環境への攻撃は手口が年々洗練されている。拡張機能のインストールは「インストールされるのは1件だけ」ではなく、依存チェーン全体をインストールしているという認識が必要だ。インストール前の依存関係の確認と、組織レベルでの拡張機能許可リスト管理が現実的な対策となる。
VSCode拡張機能サプライチェーン攻撃の変遷
GlassWormの extensionDependencies 悪用は突然生まれたわけではない。VSCode拡張機能マーケットプレイスを狙うサプライチェーン攻撃は2023年から段階的に手口が洗練されてきた。
2023年: タイポスクワッティングの時代
最初期の手口はシンプルだった。人気拡張機能の名前を1文字変えた偽パッケージを公開し、インストールミスを狙う。代表的な事例として、人気テーマ「Dracula Official」を模倣した「Darcula」が100以上の組織に感染し、コードを外部サーバーに送信していた。
この時期に研究者が調査したところ、マーケットプレイス全体で1,283件の悪意ある拡張機能が発見され、累計2億2,900万インストールに達していた。ただし手口は直接的で、拡張機能自体にマルウェアコードを埋め込むだけ。検出も比較的容易だった。
2024年: 依存関係の悪用が始まる
2024年に入ると攻撃者は複数アカウントを使い分ける組織的な運用(TigerJackキャンペーンなど)に移行し始めた。同時期にnpmエコシステムではdependency confusion(依存関係かく乱)攻撃が深刻化しており、ある調査では企業の49%がこの攻撃に脆弱だった。
特筆すべきは、AIコード生成ツールが「存在しないパッケージ名」をハルシネーションで出力する問題を悪用したケースだ。攻撃者はLLMが生成しがちな架空のパッケージ名を先回りして登録し、開発者がAI提案のコードをそのまま実行するのを待つ。
2025年: GlassWorm登場と自己増殖型ワーム
2025年はVSCode拡張機能攻撃の転換点となった。
2025年10月 — GlassWormが初めて確認された。Open VSXで7件の悪意ある拡張機能が発見され、合計35,800ダウンロードを記録。「VSCode拡張機能初の自己増殖型ワーム」と呼ばれた。盗んだ認証情報を使って次の拡張機能を汚染する再帰的な感染メカニズムを備えていた。
2025年11〜12月 — GlassWormは第2波・第3波と拡大。Flutter、React、Tailwind、Vimなど人気ツールに偽装した計48件以上の拡張機能が確認された。同時期にReversingLabsは、拡張機能の依存フォルダ内にマルウェアを隠す手口を19件で発見。偽Prettier拡張機能がAniviaローダー経由でOctoRAT(フル機能のRAT)を配信する多段攻撃チェーンも確認された。
この年だけでVSCode関連のマルウェア検出数は前年比4倍(2024年の27件→2025年10ヶ月間で105件)に跳ね上がった。
npm側でも並行して大規模攻撃が進行した。
- 2025年9月 — Chalk/Debugなど18パッケージ(週間26億ダウンロード)がフィッシングでメンテナアカウントを奪取され改ざん
- 2025年9月 — 自己複製型ワーム「Shai-Hulud」が出現、11月の第2波では25,000以上のリポジトリに拡散
2026年: 信頼チェーンの悪用へ
そして2026年、GlassWormは今回報告された extensionDependencies を悪用するトランジティブ配信に進化した。
graph LR
A["2023<br/>タイポスクワッティング"] --> B["2024<br/>依存関係かく乱<br/>AI生成名の悪用"]
B --> C["2025<br/>自己増殖型ワーム<br/>多段ペイロード"]
C --> D["2026<br/>extensionDependencies<br/>トランジティブ配信"]
style A fill:#4a9,stroke:#333,color:#fff
style B fill:#4a9,stroke:#333,color:#fff
style C fill:#e74,stroke:#333,color:#fff
style D fill:#c00,stroke:#333,color:#fff
手口の進化には明確なパターンがある。
| 時期 | 主な手口 | 検出難易度 | 感染規模 |
|---|---|---|---|
| 2023年 | 名前の類似で誤インストールを誘う | 低(名前を比較すれば気づく) | 単発 |
| 2024年 | 内部パッケージ名と同名の公開パッケージを登録 | 中(ビルド設定の監査が必要) | プロジェクト単位 |
| 2025年 | 認証情報窃取→次のパッケージを汚染する自動伝播 | 高(正規メンテナの署名で配信) | エコシステム全体 |
| 2026年 | エディタの依存解決機構自体を配信経路に転用 | 非常に高(フロント拡張機能は無害) | 依存チェーン全体 |
初期は「偽物を見抜けるか」という人間の注意力の問題だったが、2025年以降は「正規の仕組みが攻撃経路になる」構造的な問題に変質している。GlassWormの extensionDependencies 悪用はその到達点で、フロント拡張機能のコード自体は完全にクリーンなため、静的解析でも検出できない。
当ブログの関連記事
npmやVSCode周辺のサプライチェーン攻撃について、以下の記事でも取り上げている。
- npmサプライチェーンワーム「SANDWORM_MODE」がAI開発環境を標的にクリプトキーとCI secretsを窃取 — Claude Code・Cursor・VSCodeを標的にしたタイポスクワッティングとMCPインジェクション
- Clinejection: GitHubイシュータイトルから4000台の開発マシンにAIエージェントが降ってきた攻撃の全容 — Clineのトリアージボットを経由したnpmサプライチェーン侵害とGitHub Actionsキャッシュ汚染
- 「StegaBin」がPastebinのゼロ幅文字でC2を隠蔽し悪意あるnpmパッケージを配布 — 北朝鮮Famous Chollimaによるゼロ幅Unicode文字のステガノグラフィ(本記事のGitHubリポジトリ攻撃と同じ手法)
- Chrome・VS Code・Copilotのセキュリティ問題まとめ — Live Server等1.25億インストール超の正規拡張機能に見つかった重大な脆弱性