search
SKILL.md声明仅使用web_fetch进行网络搜索,但代码实际通过api.exec()执行本地Python脚本,且硬编码了Tavily API密钥,存在声明-行为不符的阴影功能。
为什么得出这个结论
2/4 个维度触发发现 2 项声明之外的能力或越权行为。
提取到 5 个一般风险产物,需要结合上下文判断。
报告包含 3 步攻击链,另有 2 项高危或严重发现。
依赖结构存在,但暂未看到明显高危告警。
攻击链
初始入口 · SKILL.md:1
权限提升 · plugin.ts:64
最终危害 · plugin.ts:64
风险分是怎么被拉高的
SKILL.md仅声明search_web使用web_fetch,但plugin.ts:64使用api.exec()执行本地Python脚本
providers/tavily.ts:25和plugin.ts:66硬编码了Tavily开发密钥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
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密钥泄露风险
在providers/tavily.ts:25和plugin.ts:66硬编码了Tavily开发API密钥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,任何能访问代码的人都可以使用此密钥
providers/tavily.ts:25 声明权限与实际能力不符
SKILL.md未声明任何shell或filesystem权限,但代码推断出shell:WRITE和filesystem:READ权限,用户无法根据文档评估真实风险
plugin.ts:1 无依赖版本锁定
代码中使用了crypto模块但未在package.json中声明,且无版本锁定,可能引入恶意依赖
cache.ts:20 代码结构混乱
plugin.ts存在重复的searxng和multi分支逻辑,代码质量低下可能导致安全隐患
plugin.ts:108 声明能力 vs 实际能力
SKILL.md声明web_fetch用于搜索 plugin.ts:64 api.exec()调用本地Python脚本 api.exec()执行本地路径D:\winopenclaw\workspace\skills\_legacy\tavily\search_tavily_news.py 可疑产物与外联
http://127.0.0.1:8080 plugin.ts:74
https://www.baidu.com/s?wd=$ plugin.ts:147
https://cn.bing.com/search?q=$ plugin.ts:148
https://www.google.com/search?q=$ plugin.ts:149
https://api.tavily.com/search providers/tavily.ts:12
依赖与供应链
| 包名 | 版本 | 来源 | 漏洞 | 备注 |
|---|---|---|---|---|
| crypto | built-in | nodejs | 否 | Node.js内置模块 |
文件构成
plugin.ts cache.ts providers/tavily.ts