可疑 — 风险评分 45/100
上次扫描:3 小时前 重新扫描
45 /100
search
Multi-engine web search (SearXNG default, Tavily, Multi-engine)
SKILL.md声明仅使用web_fetch进行网络搜索,但代码实际通过api.exec()执行本地Python脚本,且硬编码了Tavily API密钥,存在声明-行为不符的阴影功能。
技能名称search
分析耗时40.4s
引擎pi
ClawHub Search v1.0.0 by hollisken
📥 156
ClawHub 判定 可疑 env_credential_accessllm_suspiciousvt_suspicious
谨慎使用
删除未声明的api.exec()调用,使用纯HTTP API调用替代。移除硬编码的API密钥,改用环境变量配置。

攻击链 3 步

入口 用户通过SKILL.md了解此技能为网络搜索工具
SKILL.md:1
提权 调用search_web时实际执行api.exec()运行本地脚本
plugin.ts:64
影响 通过api.exec()可执行任意命令,绕过web_fetch的网络隔离
plugin.ts:64

安全发现 5 项

严重性 安全发现 位置
高危
未声明的本地脚本执行 文档欺骗
SKILL.md声明search_web使用web_fetch进行网络搜索,但plugin.ts:64实际通过api.exec()执行本地Python脚本D:\winopenclaw\workspace\skills\_legacy\tavily\search_tavily_news.py,这是典型的阴影功能
const result = await api.exec({ command: "python", args: ["D:\\winopenclaw\\workspace\\skills\\_legacy\\tavily\\search_tavily_news.py"] })
→ 删除api.exec()调用,改用HTTP API直接调用Tavily服务
plugin.ts:64
高危
硬编码API密钥泄露风险 凭证窃取
在providers/tavily.ts:25和plugin.ts:66硬编码了Tavily开发API密钥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,任何能访问代码的人都可以使用此密钥
const apiKey = process.env.TAVILY_API_KEY || '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';
→ 移除硬编码密钥,仅使用环境变量TAVILY_API_KEY
providers/tavily.ts:25
中危
声明权限与实际能力不符 权限提升
SKILL.md未声明任何shell或filesystem权限,但代码推断出shell:WRITE和filesystem:READ权限,用户无法根据文档评估真实风险
api.registerTool({ name: "search_web", ... })
→ 更新SKILL.md明确声明所需权限
plugin.ts:1
中危
无依赖版本锁定 供应链
代码中使用了crypto模块但未在package.json中声明,且无版本锁定,可能引入恶意依赖
const hash = require('crypto')
→ 创建package.json并声明所有依赖及版本
cache.ts:20
低危
代码结构混乱 文档欺骗
plugin.ts存在重复的searxng和multi分支逻辑,代码质量低下可能导致安全隐患
if (engine === "multi") { ... } if (engine === "searxng") { ... }
→ 重构代码消除重复逻辑
plugin.ts:108
资源类型声明权限推断权限状态证据
网络访问 READ READ ✓ 一致 SKILL.md声明web_fetch用于搜索
命令执行 NONE WRITE ✗ 越权 plugin.ts:64 api.exec()调用本地Python脚本
文件系统 NONE READ ✗ 越权 api.exec()执行本地路径D:\winopenclaw\workspace\skills\_legacy\tavily\search_tavily_new…
5 项发现
🔗
中危 外部 URL 外部 URL
http://127.0.0.1:8080
plugin.ts:74
🔗
中危 外部 URL 外部 URL
https://www.baidu.com/s?wd=$
plugin.ts:147
🔗
中危 外部 URL 外部 URL
https://cn.bing.com/search?q=$
plugin.ts:148
🔗
中危 外部 URL 外部 URL
https://www.google.com/search?q=$
plugin.ts:149
🔗
中危 外部 URL 外部 URL
https://api.tavily.com/search
providers/tavily.ts:12

目录结构

8 文件 · 14.8 KB · 465 行
TypeScript 5f · 389L YAML 1f · 46L Markdown 1f · 25L JSON 1f · 5L
├─ 📁 providers
│ ├─ 📜 multi.ts TypeScript 39L · 1.3 KB
│ ├─ 📜 searxng.ts TypeScript 38L · 1.1 KB
│ └─ 📜 tavily.ts TypeScript 46L · 1.3 KB
├─ 📋 _meta.json JSON 5L · 125 B
├─ 📜 cache.ts TypeScript 65L · 1.4 KB
├─ 📜 plugin.ts TypeScript 201L · 7.2 KB
├─ 📝 SKILL.md Markdown 25L · 983 B
└─ 📋 skill.yaml YAML 46L · 1.5 KB

依赖分析 1 项

包名版本来源已知漏洞备注
crypto built-in nodejs Node.js内置模块

安全亮点

✓ 使用fetch进行网络请求,行为可追踪
✓ 代码中有中文注释便于理解意图
✓ 包含SearchCache实现,有基本的性能优化意识
✓ 使用环境变量SEARXNG_URL配置,无硬编码服务器地址