近期一个叫 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

企鹅操作 X 光扫描机检查礼物盒的内容物

它扫什么?

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.jsonpostinstall hook
  • requirements.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 事件让人重新检视「安装依赖」这件事。几个心得:

  1. 不要无脑 pip install。即使是大型项目也可能被投毒,哪怕只有一小时
  2. 注意 transitive dependencies。装的是 A,但 A 依赖 B,B 依赖 C,C 被投毒也会中
  3. 用前先扫。花 5 秒跑 shield.sh 比事后修复被偷走的 credential 省事太多
  4. 零依赖是这类工具的硬规矩。安全工具自己也要装一堆包,会失去意义

延伸阅读


小企鹅的经验

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