インフラ・運用

あなたのVS Codeは大丈夫?GlassWormの脅威と今すぐできる対策

約14分で読めます

2025年10月に発見されたサプライチェーン攻撃マルウェア「GlassWorm」が、VS Code拡張・npm・GitHubを標的に拡大中。不可視文字に隠れた脅威の実態と、開発者が今すぐ取るべき対策を解説します。

「インストールした覚えのない拡張機能が動いている?」

こんな経験はありませんか?

  • VS Codeに入れた拡張機能を、チームメンバーが「それ入れた?」と怪訝な顔をする
  • npmパッケージのアップデート後、なぜかCPU使用率が微妙に上がっている
  • GitHubのコミット履歴に、自分が触っていないはずのファイルへの変更が混じっている

これらは単なる気のせいではなく、GlassWorm(グラスワーム) と呼ばれるサプライチェーン攻撃マルウェアの感染サインである可能性があります。2026年3月には第4波が観測され、400以上のリポジトリ・拡張機能が侵害されたことが確認されました。他人事ではありません。弊社でも社内ツールチェーンの棚卸しを緊急で実施したほどです。

この記事では、GlassWormの手口を技術的に正確に解説しながら、今日から実践できる検出・対策手順をまとめます。


GlassWormとは何か——なぜ「見えない」のか

GlassWormは2025年10月に初めて発見されたサプライチェーン攻撃型マルウェアです。GitHub・npm・VS Code Marketplace(およびOpenVSX)を主な攻撃経路としており、2026年3月の第4波では433コンポーネント・151以上のGitHubリポジトリが侵害されたと報告されています。

感染拡大の時系列

2025/10
第1波
OpenVSX・VS Code拡張に潜伏。約35,000ダウンロードに影響
2025/11
第2波
約10,000ユーザーに被害が拡大
2026/01
第3波
約22,000DL。タイポスクワッティング手法を追加
2026/03
第4波
GitHub・npm・VS Code含む433コンポーネントが侵害

なぜコードレビューで発見できないのか

GlassWormの最も厄介な特徴は、不可視Unicode文字(U+FE00〜U+FE0F等の異体字セレクタ)にマルウェアコードを埋め込む点です。エディタ上では何も表示されない文字の中にペイロードが隠されているため、目視のコードレビューでは絶対に発見できません。

さらに恐ろしいのが、C2(コマンド&コントロール)サーバーの仕組みです。

  • SolanaブロックチェーンのメモフィールドをC2として利用(5秒ごとにポーリング)
  • Googleカレンダーをバックアップのフォールバックとして利用

ブロックチェーンへの書き込みはテイクダウンが事実上不可能で、GoogleカレンダーはほとんどのCorporateファイアウォールで許可されているため、企業ネットワーク内でも通信が遮断されません。従来型のセキュリティ製品が前提としてきた「怪しいドメインへの通信を遮断する」という発想が完全に無効化されています。

感染するとどうなるか

GlassWormが実行できる悪意ある操作は多岐にわたります。

  • 暗号通貨ウォレットデータ・SSH鍵・認証トークン・Cookie/セッション情報の窃取
  • キーストローク記録・スクリーンショット取得(実質的なRAT+キーロガー)
  • 偽ブラウザ拡張のインジェクションによる常時監視
  • 盗んだGitHubトークンを使ったforce-pushで他リポジトリへの感染を拡大
  • 感染マシンをプロキシノード化して別の攻撃に悪用

自己増殖型ワームとして設計されており、extensionPackextensionDependenciesのフィールドを悪用してVS Code拡張内で自動拡散します。また、**RDD(Remote Dynamic Dependencies)**という手法により、パッケージ公開時点では無害で、後からペイロードを動的に取得するため、公開時のスキャンでも素通りします。


サーバー・インフラでお困りですか?

障害対応・移行・パフォーマンスチューニングなど、ご相談ください

無料で相談する

よくある失敗パターン——「自分は大丈夫」という過信が最大のリスク

弊社が把握している限り、感染ケースの多くには共通したパターンがあります。

失敗パターン①:「有名な拡張機能だから安全」という思い込み

GlassWormは正規の拡張機能に依存関係として紛れ込みます。あなたがインストールした拡張機能自体は本物でも、そのextensionDependenciesとして自動インストールされたものが汚染されている場合があります。

失敗パターン②:npm installの内容を確認しない

package.jsonに明示したパッケージ自体は安全でも、その依存関係ツリーの深い部分に汚染パッケージが混入するケースがあります。タイポスクワッティング(expressexpresにする等)も第3波以降は組み合わされています。

失敗パターン③:「コードレビューしているから大丈夫」

前述のとおり、不可視Unicode文字はレビュー画面には表示されません。GitHubのdiff画面でも見えません。目視での発見は不可能と割り切って、ツールに頼る姿勢が必要です。

失敗パターン④:感染後のクリーンアップを甘く見る

あるフリーランスエンジニアの方から相談を受けたケースでは、~/init.jsonの削除とNode.jsの再インストールだけで「対処完了」としていましたが、GitHubトークンはすでに使用され、別リポジトリへのforce-pushが行われていました。認証情報は全ローテーション必須です。


