🔧 阿川の電商水電行
Shopify 顧問、維護與客製化
💡
小任務 / 單次支援方案
單次處理 Shopify 修正/微調
⭐️
維護方案
每月 Shopify 技術支援 + 小修改 + 諮詢
🚀
專案建置
Shopify 功能導入、培訓 + 分階段交付

=======================================================================================================================================================================================================================================================================================================================================

2026 年 3 月,開發者社群震動。報導指出超過 400 個我們日常信任的倉庫(如 GitHub、npm、VS Code 擴充功能等)遭到名為 GlassWorm 的惡意程式碼汙染。

「公開套件就安全」的假設已不再適用。本文整理 GlassWorm 的技術機制,並說明工程師從今天起應採取的正確防禦措施。

  1. GlassWorm 的威脅:為何「不可視」?

GlassWorm 攻擊最嚴重的威脅在於它濫用 Unicode 的「控制字元」與「零寬空格(U+200B)」來達成不可視性。

這些字元在一般編輯器中通常完全看不見,但在特定執行環境或解碼器下,會被當成不正當的 payload(攻擊程式碼)來執行。換言之,它能夠繞過人工的嚴格程式碼審查與簡單的文字搜尋工具,是極度惡質的手法。

  1. 被害事例與可能風險

攻擊者會將看似無害的重構(refactor)或 Pull Request(PR),搭配拼字劫持(例如:將 requests 偽裝成 requesst)等手法,巧妙地混入汙染程式碼。

一旦這類「看不見的後門」被執行,可能造成如下影響:

  • 憑證竊取:將環境變數(如 AWS 存取金鑰、GitHub Token 等)傳送到攻擊者的伺服器。
  • 植入後門:將開發者本機或 CI 環境當作不法存取的跳板。
  • 資料外洩:擷取資料庫連線資訊等造成資訊洩漏。

視覺陷阱

# 正常程式碼
def process_data(data):
    return data * 2

# GlassWorm 污染的程式碼
def process_data(data):
    return data * 2​ # 此處隱藏了 [U+200B]

(上例第二段的數字 2 後面實際藏有一個零寬空格 U+200B,肉眼無法察覺。)

  1. 對策流程:依賴與自家程式碼的「雙重防護」

要防範供應鏈攻擊,需同時檢查「外部引入的套件」與「內部可能潛藏的風險」,採取多層防禦。

① 外部套件的汙染檢查(npm audit)

首先確認所使用的函式庫是否已有已知漏洞或汙染通報。

npm audit
# 或 yarn audit

② 阻擋自家程式碼的機密資訊外洩(Betterleaks)

若遭 GlassWorm 類惡意程式入侵,最終目標往往是「API Key 與 Token」。使用 Betterleaks 檢查程式碼庫與 Git 歷史,確認是否有機密資訊被硬編碼。

  • 角色:以正規表達式為基礎的秘密掃描器(偵測 API Key、密碼等)
  • 目標:本機 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 .
  1. 防禦多層化:工程師應有的 3 個習慣

除在本機檢查外,應在整個開發流程中建立防護機制。

  • 依賴鎖定與嚴格固定:利用 package-lock.jsonpoetry.lock,並強制進行雜湊驗證。
  • 編輯器顯示設定:在 VS Code 中啟用「Render Control Characters(顯示控制字元)」以便看見不可視字元。
  • CI/CD 自動化:在 PR 建立時,自動執行 npm auditbetterleaks 等掃描流程。

最終的防線是工程師本身的「零信任(不預設相信任何事)」意識,搭配工具所提供的適當防護。

  1. 參考資訊


原文出處:https://qiita.com/sarubot/items/df077776b293163e0a42


精選技術文章翻譯,幫助開發者持續吸收新知。

共有 0 則留言


精選技術文章翻譯,幫助開發者持續吸收新知。
🏆 本月排行榜
🥇
站長阿川
📝15   💬9   ❤️1
424
🥈
我愛JS
📝2   💬9   ❤️1
72
🥉
💬1  
4
評分標準:發文×10 + 留言×3 + 獲讚×5 + 點讚×1 + 瀏覽數÷10
本數據每小時更新一次
🔧 阿川の電商水電行
Shopify 顧問、維護與客製化
💡
小任務 / 單次支援方案
單次處理 Shopify 修正/微調
⭐️
維護方案
每月 Shopify 技術支援 + 小修改 + 諮詢
🚀
專案建置
Shopify 功能導入、培訓 + 分階段交付