不可視文字でマルウエア混入 GitHubなどで汚染拡大、開発基盤の信頼揺らぐ

日経XTECH / 4/3/2026

📰 NewsDeveloper Stack & InfrastructureSignals & Early TrendsIdeas & Deep Analysis

Key Points

  • 不可視のUnicode制御文字を悪用して悪意あるコードを“見えない形”で埋め込む新手マルウエア攻撃「GlassWorm」が、GitHub等の開発基盤を中心に急拡大している。

 不可視の属性を持つUnicode(ユニコード)文字をコードに埋め込んで、悪意あるプログラムを実行させる新手のサイバー攻撃手法「GlassWorm(グラスワーム)」が急拡大している。攻撃者は、GitHubで多数の開発者が参画するOSS(オープンソースソフトウエア)の開発プロジェクトやソフトウエアの流通マーケットなどで、善意を装ってコードを提供する。数百の開発プロジェクトやソフトウエアに悪意あるコードが埋め込まれていたとの報告が出ており、GitHubといった開発者なら誰もが使う開発基盤の信頼性が揺らぐ事態となっている。

 OSSやフリーソフトウエアの機能は、多数の業務ソフトやクラウドサービス、機器の組み込みソフトにも使われている。実際に今回の攻撃によってセキュリティー企業が手掛けるソフトウエアが侵害を受け、ユーザー企業にまで被害が広がった例が報告されている。

 GlassWormの攻撃は2026年3月に入って急増している。ベルギーのAikido Security(アイキドー・セキュリティー)などが調査したところ、GitHubでは開発プロジェクトのコードを管理するリポジトリーのうち151件以上で不可視文字列を使った悪意あるコードを埋め込んだ攻撃を確認した。ほかにも、JavaScriptのライブラリーやツールをまとめたパッケージ管理システム「npm」で複数件の攻撃を確認したという。同社らが確認した、攻撃に汚染されたリポジトリーやソフトウエアは433件以上に達した。

 多くの専門家は、攻撃者がLLM(大規模言語モデル)を使い、貢献がありそうなもっともらしいコードを大量に生成している可能性を指摘している。

1万8000行のコードが文字幅ゼロで目視できず

 GlassWormは、開発者らが使うエディターソフトや差分表示などの開発用ツールで表示されないUnicode制御文字を使い、悪意あるコードを存在しないように見せる点に特徴がある。具体的には、Unicodeにある「異体字セレクター(U+FE00~U+FE0F)」や「異体字セレクター補助(U+E0100~U+E01EF)」などを使うという。これらの範囲の文字コードは表示字体を詳細に制御したり、標準化されていない文字を表現したりするために定義されたものだ。本来の使い方ではないが、表示する文字幅がゼロの長い文字列もつくれてしまう。

悪用されるUnicode制御文字の例
悪用されるUnicode制御文字の例
(出所:日経クロステック作成)
[画像のクリックで拡大表示]

 実際に専門家が攻撃手法を分析したところ、1行のコードの中に、1万8000行あまりの不可視属性のコードが埋め込まれていた例があった。エディターソフトやGitHubのコードレビュー画面など、Unicodeの制御文字を正しく表示する開発環境ではいずれも文字幅ゼロの文字列になり、見えない状態になる。結果として、コードを確認するレビュアーら開発参加者のチェックをすり抜けてしまっていた。

 GlassWormの存在を最初期に確認したのはイスラエルのKoi Security(コイ・セキュリティー)とされる。同社は2025年10月、米Microsoft(マイクロソフト)が無償公開する開発者向けエディター「Visual Studio Code(VS Code)」の拡張機能を入手できるマーケットプレイス「Open VSX」で、不審な挙動を示す拡張機能を発見したと報告した。この拡張機能は3万5000件を超えるダウンロードがあったという。その後もOpen VSXでは数件の悪意があると見られる拡張機能が確認されるなど攻撃は継続していた。

 26年3月に入り、前述のアイキドー・セキュリティーなどによる調査で攻撃の急増が明らかになる。Open VSXの拡張機能では72件以上の汚染も確認。GitHubなどでコードを管理している利用者が比較的多いOSSやソフトでは、WebサイトのUI(ユーザーインターフェース)の構築に使われるJavaScriptライブラリー「React」関連のライブラリーが攻撃によって侵害されていた。Webブラウザー上で高速動作するバイナリーコードWebAssemblyのランタイム「Wasmer」や、開発ツール「OpenCode」関連プロジェクトでもコードの汚染が明らかになった。

次のページ

LLMで「役立つコード」を大量に偽装

この記事は有料会員限定です