Vuln Check

io.github.ciloops由 GitHub 账号 ciloops 发布v0.1.3更新于 Nov 6, 2026

Local vulnerability scan on top of grype, with prioritised upgrade actions for agents.

发布方自己的服务:check.tattoo: tattoo size and placement guide

概览

AI 生成的概览

基于 grype 的本地漏洞扫描器,让助手扫描项目目录、容器镜像和 SBOM,并获得按优先级排序的升级建议。

可以做什么
  • 扫描项目目录中锁文件依赖与操作系统软件包的已知漏洞,给出按优先级排序的摘要和具体升级目标
  • 扫描从镜像仓库拉取的容器镜像,无需 Docker 守护进程
  • 扫描已有的 CycloneDX 或 SPDX SBOM 文件
  • 按 CVE 或 GHSA 编号查询单个漏洞的严重程度、受影响软件包和修复版本
  • 按需更新本地漏洞数据库
适用场景
适合在修改依赖文件或构建之前,让助手检查项目依赖或基础镜像是否存在已知漏洞,或解释某个具体 CVE。它返回精简、按优先级排序的结果,而不是庞大的原始报告。
运行要求
作为本地进程运行,需要预先安装 grype(Docker 镜像已内置)。可通过 npx、Homebrew、Go install、发布版二进制或 ghcr.io 镜像获取。未声明任何账号、API 密钥或环境变量。需要网络访问以拉取镜像,并在未禁用时查询 OSV API。
安装前请注意
默认情况下,grype 清点出的依赖 purl 会发送到 OSV API;使用禁用 OSV 的选项可让依赖清单不离开本机。扫描会读取项目目录并拉取容器镜像,镜像引用会与镜像仓库共享。结果仅供参考:没有锁文件时无法看到传递依赖,版本比较使用通用分词器,存在已知边界情况。

安装

在 SourceWeft 中

  1. 打开 控制台中的 Vuln Check,将其添加到工作区。
  2. 为需要使用其工具的对话启用该服务。

Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。

其他 MCP 客户端

参照 仓库 中的启动说明。

README

vuln-check

[ci] [codecov] [release] [go] [license]

Vulnerability truth for AI agents. Runs grype locally, merges an OSV freshness overlay, and returns a prioritised answer with concrete upgrade targets instead of a 40 KB JSON dump.

  • Any language with a lockfile (npm, PyPI, Go, Maven, Cargo, RubyGems, Composer, NuGet, Hex, Pub, Swift, R, Conan…), OS packages, container images, SBOMs.
  • One score per finding: CVSS + EPSS + CISA KEV + fix availability.
  • Remediation plan per package: smallest version that closes every finding, breaking flag.
  • CLEAN is ~20 tokens. Nothing runs on a server; nothing leaves your machine except the optional OSV query.

Install

sh
# grype is requiredbrew install grype            # or: curl -sSfL https://get.anchore.io/grype | sh -s -- -b /usr/local/bin
go install github.com/ciloops/vuln-check/cmd/vuln-check@latest# orbrew install ciloops/tap/vuln-check      # macOS cask# ornpx @ciloops/vuln-check scan .

Binaries for Linux/macOS/Windows on the Releases page. Docker: ghcr.io/ciloops/vuln-check (bundles grype).

CLI

sh
vuln-check scan .                               # agent format, OSV overlay onvuln-check scan python:3.12-slim                # image, pulled from the registryvuln-check scan sbom:bom.cdx.jsonvuln-check scan --format sarif --sarif-out out.sarif .vuln-check scan --fail-above 69 --no-osv .      # CI gate, exit 2 above thresholdvuln-check vuln CVE-2024-3094vuln-check db update

Output (--format agent):

json
{"status":"ACTION_REQUIRED","target":"dir:.","packages":412,"findings":17,"shown":5,"sources":["grype","osv"], "actions":[{"package":"pkg:npm/minimist","current":"1.2.5","target":"1.2.6","breaking":false,"fixes":["CVE-2021-44906"],"score":59}], "top":[{"id":"CVE-2021-44906","package":"[email protected]","severity":"CRITICAL","score":59,"epss":0.015,"fixed_in":["1.2.6"]}], "unfixable":3}

