=======================================================================================================================================================================================================================================================================================================================================
2026 年 3 月,開發者社群震動。報導指出超過 400 個我們日常信任的倉庫(如 GitHub、npm、VS Code 擴充功能等)遭到名為 GlassWorm 的惡意程式碼汙染。
「公開套件就安全」的假設已不再適用。本文整理 GlassWorm 的技術機制,並說明工程師從今天起應採取的正確防禦措施。
GlassWorm 攻擊最嚴重的威脅在於它濫用 Unicode 的「控制字元」與「零寬空格(U+200B)」來達成不可視性。
這些字元在一般編輯器中通常完全看不見,但在特定執行環境或解碼器下,會被當成不正當的 payload(攻擊程式碼)來執行。換言之,它能夠繞過人工的嚴格程式碼審查與簡單的文字搜尋工具,是極度惡質的手法。
攻擊者會將看似無害的重構(refactor)或 Pull Request(PR),搭配拼字劫持(例如:將 requests 偽裝成 requesst)等手法,巧妙地混入汙染程式碼。
一旦這類「看不見的後門」被執行,可能造成如下影響:
# 正常程式碼
def process_data(data):
return data * 2
# GlassWorm 污染的程式碼
def process_data(data):
return data * 2 # 此處隱藏了 [U+200B]
(上例第二段的數字 2 後面實際藏有一個零寬空格 U+200B,肉眼無法察覺。)
要防範供應鏈攻擊,需同時檢查「外部引入的套件」與「內部可能潛藏的風險」,採取多層防禦。
首先確認所使用的函式庫是否已有已知漏洞或汙染通報。
npm audit
# 或 yarn audit
若遭 GlassWorm 類惡意程式入侵,最終目標往往是「API Key 與 Token」。使用 Betterleaks 檢查程式碼庫與 Git 歷史,確認是否有機密資訊被硬編碼。
▼ 安裝(macOS)
brew install betterleaks/tap/betterleaks
※ 亦可透過 Docker 或 go install 安裝。
▼ 執行掃描
# 包含當前目錄的 Git 歷史一併掃描機密資訊
betterleaks git .
【注意:工具的用途說明】
Betterleaks 是用來防止機密資訊外洩(二次被害)的工具。它並非專門針對 Unicode 不可視字元的 AST 分析工具,請勿混淆工具用途。
要找出程式碼中不小心混入的「看不見字元」,可使用針對 Unicode 控制字元偵測的靜態分析工具。
# 專門偵測不可視字元(如 U+200B)的掃描器範例
go install github.com/trapdoorlabs/ufoscan@latest
ufo scan .
除在本機檢查外,應在整個開發流程中建立防護機制。
package-lock.json 或 poetry.lock,並強制進行雜湊驗證。npm audit、betterleaks 等掃描流程。最終的防線是工程師本身的「零信任(不預設相信任何事)」意識,搭配工具所提供的適當防護。