__ __ __
___/ /___ ___ / /________ _______/ /_
/ _ / __ \/ _ \/ __/ ___/ / / / ___/ __/
/ __/ /_/ / __/ /_/ / / /_/ (__ ) /_
\__,_/\____/ .___/\__/_/ \__,_/____/\__/
/_/
deptrust 是一款 CLI 工具,用于检查 npm、PyPI、crates.io、Go modules、RubyGems、NuGet、Maven、Packagist、pub.dev、CocoaPods、Hex.pm、Hackage、GitHub Actions 等生态系统中软件包版本是否存在已知漏洞。
它既可作为 CLI 在本机运行,也可作为 MCP 服务器运行。它直接调用公共软件包注册表和 OSV API;不存在需要信任或配置的托管式 deptrust 服务。
这个工具的诞生源于一个令人沮丧的现状:AI 代理总是使用旧版本。
支持的生态系统:
@clidey/ux 等作用域软件包groupId:artifactId 形式的软件包名称vendor/package 形式的软件包名称owner/repo 形式的软件包名称,以及标签、分支引用或提交 SHA 作为版本deptrust 目前会报告已知漏洞并给出简单建议:
| 最高已知严重级别 | 建议 |
|---|---|
| critical | block |
| high | block |
| medium / unknown | review |
| low | allow |
| none found | allow |
allow 表示在公共数据源中未发现阻断性的已知漏洞。它并不能证明某个软件包是安全的。
deptrust 还会发出不属于 CVE 的风险信号。例如,过去 72 小时内发布的版本会被标记为需要审查,这样代理就不会盲目安装全新的发行版。
漏洞公告提供方会被并行查询:
提供方的覆盖范围因生态系统而异。如果 deptrust 能解析注册表元数据,但没有任何已配置的漏洞提供方支持该生态系统,它会返回 unknown,而不是将该软件包视为安全。
提供方覆盖范围:
| 生态系统 | 注册表元数据 | OSV | GitHub Advisory DB |
|---|---|---|---|
| npm | 是 | 是 | 是 |
| PyPI | 是 | 是 | 是 |
| Cargo / crates.io | 是 | 是 | 是 |
| Go modules | 是 | 是 | 是 |
| RubyGems | 是 | 是 | 是 |
| NuGet | 是 | 是 | 是 |
| Maven | 是 | 是 | 是 |
| Packagist / Composer | 是 | 是 | 是 |
| pub.dev | 是 | 是 | 是 |
| CocoaPods | 是 | 否 | 是 |
| Hex.pm | 是 | 是 | 是 |
| Hackage | 是 | 是 | 否 |
| GitHub Actions | 是 | 是 | 是 |
JSON 输出包含以下漏洞公告覆盖字段:
checked_providers:deptrust 实际查询过的漏洞提供方skipped_providers:因生态系统不受支持而被跳过的已配置提供方advisory_coverage:full、partial、none 或 erroradvisory_coverage_reason:对覆盖值的简要说明registry_verification:当注册表元数据确认了版本时为 verified;当在暂时性注册表故障后仍继续执行精确版本检查时为 unverifiedregistry_verification_reason:当验证不可用时的注册表错误当注册表验证暂时不可用时,精确版本检查仍会查询漏洞公告提供方。该结果始终不可安装,也绝不会获得 allow 建议。对 latest、未知软件包以及明确不存在的版本的检查,仍要求成功完成注册表解析。
HTTP 请求对 429、502、503 和 504 响应最多重试三次。重试使用较短的指数退避延迟,并遵循最多两秒的 Retry-After 值;服务器要求更长的等待时会快速失败,以免 CLI 挂起。漏洞公告重试次数用尽会使结果不完整,并阻止给出 allow 建议。
GitHub Advisory Database 和 GitHub Actions API 请求可以使用短期、最低权限的 GitHub App token。在 CI 中,通过 DEPTRUST_GITHUB_TOKEN 传递它:
DEPTRUST_GITHUB_TOKEN="$GITHUB_APP_TOKEN" deptrust check npm lodash 4.17.20
凭据的优先级依次为 DEPTRUST_GITHUB_TOKEN、GITHUB_TOKEN,然后是 GH_TOKEN。本地使用时,可通过 DEPTRUST_GITHUB_AUTH=gh deptrust check ... 显式启用可选的 GitHub CLI 回退;它会直接运行 gh auth token,不进行任何提示。如果没有可用凭据,DepTrust 会以未认证方式继续运行。GitHub API 速率限制或权限失败会产生带诊断信息的 unknown,绝不会被视为仅 OSV 的成功结果。
DepTrust 从不存储、捆绑、缓存、记录、遥测或输出 GitHub token。认证头仅发送到 https://api.github.com。
检查精确版本:
deptrust check npm lodash 4.17.20
普通响应示例:
npm [email protected]: 2 known vulnerabilities found
recommendation: block
risk_score: 80
检查最新版本:
deptrust check pypi requests latest
返回 JSON:
deptrust check --json cargo serde latest
检查 Go 模块:
deptrust check go golang.org/x/crypto latest
检查 RubyGems、NuGet 或 Maven:
deptrust check rubygems rails latest
deptrust check nuget Newtonsoft.Json latest
deptrust check maven org.apache.logging.log4j:log4j-core latest
检查 Packagist、pub.dev、CocoaPods、Hex.pm、Hackage 或 GitHub Actions:
deptrust check packagist monolog/monolog latest
deptrust check pub http latest
deptrust check cocoapods AFNetworking latest
deptrust check hex plug latest
deptrust check hackage aeson latest
deptrust check github-actions actions/checkout v7.0.0
deptrust check github-actions actions/checkout main
对于 GitHub Actions,完整的提交 SHA 被视为固定版本。完整的 semver 标签(如 v4.2.2)无需额外的固定信号即可接受。仅主版本的标签(如 v4)和分支引用(如 main)是有效的引用,但由于它们会变动,deptrust 会添加审查信号。
JSON 响应示例:
{
"ecosystem": "npm",
"package": "lodash",
"version": "4.17.20",
"latest_version": "4.17.21",
"known_vulnerabilities_found": true,
"safe_to_use": false,
"should_install": false,
"risk_score": 80,
"recommendation": "block",
"classification": "vulnerable",
"reason": "Found 2 known vulnerability records.",
"next_action": "do_not_install; use suggest_safe_version or compare_versions to choose a safer version",
"summary": "lodash 4.17.20 has 2 known vulnerabilities, including high severity. Block this exact version and prefer a fixed release.",
"signals": [],
"checked_providers": [
"OSV",
"GitHub Advisory DB"
],
"skipped_providers": [],
"advisory_coverage": "full",
"advisory_coverage_reason": "all configured vulnerability providers were checked",
"registry_verification": "verified",
"vulnerabilities": [
{
"id": "GHSA-35jh-r3h4-6jhm",
"aliases": [
"CVE-2021-23337"
],
"cve_ids": [
"CVE-2021-23337"
],
"ghsa_ids": [
"GHSA-35jh-r3h4-6jhm"
],
"summary": "Command Injection in lodash",
"severity": "high",
"source": "OSV",
"advisory_url": "https://github.com/advisories/GHSA-35jh-r3h4-6jhm",
"affected_ranges": [
"SEMVER: introduced 0, fixed 4.17.21"
],
"fixed_versions": [
"4.17.21"
],
"references": [
{
"type": "ADVISORY",
"url": "https://github.com/advisories/GHSA-35jh-r3h4-6jhm"
}
]
}
],
"provider_errors": []
}
仅当未发现已知漏洞时建议使用最新版本:
deptrust suggest npm lodash
如果最新版本不被允许,suggest 会检查较早的已知版本,并返回获得 allow 建议的最新版本。
当公告包含已修复版本时,suggest 会先检查这些提供方报告的已修复版本,然后再回溯注册表版本列表。
比较两个版本:
deptrust compare npm lodash 4.17.20 4.17.21
比较响应示例:
lodash 4.17.20 -> 4.17.21 improves risk: score 80 to 0.
recommendation: allow
next_action: upgrade_to_target
显示已安装版本:
deptrust version
最简单的安装方式是使用 npx 或 pnpx:
npx @clidey/deptrust install
pnpx @clidey/deptrust@latest install
默认安装程序是引导式的。它会安装二进制文件,询问要配置哪些代理集成,在进行任何更改之前打印用户级目标位置,并要求确认。引导式安装程序默认启用 MCP、技能回退以及 Codex 和 Claude Code 的依赖安全钩子。如需非交互式仅安装二进制文件,请添加 --yes,或传入显式的集成标志。
重新运行安装程序是安全的。它会静默保留未变的 MCP、技能和钩子配置。如果某个集成指向旧的 deptrust 二进制文件,或其托管配置已发生变化,安装程序会自动更新;用户无需手动删除并重新添加 MCP 服务器。自定义技能会在替换前进行备份。
要移除用户级二进制文件、技能和 MCP 条目:
npx @clidey/deptrust uninstall
pnpx @clidey/deptrust@latest uninstall
Homebrew 用户可以从 Clidey tap 安装:
brew install clidey/tap/deptrust
或者先 tap,然后按常规方式安装和升级:
brew tap clidey/tap
brew install deptrust
brew upgrade deptrust
Homebrew 安装完成后会打印一条提醒。要使用 Homebrew 二进制文件本身运行引导式 Codex 和 Claude Code 设置(MCP 注册和依赖安全钩子):
deptrust setup
引导式设置会在启用 MCP 和依赖安全钩子前征求确认。它会保留已使用当前二进制文件的注册,并协调指向较旧 npm、Homebrew 或源码安装路径的现有 DepTrust 注册。
Go 用户可以直接安装:
go install github.com/clidey/deptrust/cmd/deptrust@latest
该项目为已经在使用 Nix 的用户提供了可选的 Nix flake 输出。flake 封装了预构建的发行二进制文件。
# Run without installing
nix run github:clidey/deptrust
# Install into your profile
nix profile install github:clidey/deptrust
常规的发布工作流会从其发布的同一归档生成 Nix 哈希,在发布前评估 flake,然后在更新默认分支之前,针对已发布的资产进行构建和运行。在该工作流运行期间,github:clidey/deptrust 可能会短暂滞后。发布标签指向生成 flake 更新之前的源码提交,可能仍引用之前的二进制文件;当可重现性至关重要时,请固定一个 flake.nix 中包含所需版本的提交。
如需可重现的开发环境,请使用 Devbox:
# Install Devbox first (if not already installed)
curl -fsSL https://get.jetify.dev/devbox | bash
# Initialize the environment
devbox shell
# Build the project
devbox run build
devbox.json 约束了工具链版本,已提交的 devbox.lock 固定了确切的软件包版本和 nixpkgs 修订版。当你确实想刷新这些固定版本时,请运行 devbox update。
或者通过 Homebrew 安装 Devbox:
brew install jetify-com/devbox/devbox