安全决策报告
odds-movement-monitor
技能功能正常但存在硬编码第三方API密钥的严重安全问题,可能导致凭证滥用风险
最直接的威胁证据
01
用户安装并激活技能 初始入口 · SKILL.md
02
代码中硬编码的API密钥被暴露 权限提升 · payment.py
03
攻击者利用暴露的密钥冒充作者扣费或消耗配额 最终危害 · payment.py
为什么得出这个结论
3/4 个维度触发 阻止
声明与实际能力
发现 2 项声明之外的能力或越权行为。
阻止
隐藏执行与外联
提取到 1 个高危 IOC 或外联信号。
阻止
攻击链与高危发现
报告包含 3 步攻击链,另有 1 项高危或严重发现。
复核
依赖与供应链卫生
发现 2 项需要关注的依赖或供应链线索。
攻击链
01
用户安装并激活技能
初始入口 · SKILL.md:1
02
代码中硬编码的API密钥被暴露
权限提升 · payment.py:12
03
攻击者利用暴露的密钥冒充作者扣费或消耗配额
最终危害 · payment.py:43
风险分是怎么被拉高的
硬编码第三方API密钥 +35
payment.py:12 硬编码了SkillPay API密钥,任何代码访问者都可使用
文档声明不完整 +15
SKILL.md未说明API密钥配置方式,用户无法知晓是否需要自备密钥
本地数据库写入 +5
monitor.py创建本地SQLite数据库odds_data.db,文档未声明
外部网络请求 +5
访问skillpay.me和the-odds-api.com,属于功能必要但未充分说明
最关键的证据
高危 凭证窃取
硬编码第三方API密钥
payment.py第12行硬编码了SkillPay的API密钥'sk_f03aa8f8bbcf79f7aa11c112d904780f22e62add1464e3c41a79600a451eb1d2'。这意味着:1)密钥对所有代码访问者可见 2)可能被滥用于冒充技能作者进行扣费 3)消耗技能作者的API配额
payment.py:12 将API密钥改为从环境变量读取:os.environ.get('SKILLPAY_API_KEY'),并在文档中说明需要用户配置
中危 文档欺骗
未声明本地数据存储
monitor.py会创建本地SQLite数据库odds_data.db存储赔率历史,但SKILL.md未提及此功能
monitor.py:35 在SKILL.md中添加数据存储相关说明
中危 文档欺骗
未声明的环境变量依赖
代码依赖SKILLPAY_USER_ID和ODDS_API_KEY环境变量,但SKILL.md未说明
payment.py:24 在SKILL.md中添加所需环境变量说明
低危 供应链
依赖包版本未锁定
requirements.txt中aiohttp和requests使用>=约束,存在供应链风险
requirements.txt:1 锁定具体版本以确保可复现性和安全性
声明能力 vs 实际能力
文件系统 阻止
声明 NONE
→ 推断 WRITE
monitor.py:35 创建本地SQLite数据库odds_data.db 网络访问 通过
声明 READ
→ 推断 READ+WRITE
payment.py:43 向skillpay.me发送POST请求扣费 命令执行 通过
声明 NONE
→ 推断 NONE
— 环境变量 阻止
声明 NONE
→ 推断 READ
payment.py:11 读取SKILLPAY_USER_ID, payment.py:24 读取ODDS_API_KEY 可疑产物与外联
高危 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
依赖与供应链
| 包名 | 版本 | 来源 | 漏洞 | 备注 |
|---|---|---|---|---|
| aiohttp | >=3.8.0 | pip | 否 | 无版本锁定 |
| requests | >=2.28.0 | pip | 否 | 无版本锁定 |
文件构成
10 个文件 · 1699 行
Python 5 个文件 · 1432 行Markdown 2 个文件 · 194 行JSON 2 个文件 · 71 行Text 1 个文件 · 2 行
需关注文件 · 4
config.json https://api.the-odds-api.com/v4
monitor.py 未声明本地数据存储 · https://the-odds-api.com/
payment.py 硬编码第三方API密钥 · 未声明的环境变量依赖 · API_KEY = "sk_f03aa8f8bbcf79f7aa11c112d904780f22e62add1464e3c41a79600a451eb1d2" · https://skillpay.me
requirements.txt 依赖包版本未锁定
其他文件 · change_detector.py · demo.py · README.md · SKILL.md · __init__.py · _meta.json
安全亮点
代码结构清晰,模块化设计良好
使用dataclass进行数据结构化
具备异步支持(aiohttp)
有完整的预警和报告功能
使用SQLite存储,无外部数据库依赖