Home
供应链安全 · Python · 零配置
拦截攻击
在落地之前。
在落地之前。
pipguard 在代码执行前,先通过 AST 扫描每一个包。 无数据库、无网络调用、无复杂配置 —— 像门卫一样先拦后装。
零配置
纯标准库
安装前阻断
CI 友好
$pipguard install litellm==1.82.8
→ 下载 wheel(不执行代码)
→ 解压归档
→ AST 扫描 47 个文件
setup.py ............... CLEAN
utils/loader.py ............... CLEAN
.pth files ............... CRITICAL
─────────────────────────────────────
✗ 已阻断: litellm==1.82.8
.pth 自动执行 · 读取 ~/.ssh/id_rsa
并外传到 44.202.x.x:4444
风险等级: CRITICAL · 退出码: 1
问题背景¶
2026 年 3 月的 litellm 供应链攻击(每月约 9700 万下载)在 .pth 文件内嵌入 Python 代码。
该代码会在解释器启动时自动执行,并在一次 pip install 后窃取 SSH 密钥、AWS 凭据和 Kubernetes 配置。
传统工具(如 pip-audit、GuardDog)通常依赖已知签名或漏洞库,面对零日投毒可能失效。 pipguard 的问题更直接:
传统工具经常不会问的问题
某个 pip install 是否应该读取 ~/.ssh/id_rsa?
答案是 不应该,而且这个判断不需要任何在线数据库。
工作方式¶
01
pip download
只下载 wheel 或 sdist。
绝不执行代码。
绝不执行代码。
02
Sdist 检测
检测到 sdist 默认 exit 2(不安全)。
03
解压
仅使用 zipfile/tarfile。
不调用 subprocess,不 exec。
不调用 subprocess,不 exec。
04
AST 扫描
并行扫描全部 .py 文件;对 .pth、setup.py 提升敏感度。
05
风险决策
CRITICAL/HIGH 阻断(exit 1);CLEAN 直接安装。
风险等级速览¶
| 等级 | 触发条件示例 | 处理 |
|---|---|---|
| CRITICAL | .pth 可执行代码;eval(base64.b64decode(...)) |
阻断(exit 1) |
| HIGH | 同形异义包名;安装钩子读取 ~/.ssh/~/.aws;shell=True;os.system() |
阻断(exit 1) |
| MEDIUM | 二进制-only wheel;运行期网络调用;敏感环境变量 | 告警 + 确认 |
| LOW | 混合型二进制扩展;动态导入 | 告警 + 确认 |
| CLEAN | 无风险命中 | 直接安装 |