今すぐできる検出・対策手順

STEP 1: glassworm-hunterでスキャンする

最も手軽な方法は、afine社が公開しているオープンソースのスキャナー glassworm-hunter を使うことです。

# リポジトリをクローン
git clone https://github.com/afine-com/glassworm-hunter.git
cd glassworm-hunter

# 実行(VS Code拡張のディレクトリを指定)
python3 glassworm_hunter.py --target ~/.vscode/extensions

# npmのnode_modulesをスキャンする場合
python3 glassworm_hunter.py --target ./node_modules

STEP 2: 不可視Unicode文字を検出する(ufoscan)

# ufoscanをインストール
go install github.com/trapdoorlabs/ufoscan@latest

# 現在のプロジェクトをスキャン
ufoscan ./

# VS Code拡張ディレクトリをスキャン(macOS)
ufoscan ~/.vscode/extensions

ufoscanはU+FE00〜U+FE0F等の異体字セレクタやゼロ幅スペースなど、コード中に混入した不可視文字を検出してファイル名と行番号で報告してくれます。

STEP 3: 手動でマーカーを確認する

GlassWormには既知のマーカーがいくつか存在します。以下のコマンドで確認してください。

# マーカー変数の確認(感染ファイルに含まれる文字列)
grep -r "lzcdrtfxyqiplpd" ~/.vscode/extensions/
grep -r "lzcdrtfxyqiplpd" ./node_modules/

# init.jsonの存在確認(感染の痕跡ファイル)
ls -la ~/init.json

# ホームディレクトリへの不審なNode.jsインストール確認
ls -la ~/.nvm/versions/
ls -la ~/node/   # 予期せぬディレクトリがあれば要注意

# i.jsファイルの確認
find ~ -name "i.js" -not -path "*/node_modules/*" 2>/dev/null

# Git履歴の異常確認(force-pushの痕跡)
git log --oneline --all | head -20
git reflog

STEP 4: 感染が疑われた場合の対応フロー

flowchart TD
    A[スキャンで異常を検出] --> B[VS Code・エディタを即座に終了]
    B --> C[ネットワークを切断]
    C --> D[GitHub・npm・クラウドの認証情報を全ローテーション]
    D --> E[SSH鍵を無効化・再生成]
    E --> F[ブラウザのCookie・セッションを全削除]
    F --> G[感染ファイルを隔離・削除]
    G --> H[OS・VS Code・拡張機能をクリーンインストール]
    H --> I[GitHubのforce-push履歴を確認し影響範囲を特定]
    I --> J[チームメンバーへ共有・同様のスキャンを依頼]

日常的な予防策

対策効果難易度
VS Code拡張のインストール元を公式Marketplaceのみに限定
拡張機能のインストール前にGitHubリポジトリのコミット履歴確認
npm installに--ignore-scriptsオプションを付与
CIにglassworm-hunterを組み込む
package-lock.jsonをコミットし差分を必ず確認
GitHub Fine-grained Personal Access Tokenで権限を最小化

なお、--ignore-scriptsは即効性の高い対策です。npmのインストールスクリプト経由で実行される初期ペイロードを遮断できます。

# .npmrcに設定すれば全プロジェクトに適用される
echo "ignore-scripts=true" >> ~/.npmrc

ただし、bcryptやnode-sassなどネイティブビルドが必要なパッケージは動作しなくなる場合があります。プロジェクトごとに影響を確認した上で適用してください。


まとめ——開発環境のサプライチェーンは「見えないリスク」

GlassWormが示しているのは、開発者の日常的な行動(拡張機能のインストール、npm install)そのものが攻撃経路になる時代が来たという現実です。不可視文字・ブロックチェーンC2・Googleカレンダーフォールバックという組み合わせは、従来型のセキュリティ対策を意識的に回避するよう設計されています。

まず今日、glassworm-hunterとufoscanを手元の環境で走らせることをお勧めします。弊社でも全開発環境のスキャンを実施しており、クライアント向けの納品物に汚染ライブラリが混入しないよう、CIパイプラインへの組み込みを標準化しています。

「自分のプロジェクトは大丈夫か確認してほしい」「CIへのセキュリティスキャン組み込みを相談したい」という方は、お気軽にFivenine Designまでご相談ください。


サーバー・インフラでお困りですか?

障害対応・移行・パフォーマンスチューニングなど、ご相談ください

無料で相談する

サーバー管理、丸ごとお任せください

サーバー保守・運用

監視・障害対応・パフォーマンス改善まで、安定稼働をサポートします

200件以上の制作実績 顧客満足度97% 初回相談無料

※ 通常1営業日以内にご返信します

今すぐ確認すべきチェックリスト

",

"icon": "fa-solid fa-shield-halved", "color": "red

この記事をシェア

サーバー・インフラの課題を解決します

構築・移行・監視・障害対応まで、安定した運用環境をご提供します。 初回相談は無料です。

※ 1営業日以内にご返信いたします

この技術でお困りなら

無料でプロに相談できます

相談する
AIに無料相談