安全决策报告

search

SKILL.md声明仅使用web_fetch进行网络搜索,但代码实际通过api.exec()执行本地Python脚本,且硬编码了Tavily API密钥,存在声明-行为不符的阴影功能。

安装决策优先 来源: ClawHub 扫描时间: 2026/4/6
文件 8
IOC 5
越权项 2
发现 5
最直接的威胁证据
01
用户通过SKILL.md了解此技能为网络搜索工具 初始入口 · SKILL.md
02
调用search_web时实际执行api.exec()运行本地脚本 权限提升 · plugin.ts
03
通过api.exec()可执行任意命令,绕过web_fetch的网络隔离 最终危害 · plugin.ts

为什么得出这个结论

2/4 个维度触发
阻止
声明与实际能力

发现 2 项声明之外的能力或越权行为。

复核
隐藏执行与外联

提取到 5 个一般风险产物,需要结合上下文判断。

阻止
攻击链与高危发现

报告包含 3 步攻击链,另有 2 项高危或严重发现。

通过
依赖与供应链卫生

依赖结构存在,但暂未看到明显高危告警。

攻击链

01
用户通过SKILL.md了解此技能为网络搜索工具

初始入口 · SKILL.md:1

02
调用search_web时实际执行api.exec()运行本地脚本

权限提升 · plugin.ts:64

03
通过api.exec()可执行任意命令,绕过web_fetch的网络隔离

最终危害 · plugin.ts:64

风险分是怎么被拉高的

未声明的shell执行 +20

SKILL.md仅声明search_web使用web_fetch,但plugin.ts:64使用api.exec()执行本地Python脚本

硬编码API密钥 +15

providers/tavily.ts:25和plugin.ts:66硬编码了Tavily开发密钥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

硬编码Windows路径 +10

plugin.ts:65存在D:\winopenclaw路径,代码意图不清晰且不可移植

最关键的证据

高危 文档欺骗

未声明的本地脚本执行

SKILL.md声明search_web使用web_fetch进行网络搜索,但plugin.ts:64实际通过api.exec()执行本地Python脚本D:\winopenclaw\workspace\skills\_legacy\tavily\search_tavily_news.py,这是典型的阴影功能

plugin.ts:64
删除api.exec()调用,改用HTTP API直接调用Tavily服务
高危 凭证窃取

硬编码API密钥泄露风险

在providers/tavily.ts:25和plugin.ts:66硬编码了Tavily开发API密钥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,任何能访问代码的人都可以使用此密钥

providers/tavily.ts:25
移除硬编码密钥,仅使用环境变量TAVILY_API_KEY
中危 权限提升

声明权限与实际能力不符

SKILL.md未声明任何shell或filesystem权限,但代码推断出shell:WRITE和filesystem:READ权限,用户无法根据文档评估真实风险

plugin.ts:1
更新SKILL.md明确声明所需权限
中危 供应链

无依赖版本锁定

代码中使用了crypto模块但未在package.json中声明,且无版本锁定,可能引入恶意依赖

cache.ts:20
创建package.json并声明所有依赖及版本
低危 文档欺骗

代码结构混乱

plugin.ts存在重复的searxng和multi分支逻辑,代码质量低下可能导致安全隐患

plugin.ts:108
重构代码消除重复逻辑

声明能力 vs 实际能力

网络访问 通过
声明 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_news.py

可疑产物与外联

中危 外部 URL
http://127.0.0.1:8080

plugin.ts:74

中危 外部 URL
https://www.baidu.com/s?wd=$

plugin.ts:147

中危 外部 URL
https://cn.bing.com/search?q=$

plugin.ts:148

中危 外部 URL
https://www.google.com/search?q=$

plugin.ts:149

中危 外部 URL
https://api.tavily.com/search

providers/tavily.ts:12

依赖与供应链

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

文件构成

8 个文件 · 465 行
TypeScript 5 个文件 · 389 行YAML 1 个文件 · 46 行Markdown 1 个文件 · 25 行JSON 1 个文件 · 5 行
需关注文件 · 3
plugin.ts TypeScript · 201 行
未声明的本地脚本执行 · 声明权限与实际能力不符 · 代码结构混乱 · http://127.0.0.1:8080 · https://www.baidu.com/s?wd=$ · https://cn.bing.com/search?q=$ · https://www.google.com/search?q=$
cache.ts TypeScript · 65 行
无依赖版本锁定
providers/tavily.ts TypeScript · 46 行
硬编码API密钥泄露风险 · https://api.tavily.com/search
其他文件 · skill.yaml · multi.ts · searxng.ts · SKILL.md · _meta.json

安全亮点

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