Why this conclusion was reached
2/4 dimensions flagged Block Declared vs actual capability 2 undeclared or violating capabilities were inferred.
Review Hidden execution and egress 108 lower-risk artifacts were extracted and still need context.
Block Attack chain and severe findings The report includes 3 attack-chain steps and 0 severe findings.
Review Dependencies and supply chain hygiene 3 dependency or supply-chain issues need attention.
Attack Chain
01 用户配置 STOCKTODAY_TOKEN 环境变量 Entry · SKILL.md:29
02 MCP server 以 STDIO 模式启动并注册 155 个工具 Escalation · src/index.ts:201
03 用户调用任意 tool,token + 查询参数 POST 到未知第三方 https://tushare.citydata.club/ Impact · src/index.ts:13
What drove the risk score up
数据外传至未知第三方 +25
所有 API 调用(含 token 和查询参数)均 POST 到自定义后端 tushare.citydata.club,而非官方 Tushare
依赖无版本锁定 +10
axios ^1.6.0 无版本锁定,pip 中无风险
环境变量读取 +5
读取 STOCKTODAY_TOKEN/TUSHARE_TOKEN,属于声明范围内的正常凭证使用
自定义后端可控性不明 +5
后端运营方和隐私政策未知,SKILL.md 明确标注但意图不明确
Most important evidence
Medium Data Exfil
凭证及查询数据发往未知第三方服务器
代码将 STOCKTODAY_TOKEN 和用户查询参数以 POST application/x-www-form-urlencoded 形式发送到 https://tushare.citydata.club/,而非 Tushare 官方 API。所有请求参数(含股票代码、日期范围等)均被暴露给该自定义后端,SKILL.md 仅以'使用自定义后端服务'一笔带过,未说明后端运营方、数据留存政策及合规性。
src/index.ts:13 明确披露自定义后端的运营方、数据处理政策和隐私声明;或替换为官方 Tushare API 端点。
Medium Supply Chain
axios 无版本锁定存在依赖供应链风险
package.json 中 axios 依赖声明为 ^1.6.0,允许自动升级到 1.x 最新版。axios 曾有 SSRF 和 CRLF 注入等历史漏洞(CVE-2019-10742 等),无版本锁定意味着自动引入含有漏洞的新版本。
package.json:11 锁定版本:"axios": "1.7.4" 或更高安全版本,并在 package-lock.json 中确认实际安装版本。
Low Doc Mismatch
文档未声明 network:WRITE 权限
SKILL.md 未声明该 skill 需要向外部服务器发送 HTTP 请求的能力,仅说明'调用 Tushare API'。代码实际通过 fetch 主动 POST 数据到第三方,权限声明不完整。
SKILL.md:1 在 allowed-tools 或权限声明中明确:network:WRITE,用于向 tushare.citydata.club 发送 API 请求。
Low Supply Chain
@modelcontextprotocol/sdk 依赖官方库但无版本锁定
MCP SDK 声明为 ^1.0.0,虽为官方包但同样无版本锁定,存在供应链风险。
package.json:10 锁定 SDK 版本并定期更新。
Declared capability vs actual capability
Network Block
Declared NONE
→ Inferred WRITE
src/index.ts:6,BASE_URL外部API调用 Environment Block
Declared NONE
→ Inferred READ
src/index.ts:5,process.env读取token Filesystem Pass
Declared NONE
→ Inferred NONE
无直接文件系统操作
Suspicious artifacts and egress
Medium External URL
https://tushare.citydata.club/ SKILL.md:38
Medium External URL
https://registry.npmmirror.com/@hono/node-server/-/node-server-1.19.11.tgz package-lock.json:22
Medium External URL
https://registry.npmmirror.com/@modelcontextprotocol/sdk/-/sdk-1.27.1.tgz package-lock.json:34
Medium External URL
https://registry.npmmirror.com/@types/node/-/node-20.19.37.tgz package-lock.json:74
Medium External URL
https://registry.npmmirror.com/accepts/-/accepts-2.0.0.tgz package-lock.json:84
Medium External URL
https://registry.npmmirror.com/ajv/-/ajv-8.18.0.tgz package-lock.json:97
Medium External URL
https://registry.npmmirror.com/ajv-formats/-/ajv-formats-3.0.1.tgz package-lock.json:113
Medium External URL
https://registry.npmmirror.com/asynckit/-/asynckit-0.4.0.tgz package-lock.json:130
Medium External URL
https://registry.npmmirror.com/axios/-/axios-1.13.6.tgz package-lock.json:136
Medium External URL
https://registry.npmmirror.com/body-parser/-/body-parser-2.2.2.tgz package-lock.json:147
Medium External URL
https://opencollective.com/express package-lock.json:166
Medium External URL
https://registry.npmmirror.com/bytes/-/bytes-3.1.2.tgz package-lock.json:171
Dependencies and supply chain
| Package | Version | Source | Known vuln | Notes |
| @modelcontextprotocol/sdk | ^1.0.0 | npm | No | 无版本锁定 |
| axios | ^1.6.0 | npm | No | 无版本锁定;历史CVE需关注 |
| typescript | ^5.0.0 | npm | No | devDependencies 无版本锁定 |
File composition
10 files · 2912 lines JSON 3 files · 1346 linesJavaScript 3 files · 945 linesTypeScript 1 files · 274 linesMarkdown 2 files · 215 linesPython 1 files · 132 lines
Files of concern · 4
package-lock.json JSON · 1309 lines
https://registry.npmmirror.com/@hono/node-server/-/node-server-1.19.11.tgz · https://registry.npmmirror.com/@modelcontextprotocol/sdk/-/sdk-1.27.1.tgz · https://registry.npmmirror.com/@types/node/-/node-20.19.37.tgz · https://registry.npmmirror.com/accepts/-/accepts-2.0.0.tgz · https://registry.npmmirror.com/ajv/-/ajv-8.18.0.tgz · https://registry.npmmirror.com/ajv-formats/-/ajv-formats-3.0.1.tgz · https://registry.npmmirror.com/asynckit/-/asynckit-0.4.0.tgz · https://registry.npmmirror.com/axios/-/axios-1.13.6.tgz · https://registry.npmmirror.com/body-parser/-/body-parser-2.2.2.tgz · https://opencollective.com/express · https://registry.npmmirror.com/bytes/-/bytes-3.1.2.tgz · https://registry.npmmirror.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz · https://registry.npmmirror.com/call-bound/-/call-bound-1.0.4.tgz · https://registry.npmmirror.com/combined-stream/-/combined-stream-1.0.8.tgz · https://registry.npmmirror.com/content-disposition/-/content-disposition-1.0.1.tgz · https://registry.npmmirror.com/content-type/-/content-type-1.0.5.tgz · https://registry.npmmirror.com/cookie/-/cookie-0.7.2.tgz · https://registry.npmmirror.com/cookie-signature/-/cookie-signature-1.2.2.tgz · https://registry.npmmirror.com/cors/-/cors-2.8.6.tgz · https://registry.npmmirror.com/cross-spawn/-/cross-spawn-7.0.6.tgz · https://registry.npmmirror.com/debug/-/debug-4.4.3.tgz · https://registry.npmmirror.com/delayed-stream/-/delayed-stream-1.0.0.tgz · https://registry.npmmirror.com/depd/-/depd-2.0.0.tgz · https://registry.npmmirror.com/dunder-proto/-/dunder-proto-1.0.1.tgz · https://registry.npmmirror.com/ee-first/-/ee-first-1.1.1.tgz · https://registry.npmmirror.com/encodeurl/-/encodeurl-2.0.0.tgz · https://registry.npmmirror.com/es-define-property/-/es-define-property-1.0.1.tgz · https://registry.npmmirror.com/es-errors/-/es-errors-1.3.0.tgz · https://registry.npmmirror.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz · https://registry.npmmirror.com/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz · https://registry.npmmirror.com/escape-html/-/escape-html-1.0.3.tgz · https://registry.npmmirror.com/etag/-/etag-1.8.1.tgz · https://registry.npmmirror.com/eventsource/-/eventsource-3.0.7.tgz · https://registry.npmmirror.com/eventsource-parser/-/eventsource-parser-3.0.6.tgz · https://registry.npmmirror.com/express/-/express-5.2.1.tgz · https://registry.npmmirror.com/express-rate-limit/-/express-rate-limit-8.3.1.tgz · https://registry.npmmirror.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz · https://registry.npmmirror.com/fast-uri/-/fast-uri-3.1.0.tgz · https://opencollective.com/fastify · https://registry.npmmirror.com/finalhandler/-/finalhandler-2.1.1.tgz · https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.15.11.tgz · https://registry.npmmirror.com/form-data/-/form-data-4.0.5.tgz · https://registry.npmmirror.com/mime-db/-/mime-db-1.52.0.tgz · https://registry.npmmirror.com/mime-types/-/mime-types-2.1.35.tgz · https://registry.npmmirror.com/forwarded/-/forwarded-0.2.0.tgz · https://registry.npmmirror.com/fresh/-/fresh-2.0.0.tgz · https://registry.npmmirror.com/function-bind/-/function-bind-1.1.2.tgz · https://registry.npmmirror.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz · https://registry.npmmirror.com/get-proto/-/get-proto-1.0.1.tgz · https://registry.npmmirror.com/gopd/-/gopd-1.2.0.tgz · https://registry.npmmirror.com/has-symbols/-/has-symbols-1.1.0.tgz · https://registry.npmmirror.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz · https://registry.npmmirror.com/hasown/-/hasown-2.0.2.tgz · https://registry.npmmirror.com/hono/-/hono-4.12.7.tgz · https://registry.npmmirror.com/http-errors/-/http-errors-2.0.1.tgz · https://registry.npmmirror.com/iconv-lite/-/iconv-lite-0.7.2.tgz · https://registry.npmmirror.com/inherits/-/inherits-2.0.4.tgz · https://registry.npmmirror.com/ip-address/-/ip-address-10.1.0.tgz · https://registry.npmmirror.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz · https://registry.npmmirror.com/is-promise/-/is-promise-4.0.0.tgz · https://registry.npmmirror.com/isexe/-/isexe-2.0.0.tgz · https://registry.npmmirror.com/jose/-/jose-6.2.1.tgz · https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz · https://registry.npmmirror.com/json-schema-typed/-/json-schema-typed-8.0.2.tgz · https://registry.npmmirror.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz · https://registry.npmmirror.com/media-typer/-/media-typer-1.1.0.tgz · https://registry.npmmirror.com/merge-descriptors/-/merge-descriptors-2.0.0.tgz · https://registry.npmmirror.com/mime-db/-/mime-db-1.54.0.tgz · https://registry.npmmirror.com/mime-types/-/mime-types-3.0.2.tgz · https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz · https://registry.npmmirror.com/negotiator/-/negotiator-1.0.0.tgz · https://registry.npmmirror.com/object-assign/-/object-assign-4.1.1.tgz · https://registry.npmmirror.com/object-inspect/-/object-inspect-1.13.4.tgz · https://registry.npmmirror.com/on-finished/-/on-finished-2.4.1.tgz · https://registry.npmmirror.com/once/-/once-1.4.0.tgz · https://registry.npmmirror.com/parseurl/-/parseurl-1.3.3.tgz · https://registry.npmmirror.com/path-key/-/path-key-3.1.1.tgz · https://registry.npmmirror.com/path-to-regexp/-/path-to-regexp-8.3.0.tgz · https://registry.npmmirror.com/pkce-challenge/-/pkce-challenge-5.0.1.tgz · https://registry.npmmirror.com/proxy-addr/-/proxy-addr-2.0.7.tgz · https://registry.npmmirror.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz · https://registry.npmmirror.com/qs/-/qs-6.15.0.tgz · https://registry.npmmirror.com/range-parser/-/range-parser-1.2.1.tgz · https://registry.npmmirror.com/raw-body/-/raw-body-3.0.2.tgz · https://registry.npmmirror.com/require-from-string/-/require-from-string-2.0.2.tgz · https://registry.npmmirror.com/router/-/router-2.2.0.tgz · https://registry.npmmirror.com/safer-buffer/-/safer-buffer-2.1.2.tgz · https://registry.npmmirror.com/send/-/send-1.2.1.tgz · https://registry.npmmirror.com/serve-static/-/serve-static-2.2.1.tgz · https://registry.npmmirror.com/setprototypeof/-/setprototypeof-1.2.0.tgz · https://registry.npmmirror.com/shebang-command/-/shebang-command-2.0.0.tgz · https://registry.npmmirror.com/shebang-regex/-/shebang-regex-3.0.0.tgz · https://registry.npmmirror.com/side-channel/-/side-channel-1.1.0.tgz · https://registry.npmmirror.com/side-channel-list/-/side-channel-list-1.0.0.tgz · https://registry.npmmirror.com/side-channel-map/-/side-channel-map-1.0.1.tgz · https://registry.npmmirror.com/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz · https://registry.npmmirror.com/statuses/-/statuses-2.0.2.tgz · https://registry.npmmirror.com/toidentifier/-/toidentifier-1.0.1.tgz · https://registry.npmmirror.com/type-is/-/type-is-2.0.1.tgz · https://registry.npmmirror.com/typescript/-/typescript-5.9.3.tgz · https://registry.npmmirror.com/undici-types/-/undici-types-6.21.0.tgz · https://registry.npmmirror.com/unpipe/-/unpipe-1.0.0.tgz · https://registry.npmmirror.com/vary/-/vary-1.1.2.tgz · https://registry.npmmirror.com/which/-/which-2.0.2.tgz · https://registry.npmmirror.com/wrappy/-/wrappy-1.0.2.tgz · https://registry.npmmirror.com/zod/-/zod-4.3.6.tgz · https://registry.npmmirror.com/zod-to-json-schema/-/zod-to-json-schema-3.25.1.tgz
src/index.ts TypeScript · 274 lines
凭证及查询数据发往未知第三方服务器
SKILL.md Markdown · 44 lines
文档未声明 network:WRITE 权限 · https://tushare.citydata.club/
package.json JSON · 22 lines
axios 无版本锁定存在依赖供应链风险 · @modelcontextprotocol/sdk 依赖官方库但无版本锁定
Other files · index.js · index_generated.js · test_all.js · README.md · generate_mcp.py · tsconfig.json
10 files · 126.2 KB · 2912 lines
JSON 3f · 1346LJavaScript 3f · 945LTypeScript 1f · 274LMarkdown 2f · 215LPython 1f · 132L
├─
▾
📁
dist
│ ├─
📜
index.js
JavaScript
249L · 22.8 KB
│ └─
📜
index_generated.js
JavaScript
533L · 19.8 KB
├─
▾
📁
src
│ └─
📜
index.ts
TypeScript
274L · 22.4 KB
├─
📝
README.md
Markdown
171L · 4.8 KB
├─
📝
SKILL.md
Markdown
44L · 736 B
├─
🐍
generate_mcp.py
Python
132L · 3.7 KB
├─
📋
package-lock.json
JSON
1309L · 45.6 KB
├─
📋
package.json
JSON
22L · 524 B
├─
📜
test_all.js
JavaScript
163L · 5.7 KB
└─
📋
tsconfig.json
JSON
15L · 338 B
Security positives
代码逻辑清晰,155个工具均为标准股票数据查询,无 RCE、文件写入、敏感路径访问等危险操作
token 仅用于向 API 认证,未被外传或打印到日志
无 Base64 编码、eval、subprocess 等高危操作
无 HTML 注释、提示词注入等可疑内容
无凭证收割、环境变量遍历等恶意行为