status: CLEAN | REVIEW (all findings < 40) | ACTION_REQUIRED. fresh: true marks advisories that came from OSV before grype-db ingested them. unfixable counts findings with no fix on the current release line.

MCP

Tools: scan_dir, scan_image, scan_sbom, vuln_lookup, db_update.

Claude Code:

sh
claude mcp add vuln-check -- vuln-check mcp# or the plugin (adds a skill that tells Claude when to scan):claude plugin marketplace add ciloops/vuln-check && claude plugin install vuln-check

Cursor / Windsurf / VS Code (.cursor/mcp.json, ~/.codeium/windsurf/mcp_config.json, .vscode/mcp.json):

json
{ "mcpServers": { "vuln-check": { "command": "vuln-check", "args": ["mcp"] } } }

Codex (~/.codex/config.toml):

toml
[mcp_servers.vuln-check]command = "vuln-check"args = ["mcp"]

Add --no-osv to the args to keep the dependency list off the network.

GitHub Action

yaml
- uses: ciloops/vuln-check@v1  with:    target: .            # or an image ref    fail-above: 69    sarif: vuln.sarif- uses: github/codeql-action/upload-sarif@v3  if: always()  with: { sarif_file: vuln.sarif }

Score

severity = CVSS base × 6 (label fallback) · exploit = EPSS × 30 · KEV: +10, floor 85 · no fix: × 0.85. Clamped to 0–100. See internal/score.

Freshness

grype-db builds daily and grype refreshes it at most every 2 h. The OSV overlay queries api.osv.dev with the purls grype inventoried (language ecosystems only) and adds anything grype-db has not seen yet, usually minutes after a GHSA is published. Disable with --no-osv.

Limits

  • No lockfile → transitive dependencies are invisible. Same as every scanner.
  • Remediation plans assume a linear release line per package; direct vs transitive is not distinguished yet.
  • Version comparison is a generic tokenizer, not per-ecosystem parsers. Good enough for "smallest fix above current"; edge cases exist (PEP 440 post-releases, exotic Maven qualifiers).

Development

sh
go test ./...go build ./cmd/vuln-check

Tests run against a fake grype (cmd/vuln-check/testdata/fake-grype.sh) and fixtures in internal/grype/testdata. CI runs a real grype e2e.

Release: tag vX.Y.Z → goreleaser publishes binaries, checksums, ghcr image, Homebrew cask for macOS (needs HOMEBREW_TAP_GITHUB_TOKEN and the ciloops/homebrew-tap repo) and the npm package via trusted publishing (OIDC, no token: configure the GitHub Actions trusted publisher for @ciloops/vuln-check on npmjs.com, workflow release.yml).

License

Apache-2.0. grype and syft are Apache-2.0 by Anchore. Vulnerability data: NVD (public domain), GHSA (CC-BY 4.0), OSV (per source), CISA KEV, FIRST EPSS.

来源:README.md,提交 dfb645a

工具

5

db_update

Update the local vulnerability database now. Scans already refresh it automatically once a day; call this only when the newest advisories matter.

无需输入参数。

scan_dir

Scan a project directory for known vulnerabilities in its dependencies (any language with a lockfile) and OS packages. Returns a prioritized summary with concrete upgrade actions. Call this before changing dependency files.

输入参数toppath必填

scan_image

Scan a container image (pulled from the registry, no Docker daemon needed) for vulnerabilities in OS packages and bundled dependencies. Use it to check a Dockerfile's FROM base image before building.

输入参数topimage必填

scan_sbom

Scan an existing CycloneDX or SPDX SBOM file for vulnerabilities.

输入参数toppath必填

vuln_lookup

Look up a vulnerability by id (CVE, GHSA, ...) in the local database: severity, affected packages and fixes.

输入参数id必填

版本历史

1
  1. v0.1.3最新Oct 23, 2026

评分

已满足适用检查项的 90%

该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。

  • 近 30 天内可连通25 分
  • 已声明认证方式10 分

    请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。

  • 已列出工具必需15 分
  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分

其他 Check 集成