cargo install sloppy-joe
2026年3月的LiteLLM供应链攻击攻陷了一个月下载量达9700万的包。攻击者窃取了发布凭证,推送了恶意版本,这些版本窃取SSH密钥、云凭证和K8s密钥。sloppy-joe默认的72小时版本发布时间门控本可以阻止这两个被投毒的版本——它们在被发现后几小时内就被分析,远在门控开启之前。如果你在CI中运行
sloppy-joe check,这次攻击就会失败。 完整分析
AI代码生成器产生的包名有大约20%的概率是幻觉。攻击者注册这些名称并等待。sloppy-joe在npm install或pip install运行之前就在CI中捕获它们。
cargo install sloppy-joe
sloppy-joe check
sloppy-joe check --full
sloppy-joe check --ci
sloppy-joe check --dir ./my-project
sloppy-joe check --type npm
sloppy-joe check --python-groups dev,test --python-version 3.12 sloppy-joe check --python-extras docs --python-platform linux --python-version 3.12
sloppy-joe check --config /etc/sloppy-joe/config.json
sloppy-joe check --config https://raw.githubusercontent.com/yourorg/security-configs/main/sloppy-joe.json
sloppy-joe check --json
sloppy-joe check --review-exceptions
sloppy-joe init --register
sloppy-joe init --greenfield --ecosystem npm
sloppy-joe init --from-current
sloppy-joe init --from-current --register
sloppy-joe init > /secure/location/sloppy-joe.json
### Nix```bash
nix profile install github:brennhill/sloppy-joe
扫描模式:
sloppy-joe check 运行快速的本地防护栏。它始终强制进行清单解析、锁定文件/同步、来源证明及不支持来源策略。如果依赖项或策略状态发生变化,或者上一次成功的完整扫描距今超过 24 小时,它会建议执行 sloppy-joe check --full。sloppy-joe check --full 运行严格的在线扫描并刷新记录的成功完整扫描状态。sloppy-joe check --ci 运行与 --full 相同的严格覆盖范围,以 CI 为导向。sloppy-joe check 默认评估 runtime 配置文件。如果存在作用域依赖,它会发出警告并提示你传递显式的 --python-groups、--python-extras、--python-platform 和/或 --python-version 标志以实现 CI/构建对等。sloppy-joe check 输出总会提醒你在 CI 和生产门控中使用 --ci 或 --full。退出代码: 0 = 在所选模式下未发现阻塞问题,1 = 发现阻塞问题,2 = 运行时错误。
支持: JavaScript(npm、pnpm、Yarn、Bun)、Python、Rust、Go、Ruby、PHP、JVM(Gradle/Maven)和 .NET — 从清单文件自动检测。
生态系统指南: 请参阅 docs/ecosystems/README.md 了解每个生态系统当前的信任模型、支持的功能以及失败关闭限制。
| 生态系统 | 必需的清单 | 受信任的锁定文件/项目状态 |
|---|---|---|
| JavaScript / npm | package.json | package-lock.json 或 npm-shrinkwrap.json;旧的 npm v1 默认被阻止 |
| JavaScript / pnpm | package.json | pnpm-lock.yaml |
| JavaScript / Yarn | package.json | yarn.lock |
| JavaScript / Bun | package.json | bun.lock |
| Python | pyproject.toml、requirements*.txt、Pipfile、setup.cfg 或 setup.py | 受信任的 Poetry 路径使用 poetry.lock,受信任的 uv 路径使用 uv.lock,完全哈希锁定的 pip-tools 仅在提交的 requirements 图将 --index-url 和任何 --extra-index-url 值精确绑定时才受信任;可通过 trusted_indexes.pypi 将仓库可见的 Python 索引加入白名单;受信任的 Python 模式一次评估一个选定的安装配置文件(默认为 runtime,通过 CLI 显式指定 groups/extras/platform/arch/version);默认情况下允许旧清单并给出警告 |
| Rust | Cargo.toml | Cargo.lock |
| Go | go.mod | 外部依赖需要 go.sum |
| Ruby | Gemfile | Gemfile.lock |
| PHP / Composer | composer.json | composer.lock |
| JVM / Gradle | build.gradle 或 build.gradle.kts | gradle.lockfile |
| JVM / Maven | pom.xml | 仅警告:尚无可信任的项目本地锁文件路径 |
| .NET / NuGet | .csproj | packages.lock.json |
配置来源: 本地文件路径、HTTPS URL 或 SLOPPY_JOE_CONFIG 环境变量。配置不会从项目目录中读取(原因见 CONFIG.md)。
入门引导: 使用与仓库匹配的引导模式:
sloppy-joe init --greenfield --ecosystem <eco> 为新项目打印特定于生态系统的启动策略。目前,npm、pypi 和 cargo 实现了 greenfield 预设;其他生态系统会失败并显示“暂不支持”错误。添加 --register 将其写入仓库之外并安全注册。sloppy-joe init --from-current 检查当前仓库并打印仅限审查的引导建议。目前,--from-current 仅对第一方代码为 npm 和/或 cargo 的仓库实现;其他生态系统会失败关闭并显示“未实现”错误。添加 --register 写入并注册生成的配置。sloppy-joe init 打印一个中立的模板。单个二进制文件。8 个生态系统。16 种攻击类型。生成式检查零误报。AI 代理无法篡改的配置。
大多数依赖安全工具只检查一两项——存在性或编辑距离。sloppy-joe 在单次扫描中检查 16 个攻击向量:幻觉包、10 种类型的域名抢注(同形字、作用域抢注、重复字符、分隔符混淆、单词重排序、相邻交换、省略字符、混淆形式、大小写变体、版本后缀)、规范执行、版本年龄门槛、安装脚本放大、依赖爆炸、维护者更改以及通过 OSV.dev 的已知漏洞。
它作为一个单独的 Rust 二进制文件运行,没有运行时依赖。它支持所有 8 个主要的包生态系统。其配置专为安全性而设计:绝不从项目目录读取,可从 URL 加载用于 CI,并在出现问题时提供清晰的错误消息。
| sloppy-joe | Socket.dev | GuardDog | Phantom Guard | antislopsquat | |
|---|---|---|---|---|---|
| 存在性检查 | ✅ | ✅ | ❌ | ✅ | ✅ |
| 相似性/域名抢注 | ✅ | ✅ | ✅ | ✅ | ❌ |
| 同形字检测 | ✅ | ❌ | ❌ | ❌ | ❌ |
| 作用域抢注 | ✅ | ❌ | ❌ | ❌ | ❌ |
| 规范执行 | ✅ | ❌ | ❌ | ❌ | ❌ |
| 版本年龄门槛 | ✅ | ❌ | ❌ | ❌ | ❌ |
| 安装脚本放大器 | ✅ | ✅ | ❌ | ❌ | ❌ |
| 依赖爆炸 | ✅ | ❌ | ❌ | ❌ | ❌ |
| 维护者更改 | ✅ | ✅ | ❌ | ❌ | ❌ |
| OSV 漏洞检查 | ✅ | ✅ | ❌ | ❌ | ❌ |
| 配置安全性(仓库外) | ✅ | 不适用 | ❌ | ❌ | ❌ |
| 内部 + 允许列表 | ✅ | ❌ | ❌ | ❌ | ❌ |
| npm | ✅ | ✅ | ✅ | ✅ | ❌ |
| PyPI | ✅ | ✅ | ✅ | ✅ | ✅ |
| Cargo | ✅ | ✅ | ❌ | ✅ | ❌ |
| Go | ✅ | ✅ | ✅ | ❌ | ❌ |
| Ruby | ✅ | ✅ | ✅ | ❌ | ❌ |
| PHP | ✅ | 🔶 | ❌ | ❌ | ❌ |
| JVM (Gradle/Maven) | ✅ | ✅ | ❌ | ❌ | ❌ |
| .NET (NuGet) | ✅ | ✅ | ❌ | ❌ | ❌ |
| 单个二进制文件 | ✅ | ❌ | ❌ | ❌ | ❌ |
| 开源 | Apache 2.0 | 商业 | Apache 2.0 | MIT | 开源 |
| 语言 | Rust | SaaS | Python | Python | Python |
🔶 = 测试版/实验性