GlassWorm:把惡意程式藏在「空白」裡,GitHub 151 個專案中招
有一種駭客手法把惡意程式藏在你看不見的字元裡。程式碼審查通過、CI 綠燈,但電腦跑起來的時候,隱形的字元解開執行,帳密就被偷走了。2026 年 3 月,超過 151 個 GitHub 專案中招。
目錄+
有人把惡意程式藏在「看起來空白的地方」。
不是加密、不是混淆——程式碼打開來就是一片正常,什麼都看不到。但電腦跑的時候,那些隱形的字元會自動解開執行,然後把你的帳號密碼、API 金鑰、開發憑證全部傳出去。
這個手法叫 GlassWorm。根據 Aikido Security 的報告,從 2026 年 3 月 3 日到 9 日,短短一週,超過 151 個 GitHub 上的公開專案都被這樣植入了。
看不見的字,做得到的事
GlassWorm 利用 Unicode Variation Selectors(U+FE00–U+FE0F 及 U+E0100–U+E01EF)將惡意程式碼嵌入原始碼檔案。這些字元的設計初衷是用來控制字形顯示,在絕大多數文字編輯器、程式碼審查介面、GitHub PR 差異頁面上,它們完全不會被渲染成任何可見符號。
攻擊執行流程如下:攻擊者將惡意指令以不可視字元形式嵌入 JavaScript 原始碼,程式執行時由 eval() 呼叫解碼函式,將隱藏字元轉換為可執行的惡意程式碼,接著在開發者環境中竊取 crypto token、認證憑證以及各類 secrets。
攻擊流程中有四個關鍵行為者,彼此的關係不是線性的:
根據 Aikido Security 報告,2026 年 3 月感染範圍快速擴及 npm 套件管理庫與 VS Code 市集。根據 StepSecurity 報告,同年 3 月 16 日另外發現兩個月均下載量 135,000 次的套件也已被感染。
Solana 讓你無法下架它
傳統 C2 伺服器可以由執法機關或雲端業者下架,GlassWorm 的設計者選擇使用 Solana 區塊鏈作為指揮控制頻道。區塊鏈上的指令不存在於任何單一伺服器,無法被下架、無法被封鎖 IP,執法行動的傳統工具在這裡全數失效。這是 GlassWorm 最危險的設計決策,不是技術上最難的部分,而是對抗能力最強的部分。
根據 Koi Security 記錄,GlassWorm 的早期變體於 2025 年 10 月首次出現在 Open VSX Registry,距離大規模爆發提前了五個月。根據 OpenSourceMalware 報告,截至 2026 年 3 月,橫跨 GitHub、npm、VS Code 市集、Open VSX 已確認超過 433 個受汙染元件。
此外,GlassWorm 已出現新亞種 ForceMemo:透過 force-push 覆蓋儲存庫的正規提交歷史,讓感染痕跡在 git log 中難以追溯。
現有防禦工具為什麼看不到它
問題的核心在於當前工具鏈的假設:SCA(軟體組成分析)工具依賴 CVE 資料庫,GlassWorm 目前未獲得 CVE 編號,因此不在掃描範圍之內。簽名式偵測同樣無效,因為不可視字元在靜態分析時通常被忽略,攻擊向量繞過了工具的視野,而非技術能力。
開發者今天可以採取的對策:
- 在 CI/CD 管線加入 Unicode 不可視字元掃描步驟(工具如
unicode-inspector、自製正則匹配\uFE0[0-F]範圍) - 對所有第三方依賴啟用 git commit hash 鎖定,不依賴語義版本範圍
- VS Code 安裝套件前確認發行者身份,優先選擇已在 Open VSX 和官方市集雙重驗證的套件
- 針對
eval()及動態程式碼執行建立靜態分析規則,凡涉及字元解碼的呼叫均列為審查對象 - 定期對工作目錄中的 JS 檔案執行 hex dump 抽查,確認是否含有 FE0x 或 E01xx 位元組序列
一句話定義這次的威脅等級
GlassWorm 的危險不在攻擊難度,而在它把信任本身當作武器:你信任的程式碼審查流程、你信任的套件維護者、你信任的 git 歷史,都成為感染向量。
目前尚無跡象顯示 GlassWorm 攻擊已停止,反而隨著 ForceMemo 亞種出現,攻擊者正在主動強化持續性與痕跡清除能力。你的下一次 npm install 是否安全,取決於你現在願不願意在 CI 流程裡多加一行掃描。