Glassworm再来:不可視Unicodeを使ったサプライチェーン攻撃がGitHub・npm・VS Codeの151超リポジトリに拡大

この記事は約8分で読めます。

Glassworm再来:不可視Unicodeを使ったサプライチェーン攻撃がGitHub・npm・VS Codeの151超リポジトリに拡大

セキュリティ企業Aikido Securityが2026年3月13日に公開した調査レポートについて解説します。不可視Unicode文字を使ってソースコード内に悪意あるペイロードを隠蔽するマルウェア「Glassworm」が、2026年3月に入り新たな大規模キャンペーンを展開しています。GitHub上で少なくとも151リポジトリへの侵害が確認され、npmパッケージやVS Code拡張機能にも攻撃が拡大しています。

Wasmerの関連リポジトリ(wasmer-examples/hono-wasmer-starter)やanomalyco(OpenCode/SST)のopencode-benchといった知名度のあるプロジェクトも影響を受けており、目視によるコードレビューでは検知が困難な攻撃手法が現実の脅威として拡大しています。

Glasswormとは何か — 不可視Unicodeによるコード隠蔽

Glasswormは、2025年10月にKoi SecurityによってVS Code拡張機能を使う自己増殖ワームとして初めて文書化されたサプライチェーン攻撃マルウェアです。Aikido Securityはそれに先立つ2025年3月に、PUA(Private Use Area)Unicode文字を使ってペイロードを隠した悪性npmパッケージをGlassworm系譜として追跡していました。

最大の特徴は、Unicode variation selector(異体字セレクタ)などの不可視文字を使って悪意あるコードをソースファイル内に隠蔽する手法にあります。この手法は従来の難読化とは異なり、コード自体が画面上に描画されません。エディタやターミナル、レビュー画面で表示されないため、目視レビューや標準的なlintだけでは検出を頼ることができません。Koi SecurityのCTO Idan Dardikman氏は初期の分析で、マルウェアが難読化でもminifyでもなく、人間の目に対して不可視であると指摘しています。

この手法は、2021年に公開されたTrojan Source脆弱性(CVE-2021-42574)の系譜に連なる発展形です。Trojan Sourceは双方向制御文字を使ってソースコードの論理順序と表示順序を乖離させる攻撃でしたが、Glasswormは不可視文字内にペイロード全体を埋め込み、eval()で展開するデコーダ構造を採用しています。

攻撃のタイムラインと拡大の経緯

Aikido Securityは、約1年にわたるGlassworm追跡の経緯を整理しています。2025年3月にPUA Unicode文字を使ってペイロードを隠したnpmパッケージを初めて発見し、同年10月17日にOpen VSXマーケットプレイス上の侵害された拡張機能を特定しました。10月31日には攻撃者がGitHubリポジトリに標的を移したことを確認し、2026年3月にGitHub・npm・VS Codeにまたがる新たな大規模攻撃波が発生しています。

初期のVS Code拡張機能攻撃では、約35,800回のダウンロードが記録されています。Glasswormは感染した拡張機能からnpm・GitHub・OpenVSXの認証情報を窃取し、他の拡張機能やパッケージを連鎖的に汚染する自己増殖機能を有しています。C2(コマンド&コントロール)インフラにはSolanaブロックチェーンを利用しており、ペイロード配信サーバーが遮断された場合でも、ごくわずかなトランザクションコストで新たなC2アドレスを指定できる耐障害性を備えています。

2025年11月にはOpenVSXで第2波が確認され、12月の第3波ではRustベースのインプラントへの進化も観測されています。Koi Securityの調査によれば、攻撃者のサーバーから得られたキーロガーデータに基づき、攻撃者はロシア語話者であり、オープンソースのブラウザ拡張C2フレームワーク「RedExt」を使用していることが判明しています。

2026年3月の新規攻撃波 — 151超リポジトリへの侵害

今回の新規波では、GitHub上で少なくとも151リポジトリにGlasswormのデコーダパターンが存在することがコード検索で確認されています。ただし、発見時点で既に削除されたリポジトリもあるため、実際の侵害数はこれを上回るとAikidoは指摘しています。GitHubへの侵害は2026年3月3日から9日の間に行われたとみられます。

影響を受けたリポジトリには、Wasmerの関連リポジトリ(wasmer-examples/hono-wasmer-starter)、状態管理ライブラリのReworm、anomalyco(OpenCodeやSSTを運営する組織)のopencode-benchなど、スター数のあるプロジェクトが含まれています。

攻撃者のコミットは、明らかに怪しい変更として到着するわけではありません。ドキュメント修正、バージョンバンプ、小規模リファクタリング、バグ修正といった各プロジェクトのスタイルに合致した自然な変更に偽装されています。Aikidoは、151を超えるリポジトリに対してプロジェクト固有の変更を手作業で作成することは現実的でなく、攻撃者がLLM(大規模言語モデル)を使って説得力のあるカバーコミットを生成しているとみています。

攻撃はGitHubにとどまらず、npmパッケージとVS Codeマーケットプレイスにも同時展開されています。複数のエコシステムを横断する協調的な攻撃は、Glasswormのこれまでの行動パターンと一致しています。

実務上の影響と対策

Glasswormが提起する課題は、目視によるコードレビューを前提とした従来の安全確認プロセスが通用しない点にあります。不可視Unicode文字によるペイロードは、目視レビューや標準的なlintをすり抜け得るため、能動的な検出手段が必要です。

開発現場における具体的な対策として、不可視Unicode文字の検出が可能なスキャンツールの導入が挙げられます。Snykが紹介しているオープンソースツール「anti-trojan-source」は、カテゴリベースのUnicode分析(Variation Selectors、Extended Variation Selectors、Cf、Ccカテゴリなど)に対応しており、将来のUnicode仕様追加にも自動対応できる設計です。

加えて、Glasswormの攻撃はLLMで生成された自然なコミットに偽装されるため、CI/CDパイプラインにdiff内の不可視文字を機械的に検出するステップを組み込むことが有効です。GitHubのコード検索でGlasswormのデコーダパターンを確認することも、既存プロジェクトの汚染チェックとして即座に実施できます。

さらに、依存先パッケージの更新に7〜14日の待機期間(依存クールダウン)を設けることで、セキュリティベンダーの自動スキャンが新パッケージを検査する時間的余裕を確保でき、サプライチェーン攻撃の多くを回避できるとされています。

Glasswormの攻撃は2025年3月のnpmパッケージから始まり、VS Code拡張機能、GitHubリポジトリへと標的を広げてきました。1年間で4回以上の攻撃波を繰り返し、検出を回避するたびに手法を進化させています。マーケットプレイスからの除去だけでは対処が追いつかず、開発環境全体でのUnicode文字検出の自動化が現場での最も現実的な防御策になります。

参考情報

コメント

タイトルとURLをコピーしました