安全决策报告

odds-movement-monitor-v2026

技能功能本身为合法的赔率监控系统,但存在多处文档-行为不符:SKILL.md未声明计费系统、未声明外部网络通信、未声明环境变量读取;payment.py中硬编码计费API密钥构成供应链风险。虽无直接恶意行为证据,但阴影功能特征明显。

安装决策优先 来源: ClawHub 扫描时间: 13 天前
文件 11
IOC 6
越权项 4
发现 5
最直接的威胁证据

为什么得出这个结论

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

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

阻止
隐藏执行与外联

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

通过
攻击链与高危发现

没有形成明确的恶意路径。

复核
依赖与供应链卫生

发现 2 项需要关注的依赖或供应链线索。

风险分是怎么被拉高的

文档欺骗 - 计费系统未声明 +15

SKILL.md未提及SkillPay计费逻辑,但payment.py在verify_payment中读取SKILLPAY_USER_ID并扣费

硬编码凭证 +10

payment.py:12 硬编码BILLING_API_KEY='sk_f03aa8f8...', 未使用环境变量注入

未声明的环境变量读取 +5

payment.py:59 读取SKILLPAY_USER_ID,payment.py:16读取ODDS_API_KEY,均未在SKILL.md声明

未声明的外部网络通信 +5

SKILL.md未声明连接skillpay.me,技能卡片虽提及但SKILL.md主文档缺失

最关键的证据

中危 文档欺骗

计费系统未在SKILL.md中声明

payment.py实现了完整的SkillPay计费系统:查询余额、扣费、生成充值链接,但SKILL.md对此只字未提。verify_payment()函数读取环境变量SKILLPAY_USER_ID并对用户扣费,属于影响用户财务的敏感操作。

SKILL.md:1
在SKILL.md核心能力章节明确声明计费逻辑,说明每次调用的费用结构和收费机制
中危 供应链

硬编码计费API密钥

payment.py:12 硬编码BILLING_API_KEY='sk_f03aa8f8bbcf79f7aa11c112d904780f22e62add1464e3c41a79600a451eb1d2'。如代码仓库公开或AI Agent将该凭证输出给用户,将导致计费密钥泄露。

payment.py:12
使用环境变量ODDS_API_KEY模式,从os.environ.get('SKILLPAY_API_KEY')读取,文档说明由宿主机密管理器注入
中危 文档欺骗

外部服务通信未完整声明

SKILL.md完全未提及连接skillpay.me和api.the-odds-api.com。仅在skill-card.md(非主文档)中有少量外部URL提及。payment.py和monitor.py中的requests/aiohttp外部调用无文档背书。

SKILL.md:1
在SKILL.md明确列出所有外部服务依赖(技能卡片中已列出skillpay.me和the-odds-api.com,应同步到SKILL.md)
中危 权限提升

计费操作可无用户确认直接扣费

require_payment()函数在技能启动时自动执行,先charge_user再决定是否抛出异常。用户余额不足时显示充值链接。无用户授权确认机制。

payment.py:74
在技能执行前增加显式用户确认流程,或要求平台层提供可信的支付绑定机制
低危 供应链

第三方依赖无版本锁定

requirements.txt中aiohttp>=3.8.0和requests>=2.28.0均为浮动版本。aiohttp历史上存在多个安全漏洞(CVE-2024-30281等),无版本锁定增加了供应链攻击面。

requirements.txt:1
锁定到具体版本,如aiohttp==3.9.0、requests==2.31.0,并定期更新

声明能力 vs 实际能力

文件系统 阻止
声明 NONE
→
推断 WRITE
monitor.py:57-58 sqlite3.connect创建本地数据库odds_data.db
网络访问 阻止
声明 NONE
→
推断 WRITE
payment.py:22-69 requests.post向skillpay.me发送POST请求含user_id+skill_id+amount
环境变量 阻止
声明 NONE
→
推断 READ
payment.py:59 os.environ.get('SKILLPAY_USER_ID');monitor.py:24 os.getenv('ODDS_API_KEY')
数据库 阻止
声明 NONE
→
推断 WRITE
monitor.py:57-117 sqlite3创建并写入odds_data.db

可疑产物与外联

高危 API 密钥
API_KEY = "sk_f03aa8f8bbcf79f7aa11c112d904780f22e62add1464e3c41a79600a451eb1d2"

payment.py:12

中危 外部 URL
https://api.the-odds-api.com/v4

config.json:15

中危 外部 URL
https://the-odds-api.com/

monitor.py:527

中危 外部 URL
https://skillpay.me

payment.py:11

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

skill-card.md:9

中危 外部 URL
https://clawhub.ai/shenmeng/skills/shenmeng-odds-movement-monitor

skill-card.md:39

依赖与供应链

包名版本来源漏洞备注
aiohttp >=3.8.0 pip 是 无版本锁定;aiohttp历史CVE(CVE-2024-30281等)
requests >=2.28.0 pip 否 无版本锁定

文件构成

11 个文件 · 1670 行
Python 5 个文件 · 1432 行Markdown 3 个文件 · 182 行JSON 2 个文件 · 54 行Text 1 个文件 · 2 行
需关注文件 · 6
config.json JSON · 49 行
https://api.the-odds-api.com/v4
monitor.py Python · 597 行
https://the-odds-api.com/
payment.py Python · 142 行
硬编码计费API密钥 · 计费操作可无用户确认直接扣费 · API_KEY = "sk_f03aa8f8bbcf79f7aa11c112d904780f22e62add1464e3c41a79600a451eb1d2" · https://skillpay.me
skill-card.md Markdown · 60 行
https://clawhub.ai/user/shenmeng · https://clawhub.ai/shenmeng/skills/shenmeng-odds-movement-monitor
SKILL.md Markdown · 42 行
计费系统未在SKILL.md中声明 · 外部服务通信未完整声明
requirements.txt Text · 2 行
第三方依赖无版本锁定
其他文件 · change_detector.py · demo.py · README.md · __init__.py · _meta.json

安全亮点

代码结构清晰,无混淆、base64编码或反分析技术
无凭证收割逻辑(不遍历os.environ寻找API密钥关键字)
无未声明的shell执行(无subprocess/os.system)
无数据外泄行为(网络请求均为主功能所必需)
无持久化后门(无crontab、init脚本修改)
数据库操作仅用于本地存储赔率数据,路径正常
硬编码API密钥为计费系统所需,非数据窃取密钥