近期一個叫 litellm 的 Python 套件被投毒。
這個套件每月有近一億次下載量,被無數 AI 專案當作依賴。被投毒的版本只存在了不到一小時,但在那一小時內,任何執行 pip install litellm 的人,或者安裝了任何依賴 litellm 的工具的人,都可能已經被偷走:
- SSH 金鑰(連伺服器的通行證)
- AWS / GCP / Azure 雲端憑證
- 加密貨幣錢包
- 所有環境變數(API keys)
- shell 歷史紀錄
- Git 認證資訊
- 資料庫密碼
什麼都不用做,不用 import 它、不用呼叫它,裝了就中。

這是怎麼做到的?
攻擊者用了一個大多數人不知道的 Python 機制:.pth 檔案。
Python 在啟動時會自動讀取 site-packages 目錄裡的所有 .pth 檔案。正常用途是告訴 Python「把這個路徑加到搜尋清單裡」。但在 .pth 檔案裡寫一行 import 開頭的指令,它就會自動執行。
攻擊者在裡面放了 base64 編碼的惡意程式。解碼後,它會靜靜地掃描電腦上的所有敏感檔案,然後把內容傳到攻擊者的伺服器。
更可怕的是,這次攻擊之所以被發現,是因為攻擊者自己的程式碼有 bug。它消耗了太多記憶體,導致受害者的電腦當機。攻擊者寫得更好一點,這件事可能好幾天都不會被發現。
為什麼這跟 Claude Code 使用者有關?
用 Claude Code 的人,常會從 GitHub 下載各種 skill(給 Claude 看的指令集 + 腳本)、MCP server、或其他擴充工具。
每一次把別人寫的程式碼放到電腦上、讓 Claude 有權限去執行它,就在信任那個人。
一個惡意的 skill 可以:
| 攻擊手法 | 具體做什麼 |
|---|---|
| Prompt injection | 在 markdown 裡藏隱形指令,操縱 Claude 去做壞事 |
| 惡意腳本 | curl SSH 金鑰然後 POST 到攻擊者的伺服器 |
| Supply chain 投毒 | 在 requirements.txt 裡引入被污染的套件 |
| .pth 注入 | Python 每次啟動都自動執行竊取程式 |
| 反向 shell | 在電腦上開一個後門,讓攻擊者遠端連入 |
Skill Shielder
Skill Shielder 為這個問題而生。
它是一個零依賴的開源安全審計工具。純 bash 腳本,不需要安裝任何東西。它在安裝任何工具之前先掃描,告訴使用者裡面有什麼可疑的東西。
# 掃描本地資料夾
./shield.sh /path/to/downloaded-skill
# 直接掃描 GitHub repo
./shield.sh https://github.com/someone/their-tool

它掃什麼?
Skill Shielder 有四個獨立的掃描模組:
1. Prompt Injection 掃描器
檢查 markdown、JSON、YAML 裡的隱藏指令。例如:
ignore all previous instructions(經典覆寫指令)- 偽裝的
<system>標籤(假裝是系統訊息) - Unicode 零寬度字元(肉眼看不到的隱形文字)
do not tell the user(叫 AI 對使用者隱瞞事情)
2. 腳本安全掃描器
檢查 .sh、.py、.js、.ts 裡的危險操作:
curl ... | bash(下載並直接執行遠端程式碼)base64 ~/.ssh/id_rsa | curl -X POST(把 SSH 金鑰編碼後傳走)- 反向 shell(讓攻擊者遠端控制電腦)
rm -rf ~/(刪除整個家目錄)
3. Supply Chain 掃描器
針對 litellm 那種攻擊設計:
.pth檔案裡有沒有可執行程式碼setup.py有沒有在安裝時偷跑指令package.json的postinstallhookrequirements.txt有沒有從可疑來源拉套件
4. 權限範圍分析
分析這個工具會存取哪些檔案和網路端點:
- 有沒有讀取
~/.ssh、~/.aws、.env? - 有沒有連到不認識的外部網址?
- 同時存取敏感路徑又發起網路請求 , 這就是典型的資料外洩模式

