This report was generated in Chinese. Some content may be in Chinese.
Suspicious — Risk Score 45/100
Last scan:1 hr ago Rescan
45 /100
search
Multi-engine web search (SearXNG default, Tavily, Multi-engine)
SKILL.md声明仅使用web_fetch进行网络搜索,但代码实际通过api.exec()执行本地Python脚本,且硬编码了Tavily API密钥,存在声明-行为不符的阴影功能。
Skill Namesearch
Duration40.4s
Enginepi
ClawHub Search v1.0.0 by hollisken
📥 156
ClawHub Verdict Suspicious env_credential_accessllm_suspiciousvt_suspicious
Use with caution
删除未声明的api.exec()调用,使用纯HTTP API调用替代。移除硬编码的API密钥,改用环境变量配置。

Attack Chain 3 steps

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

Findings 5 items

Severity Finding Location
High
未声明的本地脚本执行 Doc Mismatch
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
High
硬编码API密钥泄露风险 Credential Theft
在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
Medium
声明权限与实际能力不符 Priv Escalation
SKILL.md未声明任何shell或filesystem权限,但代码推断出shell:WRITE和filesystem:READ权限,用户无法根据文档评估真实风险
api.registerTool({ name: "search_web", ... })
→ 更新SKILL.md明确声明所需权限
plugin.ts:1
Medium
无依赖版本锁定 Supply Chain
代码中使用了crypto模块但未在package.json中声明,且无版本锁定,可能引入恶意依赖
const hash = require('crypto')
→ 创建package.json并声明所有依赖及版本
cache.ts:20
Low
代码结构混乱 Doc Mismatch
plugin.ts存在重复的searxng和multi分支逻辑,代码质量低下可能导致安全隐患
if (engine === "multi") { ... } if (engine === "searxng") { ... }
→ 重构代码消除重复逻辑
plugin.ts:108
ResourceDeclaredInferredStatusEvidence
Network READ READ ✓ Aligned SKILL.md声明web_fetch用于搜索
Shell NONE WRITE ✗ Violation plugin.ts:64 api.exec()调用本地Python脚本
Filesystem NONE READ ✗ Violation api.exec()执行本地路径D:\winopenclaw\workspace\skills\_legacy\tavily\search_tavily_new…
5 findings
🔗
Medium External URL 外部 URL
http://127.0.0.1:8080
plugin.ts:74
🔗
Medium External URL 外部 URL
https://www.baidu.com/s?wd=$
plugin.ts:147
🔗
Medium External URL 外部 URL
https://cn.bing.com/search?q=$
plugin.ts:148
🔗
Medium External URL 外部 URL
https://www.google.com/search?q=$
plugin.ts:149
🔗
Medium External URL 外部 URL
https://api.tavily.com/search
providers/tavily.ts:12

File Tree

8 files · 14.8 KB · 465 lines
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

Dependencies 1 items

PackageVersionSourceKnown VulnsNotes
crypto built-in nodejs No Node.js内置模块

Security Positives

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