Koi Security · 2025-10 「開発者がコードレビューで見ると、 空行や空白に見える。 だが JavaScript インタプリタにとっては、 それは実行可能なコードだ」
2026 年、 ソフトウェア開発の足元で、 目に見えないマルウェアが広がった。 Koi Security が 「VS Code 拡張を狙う初の自己増殖ワーム」 と位置づける GlassWorm は、 Open VSX VS Code 拡張機能のオープンなマーケットプレイス。 Microsoft の VS Code マーケットと並んで拡張の配布に使われる。 GlassWorm はここと VS Code マーケットの両方に潜り込んだ と VS Code のマーケットプレイスに潜り込み、 少なくとも 35,800 件のインストールを汚染した。 恐ろしいのは、 その悪意あるコードが 開発者の目にもレビューにも映らないことだ。
なぜ見えないのか —— 透明インクの指示書
GlassWorm の核心は隠蔽にある。 攻撃者は Unicode variation selector (異体字セレクタ) 文字の見た目を切り替えるために定義された、 それ自体は視覚的な出力を持たない Unicode 制御文字 (U+FE00〜FE0F 等)。 画面上は何も表示されないため、 ここにコードを潜ませるとエディタから消える と PUA (Private Use Area) Unicode の私用領域。 用途が標準で定められていない文字コード帯。 GlassWorm は variation selector と併せて、 悪意あるコードを 「見えない文字」 として隠すのに使った を使って、 コードを 「見えない文字」 に変える。 Koi Security の説明では、 開発者がコードレビューで見ると空行や空白にしか見えないが、 JavaScript インタプリタにとっては実行可能なコードになる。 透明インクで書かれた指示書のようなもので、 人の目には白紙、 機械だけがそれを読んで実行する。 標準的なコード目視では、 検出はほぼ不可能だ。
何を奪い、 どう広がるか
見えないだけではない。 GlassWorm は感染したマシンから 認証情報の窃取 npm・GitHub・Git の認証情報 (トークン・鍵) を盗む。 これが自己増殖の燃料になる —— 盗んだ認証で別のパッケージや拡張を改ざんし、 さらに広げる を行う —— npm・GitHub・Git の認証情報を盗む。 さらに 49 種類の暗号資産ウォレット拡張を標的に資金を流出させ、 感染マシンに SOCKS proxy / 隠し VNC SOCKS proxy は通信を中継させる仕組みで、 感染した開発者マシンを攻撃者の 「犯罪インフラ」 の踏み台に変える。 隠し VNC はデスクトップを遠隔操作する仕組みで、 攻撃者にマシンの完全な遠隔アクセスを与える を仕込んで踏み台化・遠隔操作する。 そして 「ワーム」 たるゆえんはここだ —— 盗んだ認証情報を使って別のパッケージや拡張を汚染し、 自ら広がっていく。 盗んだ鍵で次のドアを開け、 その先の鍵をまた盗む、 という連鎖だ。
落ちない司令塔 —— ブロックチェーン C2
指令系統も巧妙だ。 GlassWorm は C2 (command and control) マルウェアが攻撃者から指令を受け、 次段のプログラムを取りに行く司令塔の仕組み。 通常はサーバーで、 発見されれば遮断・押収できる。 GlassWorm はこれをブロックチェーン上に置いた をサーバーではなく Solana ブロックチェーン GlassWorm は Solana ブロックチェーンの取引の memo 欄に、 次段ペイロードの在り処を書き込む。 ブロックチェーンは改ざん・削除・押収ができないため、 司令塔を落とせず、 攻撃者の匿名性も保たれる に置いた。 ブロックチェーン上の特定の取引を探し、 その memo 欄に書かれた 「次に取りに行くプログラムの場所」 を読む。 ブロックチェーンは消せない・押収できないため、 従来のように司令塔サーバーを遮断してもワームは止まらない。 消せない公開掲示板に指令を貼るようなもので、 掲示板ごと押収できないから、 司令塔が落ちない。
着眼点
見えない攻撃面 —— AI エージェント時代のサプライチェーン
GlassWorm が突いたのは 「人にもツールにも見えない」 攻撃面だ。 そしてこれは AI エージェントにも直結する。 コードや外部ツールの出力を読んで動くエージェントは、 不可視文字に潜む指示を そのまま飲み込みかねない。 MEMEX 編集部の視点で言えば、 これは自媒体にも刺さる論点だ —— MEMEX の内部コーパス MCP サーバーは、 まさにこの 「出力に混ざる不可視文字を除去 (sanitize) する」 対策を実装済みで、 エージェントに渡すテキストから制御文字を落としている。 GlassWorm は、 その対策が 「なぜ要るのか」 を実例で示している。
目視は無力 —— 検証は 「機械の目」 で
教訓は明快だ。 不可視文字が相手では、 人間のコードレビューは無力になる。 防御は機械側に移す —— Unicode の正規化、 variation selector や PUA など不可視・制御文字の検出、 依存関係の固定 (pin) と署名検証、 導入する拡張の出所確認と最小化。 「読んで確かめる」 から 「機械で走査して確かめる」 への移行が、 サプライチェーン防御の要になる。
ブロックチェーン C2 が変えたこと
GlassWorm がもう 1 つ示したのは、 C2 をブロックチェーンに置く手口だ。 従来の防御は 「司令塔サーバーを見つけて遮断する」 だったが、 消せない台帳が相手ではそれが効かない。 だから防御は水際に寄る —— 認証情報を盗ませない (最小権限・トークンの分離・秘密の保護)、 感染しても広がらせない (拡張の最小化・権限分離・監査ログ)。 攻撃者側のインフラを落とせない前提で、 自陣を守る設計へ移る、 ということだ。
経緯と規模 (Koi Security の調査)
- 2025-10: Koi Security が GlassWorm を発見・命名。 VS Code 拡張を狙う初の自己増殖ワームと位置づけ
- 手口: Unicode variation selector + PUA でコードを不可視化 (エディタでは空白に見え、 インタプリタには実行コード)
- 能力: npm / GitHub / Git 認証情報の窃取、 暗号資産ウォレット拡張 49 種を標的、 SOCKS proxy・隠し VNC、 盗んだ認証で自己増殖
- C2: Solana ブロックチェーンの取引 memo に次段ペイロードの場所 (テイクダウン耐性・匿名)
- 規模: 少なくとも 35,800 件のインストールを汚染、 悪性 Open VSX 拡張 72 件、 GitHub リポジトリ 151 件 (2026-03 に拡大)
関連リソース
- Koi Security 「GlassWorm: First Self-Propagating Worm Using Invisible Code」 (発見元・一次情報)
- 関連: Justin Schroeder 「ドメイン特化エージェント」 (エージェントが外部の道具・コードを読む時代の設計)
- 関連: Bret Taylor 「垂直エージェント」 (完璧を待たず、 ガードレールと監査で信頼を設計する)
用語集
- サプライチェーン攻撃
- ソフトウェアの部品 (パッケージ・拡張・依存関係) に悪意を仕込み、 それを取り込む多数の開発者・製品へ間接的に広げる攻撃。 GlassWorm は VS Code 拡張と npm パッケージという 「開発の足元」 を狙った。
- Unicode variation selector (異体字セレクタ)
- 文字の見た目を切り替えるための、 それ自体は視覚的出力を持たない Unicode 制御文字 (U+FE00〜FE0F 等)。 画面に何も表示されないため、 ここにコードを潜ませるとエディタから消える。 GlassWorm の不可視化の核。
- PUA (Private Use Area)
- Unicode の私用領域。 標準で用途が定められていない文字コード帯。 variation selector と併せて、 悪意あるコードを 「見えない文字」 として隠すのに使われた。
- 自己増殖ワーム
- 盗んだ認証情報などを使い、 人の操作なしに自ら他の場所へ広がるマルウェア。 GlassWorm は npm / GitHub / Git の認証を盗み、 別のパッケージや拡張を汚染して増殖する。 VS Code 拡張を狙う初の自己増殖ワームとされる。
- Open VSX
- VS Code 拡張機能のオープンなマーケットプレイス。 Microsoft の VS Code マーケットと並んで拡張配布に使われる。 GlassWorm は両方に潜り込んだ。
- SOCKS proxy / 隠し VNC
- SOCKS proxy は通信を中継させる仕組みで、 感染した開発者マシンを攻撃者の踏み台 (犯罪インフラ) に変える。 隠し VNC はデスクトップを遠隔操作する仕組みで、 攻撃者にマシンの完全な遠隔アクセスを与える。
- C2 (command and control)
- マルウェアが指令を受け、 次段のプログラムを取りに行く司令塔の仕組み。 通常はサーバーで、 発見されれば遮断・押収できる。 GlassWorm はこれを Solana ブロックチェーンに置き、 消せない・落とせない C2 を実現した。