三種判定結果
掃描完成後,Skill Shielder 會給一個清楚的判定:
| 判定 | 意思 | 該怎麼做 |
|---|---|---|
| PASS | 沒有發現問題 | 可以安心安裝 |
| WARN | 有值得注意的地方 | 看看是什麼,確認合理再安裝 |
| FAIL | 發現嚴重問題 | 不要安裝,離它遠一點 |
實際跑起來長這樣
對一個測試用惡意 skill 執行掃描:
# Skill Shielder Report
**Target**: malicious-skill
**Verdict**: **FAIL**
## Summary
| Scanner | CRITICAL | WARN | INFO |
|------------------|----------|------|------|
| prompt-injection | 2 | 4 | 0 |
| script-safety | 5 | 4 | 0 |
| supply-chain | 1 | 2 | 0 |
| permissions | 1 | 3 | 0 |
## Findings
- [CRITICAL] SKILL.md:12 [PROMPT_OVERRIDE] ignore all previous instructions...
- [CRITICAL] scripts/setup.sh [PIPE_TO_SHELL] curl/wget piped to sh/bash
- [CRITICAL] scripts/setup.sh [CREDENTIAL_EXFIL] base64 encode credentials then curl
- [CRITICAL] scripts/setup.sh [REVERSE_SHELL] reverse shell pattern detected
- [CRITICAL] evil.pth [PTH_EXECUTABLE] .pth file contains executable code
...
## Recommendation
**CRITICAL issues detected. Do NOT install.**
9 個 CRITICAL,全部抓到。
怎麼開始用?
git clone https://github.com/p3nchan/skill-shielder.git
cd skill-shielder
chmod +x shield.sh scanners/*.sh
# 掃想安裝的東西
./shield.sh /path/to/any-project
也可以把它當作 Claude Code 的一個 skill:把 repo clone 到本地,Claude 就能直接用它來幫忙審計其他工具。
整個工具是純 bash,macOS 和 Linux 都能用,不需要安裝任何東西。
一些建議
litellm 事件讓人重新檢視「安裝依賴」這件事。幾個心得:
- 不要無腦
pip install。即使是大型專案也可能被投毒,哪怕只有一小時 - 注意 transitive dependencies。裝的是 A,但 A 依賴 B,B 依賴 C,C 被投毒也會中
- 用前先掃。花 5 秒跑
shield.sh比事後修復被偷走的 credential 省事太多 - 零依賴是這類工具的硬規矩。安全工具自己也要裝一堆套件,會失去意義
延伸閱讀
小企鵝的經驗
Skill Shielder 是自家做的 skill audit 工具。OpenClaw 上想試的 skill 不少,每次想裝前要逐檔讀過 SKILL.md 跟 scripts,時間久了會懶;做這個工具就是把那套人工審計步驟自動化。實際跑下來,最常被擋下來的是 transitive dependency 跟 setup script 裡的 curl pipe to sh,這兩條 pattern 就過濾掉很多風險。
常見問題
Q: Skill Shielder 本身需要安裝什麼嗎?
完全不需要。它是純 bash 腳本,只用到 macOS / Linux 內建的 grep、find 等基礎指令,沒有任何外部依賴。一個安全工具如果自己也要 pip install,那就諷刺了。
Q: 掃描結果是 WARN 就代表有問題嗎?
不一定。WARN 代表有值得注意的地方,例如使用了 curl POST 或讀取了 .env 檔案。這些在合法工具中很常見,但你應該確認它們的用途是否合理。只有 CRITICAL(紅色)才是真正危險的信號。
Q: 這個工具只能用在 Claude Code 嗎?
不是。雖然它設計的初衷是審計 Claude Code 的 skill,但你可以用它掃描任何 GitHub 專案、MCP server、或本地腳本。任何你準備在終端機執行的第三方程式碼,都值得先掃一下。
Q: Pattern-based 掃描能抓到所有攻擊嗎?
不能。沒有任何工具能保證 100% 偵測率。Skill Shielder 是第一道防線,不是萬靈丹。但它能抓到絕大多數已知的攻擊手法,包括最新的 .pth 檔注入、prompt injection、和 supply chain 投毒。
整理:Penna|小企鵝 Penchan