安全决策报告

wenzi-runse

硬编码有效API密钥暴露于源码中,且用户文本发送至腾讯云函数端点无法验证数据是否真正丢弃,存在数据外泄隐患。

安装决策优先 来源: ClawHub 扫描时间: 21 天前
文件 4
IOC 6
越权项 1
发现 4
最直接的威胁证据
01
从源码提取硬编码API密钥 权限提升 · scripts/runse.py
02
使用提取的密钥进行未授权API调用 最终危害 · scripts/runse.py
03
用户提交敏感文本至第三方端点,存在数据留存风险 最终危害 · scripts/runse.py

为什么得出这个结论

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

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

阻止
隐藏执行与外联

提取到 2 个高危 IOC 或外联信号。

阻止
攻击链与高危发现

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

通过
依赖与供应链卫生

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

攻击链

01
从源码提取硬编码API密钥

权限提升 · scripts/runse.py:21

02
使用提取的密钥进行未授权API调用

最终危害 · scripts/runse.py:40

03
用户提交敏感文本至第三方端点,存在数据留存风险

最终危害 · scripts/runse.py:40

风险分是怎么被拉高的

硬编码API密钥暴露 +15

DEFAULT_API_KEY = sk-16a611a2dbb9270b476c2caf29414e345f587f0548aca4a7 硬编码于 scripts/runse.py:21,任何查看源码者均可获取

用户文本发送至第三方端点 +13

所有处理文本POST至腾讯云函数(tencentscf.com),声称'无状态运行丢弃数据'但无技术验证手段

密钥明文本地存储 +5

用户提供的个人密钥以明文JSON存储于 ~/.workbuddy/wenzi-runse-config.json,文档虽有提示但仍为风险

allowed-tools权限声明合理 +-5

filesystem:WRITE(临时文件)、shell:WRITE(运行脚本) 均在文档中声明,使用场景合理

最关键的证据

中危 供应链

硬编码API密钥于源码中

DEFAULT_API_KEY 硬编码为有效格式的sk-密钥,存储于公开源码中。任何获取此技能的用户可提取该密钥用于其他用途,或该密钥被滥用于API配额消耗。

scripts/runse.py:21
将密钥移至环境变量或加密配置,运行时通过环境注入而非源码存储
中危 数据外泄

文本数据发送至外部端点且无法验证处理

用户提交的文本通过POST请求发送至 https://1257707270-955niawhww.ap-shanghai.tencentscf.com/bailian/chat 。文档声称'云函数无状态运行,处理完立即返回结果并丢弃,不存储原文',但代码中无任何验证机制证明数据实际被丢弃,端点行为完全由第三方控制。

scripts/runse.py:40
1. 明确在文档中声明网络WRITE权限;2. 考虑使用端到端加密或本地处理方案;3. 用户不应提交包含隐私、凭证或商业秘密的文本
低危 凭证窃取

用户密钥明文存储于本地

当用户选择保存个人密钥时,密钥以明文JSON格式写入本地配置文件(~/.workbuddy/wenzi-runse-config.json)。虽然代码设置了0o600权限限制其他用户访问,但文件内容本身未加密。

scripts/runse.py:75
使用系统密钥链(如keyring)替代文件存储,或提供加密存储选项
提示 权限提升

网络请求权限未在allowed-tools中声明

SKILL.md声明 allowed-tools: [Read, Write, Bash],但代码实际进行了网络请求操作。network:WRITE权限未被声明。

SKILL.md:11
更新 allowed-tools 声明包含网络操作

声明能力 vs 实际能力

文件系统 通过
声明 WRITE
→
推断 WRITE
scripts/runse.py:89 创建临时文件写入待处理文本
网络访问 阻止
声明 NONE
→
推断 WRITE
scripts/runse.py:40 urllib.request.urlopen 向腾讯云函数POST数据,SKILL.md未声明网络WRITE权限
命令执行 通过
声明 WRITE
→
推断 WRITE
SKILL.md声明Bash工具,脚本通过python3执行命令

可疑产物与外联

严重 API 密钥
sk-16a611a2dbb9270b476c2caf29414e345f587f0548aca4a7

scripts/runse.py:21

高危 API 密钥
API_KEY = "sk-16a611a2dbb9270b476c2caf29414e345f587f0548aca4a7"

scripts/runse.py:21

中危 外部 URL
https://1257707270-955niawhww.ap-shanghai.tencentscf.com/bailian/chat

scripts/runse.py:19

中危 外部 URL
https://1257707270-955niawhww.ap-shanghai.tencentscf.com/v1/models

scripts/runse.py:20

中危 外部 URL
https://clawhub.ai/user/abcqq1234567

skill-card.md:9

中危 外部 URL
https://clawhub.ai/abcqq1234567/skills/wenzi-runse

skill-card.md:39

依赖与供应链

包名版本来源漏洞备注
urllib stdlib Python内置 否 使用Python标准库,无第三方依赖风险

文件构成

4 个文件 · 478 行
Markdown 3 个文件 · 289 行Python 1 个文件 · 189 行
需关注文件 · 3
SKILL.md Markdown · 115 行
网络请求权限未在allowed-tools中声明
scripts/runse.py Python · 189 行
硬编码API密钥于源码中 · 文本数据发送至外部端点且无法验证处理 · 用户密钥明文存储于本地 · sk-16a611a2dbb9270b476c2caf29414e345f587f0548aca4a7 · API_KEY = "sk-16a611a2dbb9270b476c2caf29414e345f587f0548aca4a7" · https://1257707270-955niawhww.ap-shanghai.tencentscf.com/bailian/chat · https://1257707270-955niawhww.ap-shanghai.tencentscf.com/v1/models
skill-card.md Markdown · 59 行
https://clawhub.ai/user/abcqq1234567 · https://clawhub.ai/abcqq1234567/skills/wenzi-runse
其他文件 · README.md

安全亮点

文档对数据处理有隐私说明(虽无法验证)
脚本逻辑清晰,无明显恶意代码如eval、subprocess注入
未发现凭证收割、环境变量遍历等典型攻击模式
用户密钥保存需要明确确认(--save-key需用户主动触发)
文本长度限制(≥300字)可防止小规模批量处理滥用