
一個 VS Code extension 點樣打入 GitHub:開源供應鏈風險已變日常
由 Nx Console 到 npm,香港開發團隊要重新審 token 同 extension

圖:Ars Technica.原文連結
GitHub 呢次事件最值得留意嘅地方,唔係攻擊者有幾高深嘅零日漏洞,而係入口非常日常:一個 VS Code extension。GitHub 5 月 20 日確認,5 月 18 日偵測並控制一部員工裝置被第三方發佈嘅「poisoned」VS Code extension 影響,之後移除惡意版本、隔離端點,同時展開 incident response。攻擊者聲稱攞到約 3,800 個 repo;GitHub 話呢個數同目前調查方向相符,但現階段評估涉及 GitHub 內部 repo,暫時無證據顯示客戶自己嘅 enterprise、organization 或 repo 受影響。
呢個分別好重要。事件唔應該寫成「所有 GitHub 用戶 repo 已外洩」,GitHub 亦講明如果之後發現有客戶資料受影響,會按既定渠道通知。不過,GitHub 亦承認部分內部 repo 可能含有客戶相關資料,例如 support interaction 摘錄,所以風險並唔係零。對香港開發者同公司 IT team 來講,呢件事嘅實用教訓係:developer laptop、VS Code extension、GitHub CLI token、npm install、CI/CD secret,已經唔係工程師個人習慣咁簡單,而係公司資料保護同營運風險。
一條 extension 路徑,比撞 firewall 更易
GitHub 官方公告最初無點名 extension,但後續 GitHub Security Advisory 同 Nx postmortem 都指向 Nx Console v18.95.0。Nx 團隊確認,2026 年 5 月 18 日 12:30 至 13:09 UTC 期間,有人以被入侵 contributor 身份,將惡意 Nx Console 18.95.0 發佈到 Visual Studio Marketplace 同 Open VSX。Microsoft Marketplace 版本大約 11 分鐘後下架,Open VSX 約 36 分鐘後下架;時間好短,但如果開發者啟用自動更新,extension 一啟動就可以喺本機執行 payload,收集 GitHub、npm、SSH、cloud、Vault、Docker、.env 等可讀到嘅 credential。
更麻煩係,呢條鏈唔係由 GitHub 開始。Nx postmortem 指出,一名 Nx contributor 早一星期喺日常 pnpm install 時 resolve 到一個受污染 TanStack package,令 GitHub CLI OAuth token 被偷。之後攻擊者用呢個 token 喺 Nx repo 活動多日,最後發佈惡意 VS Code extension。換句話講,一個 npm package 先感染開發者機,再用 stolen token 污染 extension marketplace,然後 extension 又感染另一批開發者機。傳統「守住公司 perimeter」嘅思維,對呢類由合法帳戶、合法 marketplace、合法 workflow 行入嚟嘅攻擊,作用有限。
TanStack 自己嘅 postmortem 亦解釋咗點解「有簽名、有 provenance」都唔等於安全。5 月 11 日,攻擊者透過 pull_request_target workflow、GitHub Actions cache poisoning 同 OIDC token extraction,發佈 84 個惡意版本,涉及 42 個 @tanstack/* packages。由 npm 用家角度睇,呢啲 package 可以帶住有效 provenance 同簽名,表面似正式 release。真正問題係 workflow 本身被利用,publish-capable token 喺 runner 記憶體被抽走,所以驗證「係咪官方 pipeline 發佈」只係降低風險,唔係終點。
供應鏈攻擊由罕見事件變成流水線
Ars/WIRED 將 TeamPCP 描述成近月連環攻擊 developer ecosystem 嘅組織,但 attribution 本身要保守處理:GitHub 公告無直接點名 TeamPCP,TeamPCP 售賣 GitHub source code 嘅講法亦來自攻擊者同資安媒體報道,未等同官方確認已售出或所有聲稱都屬實。比較有實證嘅係 Socket 追蹤到 Mini Shai-Hulud campaign 自 4 月 29 日起橫跨 npm 同 PyPI,利用 install 或 import 時執行嘅 payload 偷走 developer 同 CI/CD secrets,並可透過 stolen npm token 再 publish 受污染 package。
呢類攻擊同 SolarWinds、Kaseya 嗰種大型供應商事件有相似之處:受害者信任上游軟件,惡意 code 就跟住正常更新或安裝流程入公司。不過 2026 年嘅形態更貼近開發現場,目標唔一定係終端用家,而係開發者本機、package maintainer、CI runner、GitHub Actions、VS Code extension、甚至 AI coding tool config。Socket 指 Mini Shai-Hulud payload 會留意 .vscode/tasks.json 同 .claude/settings.json 呢類位置,反映攻擊者已經知道現代開發者會畀 IDE、automation 同 agent 好高權限。
AI coding 工具令攻擊面再近身
VS Code extension 本質上唔係普通 theme 或 shortcut。好多 extension 會讀 workspace、開 terminal、呼叫 language server、存取 git credential、讀設定檔,甚至配合 agent 代你改 code、跑測試、執行 shell command。VS Code 官方 Workspace Trust 文件都提醒,.vscode 入面嘅 task definition 會跟 repo 一齊分享,惡意 task 有機會令 clone 咗 repo 嘅人誤執行。當公司開始用 AI coding agent,問題再進一步:agent 唔只睇 code,仲可能照住指令跑工具,令「信任呢個 project folder」變成一個高權限決定。
所以今次最應該改嘅唔係叫工程師唔好用 VS Code、npm 或開源,而係將 developer workstation 當成 production-adjacent asset 管。實務上可以由幾件事開始:
- extension 白名單同版本審批:公司機唔應該任裝 marketplace extension;常用 extension 要有 owner、用途、權限、更新策略,重大工具最好先喺測試環境等 24 至 72 小時。
- 鎖版本同延遲新 release:CI 用
npm ci、提交 lockfile,pnpm/yarn 亦要啟用相應 frozen lockfile;對高風險 repo,可設定 minimum release age,避免即日新 package 直接入 build。 - 收窄 token 權限:GitHub PAT、
GITHUB_TOKEN、npm token、cloud key 都要最小權限、短有效期、分 repo 或分環境;classic broad token 應該逐步退場。 - secret 唔好長期留喺 laptop:能夠用短期 OIDC、SSO、secret manager 注入就唔好寫死喺
.env、~/.npmrc、~/.git-credentials;中招時亦要假設本機可讀到嘅 credential 全部曝光。 - 審 audit log 同 package publish log:唔好只等 marketplace email;要監察 workflow deletion、異常 publish、token 使用地點、突然新增嘅 repo 或 secret access。
- AI agent 分權限跑:agent workspace、terminal、MCP tool、credential store 要分層;唔好畀一個 coding agent 同時讀 production secret、push code、publish package。
香港 team 實際要做嘅唔係棄用開源
截至 2026 年 5 月 22 日,公開來源未見 GitHub、Nx 或 Socket 列出香港機構受影響名單;所以唔應該硬拗成「香港公司已經中招」。但本地 relevance 仍然好直接:香港金融、電商、agency、SaaS 初創同內部 IT team,日常都會用 GitHub、VS Code、npm、PyPI、Docker image、cloud key 同 CI/CD pipeline。HKCERT 早前已提醒,現代 app 多數由自家 code 加第三方 dependencies 組成,第三方元件嘅惡意 code 或漏洞可以變成供應鏈攻擊入口,亦建議企業建立選用、評估、更新同掃描第三方 dependency 嘅政策。
對受規管或持有客戶資料嘅本地公司,呢件事亦唔只係工程效率問題。如果一部 developer laptop 有 production database credential、payment gateway key、客戶 support log 或內部 admin token,供應鏈攻擊就可能變成個人資料外洩或服務中斷。私隱專員公署喺 Cyberport 資料外洩調查入面,曾點出偵測措施不足、MFA 不足、保安審計不足同政策不夠具體等問題;雖然案情唔同,但共同訊息係一樣:公司要證明自己有合理技術同組織措施,而唔係事後先話「係供應商工具出事」。
點睇
開源生態唔會因為 TeamPCP 或 Mini Shai-Hulud 就停低,香港開發團隊亦無可能靠「全部自己寫」解決問題。真正要改嘅係信任模型:extension、package、CI action、AI agent skill、GitHub token,都要當成可被污染嘅第三方元件,而唔係因為喺官方 marketplace、由知名 repo 發佈、或者有簽名就自動放行。今次 GitHub 自己都中招,反而係一個好清楚嘅提醒:最易被忽略嘅攻擊面,往往就喺平時最快捷、最方便、最少人審嘅開發工具入面。
參考來源
- Ars Technica — A hacker group is poisoning open source code at an unprecedented scale — original report
- GitHub Blog:Investigating unauthorized access to GitHub-owned repositories — GitHub 官方公告,確認員工裝置、poisoned VS Code extension、約 3,800 repo 同客戶資料評估。
- Nx Blog:Postmortem: Nx Console v18.95.0 supply-chain compromise — Nx 官方 postmortem,交代惡意 extension 版本、曝光時間、credential theft 同 remediation。
- TanStack Blog:Postmortem: TanStack npm supply-chain compromise — TanStack 官方技術復盤,解釋 npm package、GitHub Actions、OIDC token 同 provenance 被利用嘅鏈條。
- Socket:Mini Shai-Hulud — 供應鏈安全研究追蹤,整理 Mini Shai-Hulud 對 npm/PyPI、developer secrets 同 CI/CD 嘅影響。
- Visual Studio Code Docs:Workspace Trust — VS Code 官方文件,說明 workspace、task、extension trust 對自動執行 code 嘅安全含義。
- HKCERT:Beware of Malicious or Vulnerable Third Party Dependencies — 香港本地資安背景,說明第三方 dependency、npm 惡意 package、dependency confusion 同管理建議。
- PCPD:Cyberport data breach investigation media statement — 本地資料保護脈絡,反映機構喺偵測、MFA、保安審計同政策方面嘅責任。
本文根據原文及公開資料整理;資料有出入時,以原文及官方資料為準。







