什么是GhostFree🚫👻?
每个软件团队都可以使用一些帮助来消除代码库中困扰其依赖关系的幽灵。
GhostFree是一个本地MCP服务器,它使用以下命令根据发布的CVE扫描存储库的依赖关系以查找已知漏洞 OSV.dev,帮助您通过NVD和CISA KEV富集对发现进行分类和修复,并允许您管理可接受的风险——所有这些都可以直接从您的AI编码助手中完成。
快速开始
无需安装、注册或付款。将GhostFree添加到您使用和运行的任何代码工具的MCP设置中 /ghostfree.scan.
VS代码副本(扩展--最简单)
搜索 @mcp ghostfree 在“扩展”视图中(Ctrl+Shift+X)然后单击 安装。然后打开命令面板(Ctrl+Shift+P),跑 MCP:列出服务器,选择 GhostFree,选择 启动服务器,并在提示时确认信任。不需要JSON配置。
VS代码副本(手动配置)
创建或更新 .vscode/mcp.json 在项目根目录中:
{
"servers": {
"ghostfree": {
"type": "stdio",
"command": "npx",
"args": ["-y", "ghostfree", "--repo-path", "${workspaceFolder}"],
"env": {}
}
}
}克劳德代码
创建 .mcp.json 在项目根目录中:
{
"mcpServers": {
"ghostfree": {
"type": "stdio",
"command": "npx",
"args": ["-y", "ghostfree", "--repo-path", "."]
}
}
}光标
创建 .cursor/mcp.json:
{
"mcpServers": {
"ghostfree": {
"command": "npx",
"args": ["-y", "ghostfree", "--repo-path", "."]
}
}
}克劳德桌面
添加到您的 claude_desktop_config.json (位置因操作系统而异):
{
"mcpServers": {
"ghostfree": {
"command": "npx",
"args": ["-y", "ghostfree", "--repo-path", "/path/to/your/repo"]
}
}
}______________________________________________________________________
如何使用
这 /ghostfree.scan 提示
建议通过内置提示符运行扫描。在您的AI客户端中,键入:
/ghostfree.scan这驱动了以下流程:
- 发现 --查找所有清单文件(requirements.txt、package.json、go.mod、Cargo.toml、pom.xml、\*.csproj等)
- 阈值 --如果尚未配置,则要求您提供最低严重级别(严重/高/中/低)
- 扫描 --在所有发现的包中查询OSV.dev的CVE
- 分诊 --每次显示10个编号的结果。你选择调查哪些。
- 丰富 --获取CVSS向量、CWE分类和CISA KEV“被积极利用”状态以供您选择
- 补救 --建议升级、代码更改或风险接受,并说明原因和到期日期
示例会话
User: /ghostfree.scan
GhostFree: Discovering dependencies...
Found 84 packages across 2 ecosystems (npm, PyPI).
What minimum severity should I surface? (CRITICAL / HIGH / MEDIUM / LOW)
User: HIGH
GhostFree: Scanning against OSV.dev...
[1] CVE-2021-44228 CRITICAL (10.0) — org.apache.logging.log4j:log4j-core@2.14.1
Log4Shell: Remote code execution via JNDI lookup
Fix: upgrade to 2.17.1
[2] CVE-2022-25881 HIGH (7.5) — http-cache-semantics@4.1.0
ReDoS in http-cache-semantics
Fix: upgrade to 4.1.1
[3] CVE-2021-28918 CRITICAL (9.8) — netmask@1.0.6
IP address parsing bypass (SSRF / allowlist bypass)
Fix: upgrade to 1.1.0
Showing 1-3 of 3. Which would you like to investigate? (e.g., 1, 2, or 'all')
User: 3
GhostFree: [Calls enrich_cve CVE-2021-28918]
CVE-2021-28918 — netmask CRITICAL (9.8)
CVSS: 9.1 · CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N
CWE: CWE-704 (Incorrect Type Conversion)
CISA KEV: Not listed
What it is: netmask@1.0.6 improperly parses octal-notation IP addresses (e.g. 010.0.0.1),
treating them as decimal. This enables SSRF protection bypass and IP allowlist/blocklist
bypass — an attacker can craft an address that appears private but routes to a public host.
Exploit status: Not in CISA KEV. Public PoC exists (SICK-2021-011), ~280k affected projects.
Codebase exposure: netmask is not directly imported — it appears in package-lock.json as a
transitive dependency of pac-resolver@3.0.0 (a transitive dev dependency). No direct
require('netmask') or IP parsing logic found. Reachability is very low.
Recommendation: Upgrade — low effort, patch version (1.0.6 → 1.1.0), no API changes.
netmask is a transitive dependency; use npm audit fix or add a package.json overrides entry
to force netmask@1.1.0.
→ Reply with a number to investigate another CVE, 'back' to return to the list,
'fix' to apply the recommended fix, 'accept' to record an accepted risk, or 'done' to wrap up.示例:接受已知风险
User: Accept CVE-2022-25881 — it's only in our CI test pipeline, not reachable in production. Expiry end of year.
GhostFree: [Calls accept_risk CVE-2022-25881]
Accepted risk recorded:
• CVE-2022-25881 — http-cache-semantics (HIGH, CVSS 7.5)
Reason: Only used in CI test pipeline, not reachable in production
Expires: 2026-12-31
ID: 550e8400-e29b-41d4-a716-446655440000
This acceptance is saved to .ghostfree/accepted.yml. Commit this file to share the
decision with your team. The CVE will be suppressed on future scans until expiry.
User: List all accepted risks
GhostFree: [Calls list_accepted_risks]
## Accepted Risks (1)
**CVE-2022-25881** — ✅ expires in 272 days (2026-12-31) | Severity at acceptance: HIGH (7.5)
ID: 550e8400-e29b-41d4-a716-446655440000
Reason: Only used in CI test pipeline, not reachable in production
Accepted: 2026-04-03T10:00:00.000Z示例:丰富特定CVE
User: Tell me everything about CVE-2021-44228
GhostFree: [Calls enrich_cve CVE-2021-44228]
## Enrichment: CVE-2021-44228
### NVD
CVSS Score: 10.0 · CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H
CWE: CWE-917 (Improper Neutralization of Special Elements in an Expression Language Statement)
References:
• https://nvd.nist.gov/vuln/detail/CVE-2021-44228
• https://logging.apache.org/log4j/2.x/security.html
### CISA KEV
⚠️ CONFIRMED actively exploited in the wild (added to KEV: 2021-12-10)______________________________________________________________________
工具参考
| 工具 | 只读 | 说明 |
|---|---|---|
discover_dependencies | ✅ | 扫描回购清单,按生态系统返回所有固定包 |
check_cves | ✅ | 查询OSV.dev的CVE,按严重程度过滤,应用可接受的风险 |
enrich_cve | ✅ | 从NVD+KEV利用状态中获取CVSS、CWE、引用 |
list_accepted_risks | ✅ | 列出所有已接受的风险,包括到期状态和严重性快照 |
accept_risk | ❌ | 记录已接受的风险,包括原因、到期日期和严重性快照 |
remove_accepted_risk | ❌ | 通过UUID删除可接受的风险 |
所有只读工具都可以在MCP客户端中安全地自动批准。编写工具(accept_risk, remove_accepted_risk)将提示确认。
check_cves 输入
| 参数 | 必填 | 说明 |
|---|---|---|
packages | 是 | 数组 {name, version, ecosystem} --使用 discover_dependencies 输出 |
min_severity | 没有 | CRITICAL, HIGH, MEDIUM,或 LOW。如果未通过,则按以下顺序解决: GHOSTFREE_MIN_SEVERITY 那么,env-var .ghostfree/config.yml,然后提示选择 |
accept_risk 输入
| 参数 | 必填 | 说明 |
|---|---|---|
cve_id | 是 | CVE ID,例如。 CVE-2021-44228 |
reason | 是 | 商业理由 |
expires_on | 是 | 到期日期 YYYY-MM-DD 格式 |
confirm_extended_expiry | 否 | 设置 true 如果到期时间超过1年 |
severity | 是 | 验收时的严重性标签(CRITICAL, HIGH, MEDIUM, LOW, UNKNOWN)--快照,非实时 |
cvss_score | 否 | 接受时的CVSS评分——快照,非实时 |
______________________________________________________________________
配置
创建 .ghostfree/config.yml 在您的repo根目录中设置一个持久严重性阈值,该阈值通过源代码管理与您的团队共享:
min_severity: HIGH这优先于环境变量。如果两者都没有设置,GhostFree将在扫描时提示您选择。
环境变量
| 变量 | 描述 |
|---|---|
NVD_API_KEY | 可选NVD API键,用于更高的速率限制(50请求/30s与5请求/30s) |
GHOSTFREE_MIN_SEVERITY | 可选--跳过严重性提示并始终使用此阈值(CRITICAL, HIGH, MEDIUM,或 LOW) |
GHOSTFREE_DIR | 可选--使用自定义目录,而不是 .ghostfree/ (适用于两者 accepted.yml 和 config.yml) |
VS代码扩展用户: 创建一个 .env 工作区根目录中的文件——扩展程序会自动读取它并将值转发给服务器。对于所有其他设置(手动MCP JSON配置):将这些添加到 "env" 客户端配置文件中的块(.vscode/mcp.json, .mcp.json, .cursor/mcp.json, claude_desktop_config.json等),或将它们导出为系统环境变量。
______________________________________________________________________
可接受的风险管理
当你接受风险时,GhostFree会将其写入 .ghostfree/accepted.yml 在您的repo根目录中。 提交此文件 与您的团队分享已接受的决定。
accepted_risks:
- id: 550e8400-e29b-41d4-a716-446655440000
cve_id: CVE-2022-25881
reason: Only used in CI test pipeline, not reachable in production
expires_on: "2027-01-01"
accepted_at: "2026-04-02T10:00:00.000Z"
severity_at_acceptance: HIGH
cvss_score_at_acceptance: 7.5规则:
expires_on是 必需的 --没有开放式接受- 1年内到期:立即接受
- 过期超过1年:需要
confirm_extended_expiry=true - 过期的承兑汇票为 从不默默地倒下 --每次扫描时,它们都会作为警告重新出现
______________________________________________________________________
支持的生态系统和清单
| 生态系统 | 清单文件 |
|---|---|
python requirements.txt, pyproject.toml, Pipfile.lock, setup.cfg | |
| Node.js | package.json, package-lock.json |
| 去吧 | go.mod, go.sum |
| 生锈 | Cargo.toml, Cargo.lock |
Java pom.xml, build.gradle, build.gradle.kts | |
| .NET | *.csproj, packages.config |
版本范围处理
当清单指定版本范围而不是确切版本时,GhostFree会提取一个版本来查询漏洞数据库。我们使用两种分类法来保持推理清晰: VRC (什么样的说明符 *手段*)以及 VRHP (我们 *做* 关于它)。
版本范围概念(VRC)
VRC是一个与生态系统无关的标签,用于表示版本说明符所表达的内容。多个VRC可以应用于同一条目(例如,一个插入符号范围 *和* 预发布标签是 vrc-caret + vrc-prerelease).
| VRC | 概念 | 生态系统示例 | |||||
|---|---|---|---|---|---|---|---|
vrc-exact | 精确固定版本 | npm 1.4.0python ==2.28.0,货物 1.0.188,Maven 6.0.11 | |||||
vrc-lockfile-pin | 从锁定文件解析的版本 | package-lock.json, Cargo.lock, go.sum, Pipfile.lock | |||||
vrc-prerelease | 预发布/预稳定标签 | 1.0.0-beta, 9.0.0-preview.1, 1.0.0-SNAPSHOT, 32.1.2-jre | |||||
vrc-caret | Caret(主要兼容)范围 | npm ^1.2.3,货物 ^1.0.100,诗歌 ^2.28.0 | |||||
vrc-tilde | Tilde(次要/补丁兼容)范围 | npm ~4.17.0,货物 ~1.0.0,诗歌 ~2.28.0 | |||||
vrc-inclusive-minimum | 包容性下限(>=) | npm >=1.2.0python >=2.28.0,货物 >=0.5 | |||||
vrc-exclusive-minimum | 独家下限(>) | npm >1.0.0python >2.0,货物 >0.5 | |||||
vrc-compatible-release | 兼容版本 | Python ~=2.28 | |||||
vrc-compound | 多个约束组合 | npm >=1.0.0 =0.5, =2.28,=),提取开发人员已接受的最低版本。这是他们可能运行的最古老的版本,也是最容易受到攻击的版本。 | |||||
vrhp-skip | 跳过依赖关系 | 如果说明符仅提供上限(=, >, = | ^1.2.3, >=1.2.0 = / ~= | httpx==0.24.0, pydantic>=2.0.0 | 0.24.0, 2.0.0 | vrc-exact, vrc-inclusive-minimum | vrhp-passthrough, vrhp-extract-lower |
python pyproject.toml (诗歌)-- ^, ~, >= | ^2.28.0, >=2.28,= / > / ~= | requests>=2.28.0, requests~=2.28, requests===2.0.0 | 2.28.0, 2.28, 2.0.0 | vrc-inclusive-minimum, vrc-compatible-release, vrc-exact | vrhp-extract-lower, vrhp-passthrough | ||
python requirements.txt, setup.cfg --预发行 | requests==1.0.0-beta | 1.0.0-beta | vrc-exact + vrc-prerelease | vrhp-passthrough | |||
python requirements.txt, setup.cfg — =, >, = | ^1.0, >=0.5 | 1.0, 0.5 | vrc-caret, vrc-inclusive-minimum | vrhp-extract-lower | |||
锈 Cargo.toml — *, < | *, <1.0 | *(省略)* | vrc-wildcard, vrc-upper-bound-only | vrhp-skip | |||
锈 Cargo.lock | 1.0.86 | 1.0.86 | vrc-lockfile-pin | vrhp-lockfile |
______________________________________________________________________
常见问题解答
Q: 为什么我需要比目前的人工智能编码代理更多的东西?\ 你的AI代理对漏洞的知识在训练截止时被冻结。每天都会披露新的CVE——例如:Log4Shell是在2021年12月披露的,在此之前训练的任何模型都看不到它。
GhostFree查询实时权威漏洞报告组织以获取最新信息,因此无论您的模型何时训练,每次扫描都会反映当前的威胁形势。这种额外的上下文对于提高准确性或您的代理可以提供的任何建议或推荐也至关重要。
它还跟踪您接受的风险,包括原因和到期日期,在您的回购中建立一个可审计的记录。
它的目的是尽可能多地引入确定性,同时由您选择的与GhostFree交互的代理运行其核心。虽然我们建议使用您能负担得起的最佳模型运行它,但这种确定性策略有助于更便宜/更弱的模型在我们的测试中使用GhostFree辅助时进行相当有效的漏洞修复。
Q: GhostFree会在任何地方上传我的代码吗?\ 不会。只有包名和版本会发送到OSV.dev。源代码不会离开您的计算机。
Q: 我需要API密钥吗?\ 不需要。OSV.dev不需要身份验证。NVD富集在没有密钥的情况下工作(速率限制为5个请求/30s),在典型的人类使用此工具时,您不太可能碰到密钥(不过,您会开始看到是否在某些自主代理设置中运行)。设置env变量 NVD_API_KEY 有关更高的限制(请参见 nist.gov 网站了解更多详情)。
Q: 如果我离线怎么办?\ 扫描需要OSV.dev访问权限。如果无法访问,NVD和KEV富集将优雅地降级并发出警告。
Q: 它是否扫描传递依赖关系?\ 部分。当存在锁文件时,GhostFree会扫描完整解析的依赖关系图(直接+传递): package-lock.json 对于Node.js, Cargo.lock 对于Rust, go.sum 对于Go,以及 Pipfile.lock 对于Python。对于不支持锁文件的生态系统(Java、.NET),只扫描直接声明的依赖关系。
Q: 扫描发现了一个我已经修复的CVE。我该怎么办?\ 更新清单中的软件包版本。在下次扫描时,它将不再出现。
______________________________________________________________________
支持
对于bug和功能请求,请在GitHub上打开一个问题。
______________________________________________________________________
隐私政策
GhostFree在您的计算机上本地处理存储库的依赖项清单。以下是数据离开机器的确切内容及其去向:
我们从未将任何类型的源代码、文件内容、存储库名称、用户标识符或遥测数据编码为发送到任何地方。 与任何人工智能辅助工具交互时一样,您的底层环境、人工智能模型、代理、IDE等在选择如何与我们的代码和您的代码交互方面超出了我们的控制范围。任何使用此工具的人都应该熟悉我们包含的信息 LICENSE.txt (麻省理工学院)。
GhostFree不收集、存储或共享任何数据。所有处理都在本地进行。已接受风险文件(.ghostfree/accepted.yml)留在您的存储库中,由您控制。
如有疑问,请在GitHub上发布问题。
______________________________________________________________________
致谢
GhostFree完全建立在三个组织的肩上,这三个组织已经向世界各地报告CVE的所有漏洞研究人员免费提供了他们的漏洞情报。没有他们,这个工具就不会存在。
谷歌开源安全团队——开源漏洞(OSV)\ OSV.dev是每个GhostFree扫描的支柱。它提供了一个免费、开放的API,用于按包名称和版本查询所有主要包生态系统中的已知漏洞,并在单个响应中包括严重性分数和修复版本数据。其慷慨的速率限制和零身份验证设计使其成为在每个开发人员的机器上本地运行的工具的理想选择。
美国国家标准与技术研究所-国家漏洞数据库(NVD)\ NIST在美国商务部内维护的国家漏洞数据库是每个已发布CVE的标准化CVSS严重性向量和CWE分类的权威来源。GhostFree在per-CVE分类期间调用NVD API 2.0,以揭示开发人员做出知情补救决定所需的全部技术细节。
美国网络安全和基础设施安全局-已知漏洞(KEV)\ CISA是美国国土安全部的一部分,负责发布和维护已知漏洞目录,这是一份经过精心策划的已确认在野外被积极利用的CVE列表。GhostFree下载并使用此目录来回答一个最能改变团队行动紧急程度的问题: *这现在被利用了吗?*
______________________________________________________________________
我们的目标是让这些组织产生的安全情报尽可能地被每个开发人员访问,无论他们在哪里工作,这些情报是由大量公共开支收集的,并为了更安全的互联网而自由共享。追逐这些漏洞的坏人不会睡觉。数据也没有。
