@deepwhale-cn/dsh-mcp-audit 0.0.0-stage → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +61 -2
- package/bin/cli.mjs +5 -0
- package/cordis.patch.yml +4 -0
- package/docs/report.html +73 -0
- package/docs/report.png +0 -0
- package/lib/index.js +10 -0
- package/package.json +59 -3
- package/rules/01-unpinned-npx.json +14 -0
- package/rules/02-plaintext-endpoint.json +14 -0
- package/rules/03-local-executable.json +14 -0
- package/rules/04-no-config-found.json +14 -0
- package/skill/mcp-audit.md +52 -0
package/README.md
CHANGED
|
@@ -1,3 +1,62 @@
|
|
|
1
|
-
#
|
|
1
|
+
# @deepwhale-cn/dsh-mcp-audit
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
**MCP 服务安全** —— 审计 MCP 配置里的未锁定远端包、明文端点、可执行本地服务。
|
|
4
|
+
|
|
5
|
+
## 不装它会怎样
|
|
6
|
+
|
|
7
|
+
你的 MCP 配置写的是:
|
|
8
|
+
|
|
9
|
+
```json
|
|
10
|
+
"filesystem": { "command": "npx", "args": ["-y", "@modelcontextprotocol/server-filesystem"] }
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
看起来很正常。但 `npx -y` 意味着**每次启动都拉最新版** ——
|
|
14
|
+
上游某个版本被投毒,你开着 agent 用文件工具的那一刻就在执行它。
|
|
15
|
+
而且你**没有任何版本记录可以回滚**。
|
|
16
|
+
|
|
17
|
+
锁成 `@2024.11.0` 就能防住这一类。
|
|
18
|
+
|
|
19
|
+
## 它查什么
|
|
20
|
+
|
|
21
|
+
| 级别 | 内容 |
|
|
22
|
+
|---|---|
|
|
23
|
+
| 🔴 高 | `npx -y` 未锁版本 · 明文 http:// 端点 |
|
|
24
|
+
| 🟡 中 | 指向本地可执行文件/脚本 |
|
|
25
|
+
| 🟢 低 | 仓库里找不到 MCP 配置 |
|
|
26
|
+
|
|
27
|
+
## 为什么 MCP 特别值得查
|
|
28
|
+
|
|
29
|
+
**MCP 服务拿到的权限通常比一般插件大得多** —— 能读写文件、执行工具、访问账号。
|
|
30
|
+
而它的配置常常散落在个人机器上、不在版本控制里、没人审查过。
|
|
31
|
+
|
|
32
|
+
**给 agent 装 MCP 服务,等于给它开门。**
|
|
33
|
+
|
|
34
|
+
## 安装
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
dsh plugin --profile web add @deepwhale-cn/dsh-mcp-audit
|
|
38
|
+
# 或纯 CLI
|
|
39
|
+
npx @deepwhale-cn/dsh-mcp-audit
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## 用法
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
dsh-mcp-audit --demo # 看检出效果
|
|
46
|
+
dsh-mcp-audit --list-rules # 列出规则和依据
|
|
47
|
+
dsh-mcp-audit --html r.html
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+

|
|
51
|
+
|
|
52
|
+
## 边界
|
|
53
|
+
|
|
54
|
+
- **只审配置,不审服务本身** —— 服务代码里有什么、会不会外发数据,看不到。
|
|
55
|
+
- **锁定版本 ≠ 安全** —— 只防「上游悄悄改」,防不了「这个包本来就恶意」。
|
|
56
|
+
- 与 [dsh-dep-audit](https://github.com/feely0208/dsh-dep-audit) 分工:那个查 npm 依赖,这个查 MCP 配置。
|
|
57
|
+
|
|
58
|
+
本插件是一个工具。使用者必须遵守所在地区法律法规,**对使用本项目造成的任何后果自行承担责任。**
|
|
59
|
+
|
|
60
|
+
## License
|
|
61
|
+
|
|
62
|
+
MIT © 深鲸 DeepWhale
|
package/bin/cli.mjs
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { runCli } from '@deepwhale-cn/dsh-guard-core/cli';
|
|
3
|
+
import { dirname, join } from 'node:path';
|
|
4
|
+
import { fileURLToPath } from 'node:url';
|
|
5
|
+
runCli({ pkgRoot: join(dirname(fileURLToPath(import.meta.url)), '..'), meta: { name: '深鲸守护 · MCP 服务安全' } });
|
package/cordis.patch.yml
ADDED
package/docs/report.html
ADDED
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
<!doctype html><html lang="zh-CN"><head><meta charset="utf-8">
|
|
2
|
+
<title>深鲸守护 · MCP 服务安全 · 检查报告</title>
|
|
3
|
+
<style>
|
|
4
|
+
:root{--bg:#0b1018;--fg:#e6edf6;--muted:#8b9bb4;--line:#1e2a3a;--card:#121a26}
|
|
5
|
+
*{box-sizing:border-box}
|
|
6
|
+
body{margin:0;background:var(--bg);color:var(--fg);font:14px/1.6 -apple-system,"PingFang SC","Microsoft YaHei",sans-serif;padding:32px}
|
|
7
|
+
.wrap{max-width:1180px;margin:0 auto}
|
|
8
|
+
h1{font-size:22px;margin:0 0 4px}
|
|
9
|
+
.sub{color:var(--muted);font-size:13px;margin-bottom:20px}
|
|
10
|
+
.cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:12px;margin-bottom:20px}
|
|
11
|
+
.card{background:var(--card);border:1px solid var(--line);border-radius:12px;padding:14px 16px}
|
|
12
|
+
.card .k{color:var(--muted);font-size:12px;margin-bottom:6px}
|
|
13
|
+
.card .v{font-size:20px;font-weight:700}
|
|
14
|
+
.chip{display:inline-block;padding:3px 10px;border-radius:999px;margin:0 6px 6px 0;font-size:13px;
|
|
15
|
+
border:1px solid var(--c);color:var(--c)}
|
|
16
|
+
.chip b{font-size:15px}
|
|
17
|
+
table{width:100%;border-collapse:collapse;background:var(--card);border:1px solid var(--line);border-radius:12px;overflow:hidden}
|
|
18
|
+
th,td{text-align:left;padding:10px 12px;border-bottom:1px solid var(--line);vertical-align:top;font-size:13px}
|
|
19
|
+
th{color:var(--muted);font-weight:500;background:#0e1622}
|
|
20
|
+
tr:last-child td{border-bottom:0}
|
|
21
|
+
.dot{display:inline-block;width:8px;height:8px;border-radius:50%;background:var(--c);margin-right:6px}
|
|
22
|
+
.t{font-weight:600;margin-bottom:2px}
|
|
23
|
+
.src{color:var(--muted);font-size:12px}
|
|
24
|
+
code{font-family:ui-monospace,Menlo,monospace;font-size:12px;color:#7dd3fc}
|
|
25
|
+
.ev{color:var(--muted);font-size:12px;margin-top:2px;word-break:break-all}
|
|
26
|
+
.adv{color:var(--muted);font-size:12px;max-width:260px}
|
|
27
|
+
.ok{background:#0d2b1a;border:1px solid #1d7a4a;color:#4ade80;padding:16px;border-radius:12px;margin-bottom:20px}
|
|
28
|
+
.warn{background:#2b1f0d;border:1px solid #a16207;color:#fbbf24;padding:12px 16px;border-radius:12px;margin-bottom:20px;font-size:13px}
|
|
29
|
+
footer{color:var(--muted);font-size:12px;margin-top:22px;padding-top:14px;border-top:1px solid var(--line)}
|
|
30
|
+
footer p{margin:3px 0}
|
|
31
|
+
</style></head><body><div class="wrap">
|
|
32
|
+
<h1>深鲸守护 · MCP 服务安全</h1>
|
|
33
|
+
<div class="sub">审计 MCP 配置:未锁定的远端包、明文端点、可执行本地服务 —— MCP 是 agent 的新攻击面</div>
|
|
34
|
+
|
|
35
|
+
<div class="cards">
|
|
36
|
+
<div class="card"><div class="k">扫描文件</div><div class="v">2</div></div>
|
|
37
|
+
<div class="card"><div class="k">检查规则</div><div class="v">4<span style="font-size:13px;color:var(--muted)">/4</span></div></div>
|
|
38
|
+
<div class="card"><div class="k">命中</div><div class="v" style="color:#ea580c">3</div></div>
|
|
39
|
+
<div class="card"><div class="k">已跳过目录</div><div class="v">0</div></div>
|
|
40
|
+
</div>
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
<div class="warn">⚠️ 扫描到的文件很少,请确认扫描目录是否正确 —— <b>不要因「全绿」就放心</b>。</div>
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
<div style="margin-bottom:16px"><span class="chip" style="--c:#ea580c">高 <b>2</b></span><span class="chip" style="--c:#ca8a04">中 <b>1</b></span></div>
|
|
47
|
+
<table><thead><tr><th>级别</th><th>问题</th><th>位置 / 证据</th><th>建议</th></tr></thead>
|
|
48
|
+
<tbody>
|
|
49
|
+
<tr class="sev-high">
|
|
50
|
+
<td><span class="dot" style="--c:#ea580c"></span>高</td>
|
|
51
|
+
<td><div class="t">MCP 服务用 npx -y 拉未锁定版本的远端包</div><div class="src">MCP 官方文档 · Server 部署建议;npm Docs — npx <code>-y</code> 跳过确认;供应链安全通用实践(锁定版本 + 完整性校验)</div></td>
|
|
52
|
+
<td><code>mcp.json:3</code><div class="ev">"-y", "@modelcontextprotocol/server-filesystem</div></td>
|
|
53
|
+
<td class="adv"><code>npx -y some-mcp-server</code> 每次启动都拉<b>最新版</b>:上游发新版(或被投毒)你会立刻执行它的代码,而且<b>没有任何版本记录可以回滚</b>。改成 <code>some-mcp-server@1.2.3</code>。</td>
|
|
54
|
+
</tr>
|
|
55
|
+
<tr class="sev-high">
|
|
56
|
+
<td><span class="dot" style="--c:#ea580c"></span>高</td>
|
|
57
|
+
<td><div class="t">MCP 端点使用明文 http://</div><div class="src">GB/T 22239-2019 第三级 · 安全通信网络 · 通信传输 —— 应保证通信过程中数据的完整性与保密性;MCP 官方文档 · 传输安全</div></td>
|
|
58
|
+
<td><code>mcp.json:4</code><div class="ev">"http://mcp.example.com/sse"</div></td>
|
|
59
|
+
<td class="adv">MCP 服务会读写你的文件、执行工具调用 —— 走明文意味着中间人可以看到甚至改写这些内容。改为 https://(本地回环 http://localhost 不算,本规则已排除)。</td>
|
|
60
|
+
</tr>
|
|
61
|
+
<tr class="sev-medium">
|
|
62
|
+
<td><span class="dot" style="--c:#ca8a04"></span>中</td>
|
|
63
|
+
<td><div class="t">MCP 服务指向本地可执行文件或脚本</div><div class="src">MCP 官方文档 · Server 生命周期;最小权限原则 —— 应限制可执行程序的运行</div></td>
|
|
64
|
+
<td><code>mcp.json:5</code><div class="ev">"command": "./scripts/tool.sh"</div></td>
|
|
65
|
+
<td class="adv">这个 MCP 服务指向本机的一个可执行文件/脚本。请确认:① 它是不是你自己写的;② 它读写的目录范围;③ 它的来源(第三方二进制很难审计)。MCP 服务的权限通常等于整个用户会话的权限 —— 比一般插件大得多。</td>
|
|
66
|
+
</tr></tbody></table>
|
|
67
|
+
|
|
68
|
+
<footer>
|
|
69
|
+
<p>扫描范围:<code>tests/fixtures/fail/demo-project</code> · 2 个文件</p>
|
|
70
|
+
<p>规则库:— · 生成时间:2026-10-13 02:39:31</p>
|
|
71
|
+
<p></p>
|
|
72
|
+
</footer>
|
|
73
|
+
</div></body></html>
|
package/docs/report.png
ADDED
|
Binary file
|
package/lib/index.js
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { createPlugin, pkgRootFrom } from '@deepwhale-cn/dsh-guard-core/plugin';
|
|
2
|
+
|
|
3
|
+
export const { name, inject, apply } = createPlugin({
|
|
4
|
+
name: 'mcp-audit',
|
|
5
|
+
pkgRoot: pkgRootFrom(import.meta.url),
|
|
6
|
+
skillFile: 'skill/mcp-audit.md',
|
|
7
|
+
binFile: 'bin/cli.mjs',
|
|
8
|
+
description: '审计 MCP 配置:未锁定的远端包、明文端点、可执行本地服务 —— MCP 是 agent 的新攻击面',
|
|
9
|
+
whenToUse: 'TODO:写清什么时候该用(用户会说的话也列上)',
|
|
10
|
+
});
|
package/package.json
CHANGED
|
@@ -1,6 +1,62 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@deepwhale-cn/dsh-mcp-audit",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"
|
|
5
|
-
"
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "审计 MCP 配置:未锁定的远端包、明文端点、可执行本地服务 —— MCP 是 agent 的新攻击面",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"keywords": [
|
|
8
|
+
"dsh",
|
|
9
|
+
"dsh-plugin",
|
|
10
|
+
"deepseek-harness",
|
|
11
|
+
"plugin",
|
|
12
|
+
"skill",
|
|
13
|
+
"security",
|
|
14
|
+
"guard",
|
|
15
|
+
"mcp-audit",
|
|
16
|
+
"mcp",
|
|
17
|
+
"model-context-protocol",
|
|
18
|
+
"agent-security",
|
|
19
|
+
"supply-chain",
|
|
20
|
+
"mcp-security"
|
|
21
|
+
],
|
|
22
|
+
"files": [
|
|
23
|
+
"lib",
|
|
24
|
+
"skill",
|
|
25
|
+
"bin",
|
|
26
|
+
"rules",
|
|
27
|
+
"docs",
|
|
28
|
+
"cordis.patch.yml",
|
|
29
|
+
"README.md"
|
|
30
|
+
],
|
|
31
|
+
"main": "./lib/index.js",
|
|
32
|
+
"exports": {
|
|
33
|
+
".": "./lib/index.js",
|
|
34
|
+
"./package.json": "./package.json"
|
|
35
|
+
},
|
|
36
|
+
"bin": {
|
|
37
|
+
"dsh-mcp-audit": "./bin/cli.mjs"
|
|
38
|
+
},
|
|
39
|
+
"engines": {
|
|
40
|
+
"dsh": ">=0.1.0-rc.6",
|
|
41
|
+
"node": ">=18"
|
|
42
|
+
},
|
|
43
|
+
"dsh": {
|
|
44
|
+
"bundle": {
|
|
45
|
+
"patch": "./cordis.patch.yml"
|
|
46
|
+
}
|
|
47
|
+
},
|
|
48
|
+
"dependencies": {
|
|
49
|
+
"@deepwhale-cn/dsh-guard-core": "^0.6.1"
|
|
50
|
+
},
|
|
51
|
+
"peerDependencies": {
|
|
52
|
+
"@deepseek-ai/dsh-skill": "*"
|
|
53
|
+
},
|
|
54
|
+
"repository": {
|
|
55
|
+
"type": "git",
|
|
56
|
+
"url": "git+https://github.com/feely0208/dsh-mcp-audit.git"
|
|
57
|
+
},
|
|
58
|
+
"homepage": "https://www.deepwhale.org.cn/skills.html",
|
|
59
|
+
"bugs": {
|
|
60
|
+
"url": "https://github.com/feely0208/dsh-mcp-audit/issues"
|
|
61
|
+
}
|
|
6
62
|
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "MCP-UNPINNED-NPX",
|
|
3
|
+
"title": "MCP 服务用 npx -y 拉未锁定版本的远端包",
|
|
4
|
+
"severity": "high",
|
|
5
|
+
"source": "MCP 官方文档 · Server 部署建议;npm Docs — npx `-y` 跳过确认;供应链安全通用实践(锁定版本 + 完整性校验)",
|
|
6
|
+
"advice": "`npx -y some-mcp-server` 每次启动都拉**最新版**:上游发新版(或被投毒)你会立刻执行它的代码,而且**没有任何版本记录可以回滚**。改成 `some-mcp-server@1.2.3`。",
|
|
7
|
+
"check": {
|
|
8
|
+
"type": "file-pattern",
|
|
9
|
+
"wholeFile": true,
|
|
10
|
+
"pattern": "\"-y\"\\s*,\\s*\"(@?[\\w.-]+(?:/[\\w.-]+)?)(?![^\"]*@\\d)",
|
|
11
|
+
"paths": ["**/mcp*.json", "**/*mcp*.json", "**/claude_desktop_config.json", "**/.mcp.json", "**/settings.json", "mcp.json", ".mcp.json"],
|
|
12
|
+
"max": 20
|
|
13
|
+
}
|
|
14
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "MCP-PLAINTEXT-URL",
|
|
3
|
+
"title": "MCP 端点使用明文 http://",
|
|
4
|
+
"severity": "high",
|
|
5
|
+
"source": "GB/T 22239-2019 第三级 · 安全通信网络 · 通信传输 —— 应保证通信过程中数据的完整性与保密性;MCP 官方文档 · 传输安全",
|
|
6
|
+
"advice": "MCP 服务会读写你的文件、执行工具调用 —— 走明文意味着中间人可以看到甚至改写这些内容。改为 https://(本地回环 http://localhost 不算,本规则已排除)。",
|
|
7
|
+
"check": {
|
|
8
|
+
"type": "file-pattern",
|
|
9
|
+
"pattern": "[\"']http://(?!localhost|127\\.0\\.0\\.1|0\\.0\\.0\\.0|\\[::1\\])[^\"']*[\"']",
|
|
10
|
+
"flags": "g",
|
|
11
|
+
"paths": ["**/mcp*.json", "**/*mcp*.json", "**/claude_desktop_config.json", "**/.mcp.json", "**/settings.json"],
|
|
12
|
+
"max": 20
|
|
13
|
+
}
|
|
14
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "MCP-LOCAL-EXEC",
|
|
3
|
+
"title": "MCP 服务指向本地可执行文件或脚本",
|
|
4
|
+
"severity": "medium",
|
|
5
|
+
"source": "MCP 官方文档 · Server 生命周期;最小权限原则 —— 应限制可执行程序的运行",
|
|
6
|
+
"advice": "这个 MCP 服务指向本机的一个可执行文件/脚本。请确认:① 它是不是你自己写的;② 它读写的目录范围;③ 它的来源(第三方二进制很难审计)。MCP 服务的权限通常等于整个用户会话的权限 —— 比一般插件大得多。",
|
|
7
|
+
"check": {
|
|
8
|
+
"type": "file-pattern",
|
|
9
|
+
"pattern": "\"command\"\\s*:\\s*\"[^\"]*(/\\./[^\"']*|\\.sh|\\.py|\\.js|\\.mjs|/usr/local/bin|/opt/)[^\"]*\"",
|
|
10
|
+
"flags": "g",
|
|
11
|
+
"paths": ["**/mcp*.json", "**/*mcp*.json", "**/claude_desktop_config.json", "**/.mcp.json", "**/settings.json"],
|
|
12
|
+
"max": 20
|
|
13
|
+
}
|
|
14
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "MCP-NO-CONFIG",
|
|
3
|
+
"title": "仓库里找不到 MCP 配置",
|
|
4
|
+
"severity": "low",
|
|
5
|
+
"source": "MCP 官方文档 · 配置位置(各客户端不同:claude_desktop_config.json / .mcp.json / settings.json)",
|
|
6
|
+
"advice": "没在本仓库找到 MCP 配置。如果你们确实在用 MCP,说明配置不在版本控制里 —— 那意味着:① 团队成员的配置可能不一致;② 没人审查过这些服务要什么权限。建议把配置模板(不含密钥)纳入版本控制。",
|
|
7
|
+
"check": {
|
|
8
|
+
"type": "files-lack",
|
|
9
|
+
"pattern": "\"mcpServers\"|mcpServers",
|
|
10
|
+
"flags": "i",
|
|
11
|
+
"paths": ["**/mcp*.json", "**/*mcp*.json", "**/claude_desktop_config.json", "**/.mcp.json", "**/settings.json", "mcp.json", ".mcp.json"],
|
|
12
|
+
"evidence": "没有任何文件里出现 mcpServers"
|
|
13
|
+
}
|
|
14
|
+
}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# MCP 服务安全
|
|
2
|
+
|
|
3
|
+
审计 MCP(Model Context Protocol)配置:未锁定的远端包、明文端点、可执行本地服务。
|
|
4
|
+
|
|
5
|
+
## 一、为什么 MCP 是新的攻击面
|
|
6
|
+
|
|
7
|
+
**MCP 服务拿到的权限,通常比一般插件大得多** —— 它能读写你的文件、执行工具调用、
|
|
8
|
+
访问你的账号。而它的配置往往:
|
|
9
|
+
|
|
10
|
+
- 散落在个人机器上(不在版本控制里)
|
|
11
|
+
- 用 `npx -y` 拉最新版(没有版本记录)
|
|
12
|
+
- 指向第三方二进制(难以审计)
|
|
13
|
+
|
|
14
|
+
**给 agent 装 MCP 服务,等于给它开门。**
|
|
15
|
+
|
|
16
|
+
## 二、它查什么
|
|
17
|
+
|
|
18
|
+
| 级别 | 项 | 为什么危险 |
|
|
19
|
+
|---|---|---|
|
|
20
|
+
| 🔴 高 | **`npx -y <包名>` 未锁版本** | 每次拉最新 → 上游投毒即刻执行,且无法回滚 |
|
|
21
|
+
| 🔴 高 | **明文 http:// 端点** | MCP 读写你的文件,明文可被中间人看到/改写 |
|
|
22
|
+
| 🟡 中 | **指向本地可执行文件/脚本** | 权限往往等于整个用户会话 |
|
|
23
|
+
| 🟢 低 | 仓库里找不到 MCP 配置 | 说明配置不在版本控制,没人审查过 |
|
|
24
|
+
|
|
25
|
+
## 三、怎么用
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
<cli 路径> --demo # 看检出效果
|
|
29
|
+
<cli 路径> --list-rules # 列出规则和依据
|
|
30
|
+
<cli 路径> --html r.html
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## 四、判据来源
|
|
34
|
+
|
|
35
|
+
- MCP 官方文档(Server 部署、传输安全、生命周期)
|
|
36
|
+
- npm Docs — `npx -y` 跳过确认
|
|
37
|
+
- 供应链安全通用实践:锁定版本 + 完整性校验
|
|
38
|
+
- GB/T 22239-2019 第三级 · 安全通信网络 · 通信传输
|
|
39
|
+
|
|
40
|
+
## 五、边界
|
|
41
|
+
|
|
42
|
+
- **只审配置,不审服务本身**:MCP 服务的代码里有什么、会不会外发数据,本工具看不到。
|
|
43
|
+
- **锁定版本 ≠ 安全**:锁了版本只防「上游悄悄改」,防不了「这个包本来就是恶意的」。
|
|
44
|
+
- **配置位置各客户端不同**:Claude Desktop 用 `claude_desktop_config.json`,
|
|
45
|
+
其它客户端可能用 `.mcp.json` / `settings.json`。本工具按常见路径找,
|
|
46
|
+
**原生支持 .mcp.json / mcp.json / settings.json**。
|
|
47
|
+
- 与 [dsh-dep-audit](https://github.com/feely0208/dsh-dep-audit) 分工:
|
|
48
|
+
那个查 npm 依赖的投毒面,这个查 MCP 服务的配置风险。
|
|
49
|
+
|
|
50
|
+
## 六、覆盖面
|
|
51
|
+
|
|
52
|
+
4 项,覆盖 MCP 配置层面的主要风险。
|