觀點 · 資訊分享
資安公司 CrowdSec 程式碼外流:起因是 5 月 TanStack 套件被下毒,離職員工帳號沒及時移除
CrowdSec 公開事件報告:約 170 個私有 GitHub 程式庫在 5 月被下載、9 月 16 日被貼上論壇。源頭是一位剛離職、仍留在 GitHub 組織裡的工程師電腦,被 TanStack npm 供應鏈攻擊偷走了權杖。
- 發布
- 2026-09-19
- 篇幅
- 約 4 分鐘 · 1,590 字
- 結構
- 7 節 + 3 題常見問題
- 標籤

一句話看懂:資安公司 CrowdSec 的私有程式碼外流,起點是 5 月被下毒的 TanStack npm 套件,偷走了一位剛離職員工的 GitHub 權杖。

先用白話講:什麼是「供應鏈攻擊」?
想像你開餐廳,每天跟同一家廠商叫貨。如果有人偷偷在廠商的麵粉裡下藥,你自己的廚房再乾淨也沒用,客人吃了一樣出事。
寫程式也一樣。現在的網站大量使用別人寫好的套件(例如前端常用的 TanStack),透過 npm 下載。供應鏈攻擊就是駭客去污染這些套件,讓所有安裝它的工程師電腦一起中招,偷走電腦裡存的各種權杖和密碼。
發生什麼事
CrowdSec 是一家做協作式防火牆的資安公司。執行長在 9 月 18 日發布完整事件報告,時間線如下:
- 5 月 11 日:攻擊者入侵 TanStack 的 npm 套件,42 個套件被植入專偷憑證與權杖的惡意程式
- 5 月 22 日:攻擊者用一個 GitHub OAuth 權杖,在約 9 分鐘內下載了 約 170 個 CrowdSec 私有程式庫
- 5 月 25 日:這位剛離職員工的 GitHub 存取被撤銷(他因為想完成交接工作,帳號先被保留)
- 8 月 17 日:外流資料裡的一組 AWS 權杖被人拿來測試權限
- 9 月 16 日:程式碼被貼上駭客論壇;CrowdSec 當晚成立應變小組
- 9 月 18 日:發布完整報告,前後約 48 小時完成盤點、權杖輪替與調查
損失有多大?
依 CrowdSec 的說法:
| 類別 | 狀況 |
|---|---|
| 基礎設施、資料庫 | 沒有被存取或入侵 |
| 程式碼 | 沒有被竄改(含開源軟體與建置流程) |
| 可用的憑證 | 只有一組 AWS SNS 權杖,權限限縮到只能對單一主題發通知 |
| 使用者資料 | 83 個 Email(約 15 萬用戶中不到 0.05%) |
| 其他個資 | 51 位 2020 年潛在投資人的姓名、Email 與投資脈絡 |
CrowdSec 也坦承,用來決定封鎖哪些 IP 的「共識演算法」門檻值一起外流了,他們會調整門檻並加強監控。
給開發者的技術細節
這份報告最有價值的是調查過程:
- 外流封存檔裡的
.git/config留著當初複製用的網址,可以看出用的是gho_開頭的 GitHub OAuth 權杖 - 這個權杖在被發現時已經不存在,組織稽核紀錄也找不到;GitHub 一般方案的稽核紀錄不會記錄 Git 下載活動
- 最後是 GitHub 支援團隊提供那段時間的 Git 活動,才確認是離職員工的帳號
- 報告提到可以用權杖的雜湊值去稽核紀錄裡比對:
echo -n "$TOKEN" | openssl dgst -sha256 -binary | base64
- 讓損害沒有擴大的關鍵:AWS 採無伺服器架構、機密大量放在 SSM 與 Secrets Manager、權杖權限切到最小,另外對 Node 套件設了「發布滿一段時間才安裝」的規則
我的看法
這件事最值得小團隊警惕的,不是駭客多厲害,而是那句「我們跟他好聚好散,讓他把工作收尾」。接案團隊很常這樣:外包夥伴或離職同事的 GitHub、雲端權限一直沒收,覺得「反正人很好」。但問題從來不是人,而是那台電腦哪天被套件下毒。
我會建議把「離職或結案當天收回所有權限」寫成固定流程,並定期輪替權杖。另外,CrowdSec 能在 48 小時內講清楚影響範圍,靠的是權限切得夠細、機密沒寫在程式碼裡。這兩件事平常麻煩,出事時就是救命繩。
名詞小辭典
- npm:JavaScript 最常用的套件下載平台,前端與 Node.js 專案幾乎都靠它安裝套件。
- 權杖(Token):代替帳號密碼的通行證,拿到它的人就能用你的身分做事。
- OAuth:讓 App 代表你存取某個服務的授權方式,GitHub 的
gho_權杖就是其中一種。 - 權限最小化:每把鑰匙只給剛好夠用的權限,被偷了損失也有限。
資料來源
常見問題
我有用 TanStack(例如 TanStack Query),要擔心嗎?
這次報告提到的是 2026 年 5 月 11 日那波被下毒的版本,共 42 個套件。重點是確認你在那段時間有沒有安裝到被植入惡意程式的版本;CrowdSec 自己檢查後發現,他們用到的 TanStack 套件都不在被下毒的清單上。若不確定,最保險的做法是輪替那段期間開發機上的所有權杖。
為什麼程式碼外流幾個月後才被發現?
攻擊者用的是 GitHub OAuth 權杖,在 CrowdSec 發現時已經不存在了,組織的稽核紀錄也查不到它。最後是靠 GitHub 支援團隊調出那兩小時的 Git 活動紀錄,才確認是哪個帳號被盜用。
小團隊可以學到什麼?
三件事:離職當天就把人移出 GitHub 等所有組織、收回權杖;雲端權杖只給剛好夠用的權限;機密不要寫在程式碼裡,改放密鑰管理服務。CrowdSec 也提到他們會限制 Node 套件必須發布滿一段時間才安裝。
接著讀
全部觀點 →Cloudflare WAF 開始檢查「伺服器回了什麼」:攻擊有沒有得逞看得出來,免費方案也能用Cloudflare 推出 WAF 完整交易偵測與回應規則,把請求和伺服器的回應放在一起判斷,在回應送出前就能攔下。所有方案(含免費)都能用,第一批受管規則針對 php2shell 漏洞。閱讀 →OpenAI API 推出 12 小時提示快取:同一段話重複問 AI,用越多次越便宜OpenAI 讓 API 可以把重複使用的提示詞「記住」12 小時(原本只有 30 分鐘)。第一次要多付一點,但同一段內容用到第 3 次就開始省錢,用 12 次大約省下 7 成。閱讀 →PHP 兩個 CVSS 9.2 遠端執行程式碼漏洞緊急修補:所有處理網頁請求的 PHP 都受影響PHP 官方修補 CVE-2026-109618 與 CVE-2026-109619,兩者 CVSS 4.0 都是 9.2,PHP-FPM、mod_php、FrankenPHP 等處理網頁請求的環境都受影響。官方說沒有完整的緩解方式,請升到 8.5.12、8.4.27、8.3.36 或 8.2.35。閱讀 →