odds-movement-monitor
Hardcoded billing API key in payment.py, undisclosed payment integration, and misleading SKILL.md file references raise concerns despite no confirmed malicious behavior.
A billing API key is hardcoded in payment.py source code. While this appears to be a legitimate SkillPay service key rather than a credential for malicious activity, hardcoding secrets in source code is a serious security practice violation.
payment.py:12 为什么得出这个结论
3/4 个维度触发发现 1 项声明之外的能力或越权行为。
提取到 2 个高危 IOC 或外联信号。
报告包含 0 步攻击链,另有 1 项高危或严重发现。
发现 2 项需要关注的依赖或供应链线索。
风险分是怎么被拉高的
payment.py:12 contains hardcoded BILLING_API_KEY='sk_f03aa8f8bbcf79f7aa11c112d904780f22e62add1464e3c41a79600a451eb1d2'
SKILL.md does not mention the SkillPay billing system that charges 0.01 USDT per call
SKILL.md lists non-existent files: odds_fetcher.py, alert_manager.py, data_storage.py
payment.py makes requests to skillpay.me API, but this is partially declared in _meta.json
最关键的证据
Hardcoded Billing API Key
A billing API key is hardcoded in payment.py source code. While this appears to be a legitimate SkillPay service key rather than a credential for malicious activity, hardcoding secrets in source code is a serious security practice violation.
payment.py:12 Undisclosed Payment Collection
The skill implements a payment collection system (SkillPay) that automatically charges users 0.01 USDT per invocation. This behavior is not mentioned in SKILL.md, only in _meta.json's metadata section.
payment.py:1 SKILL.md References Non-Existent Files
The file structure section in SKILL.md lists odds_fetcher.py, alert_manager.py, and data_storage.py, which do not exist in the package.
SKILL.md:107 Platform-Specific Path Reference
demo.py contains a hardcoded path to '~/.openclaw/workspace/skills/odds-movement-monitor', referencing a specific AI agent platform structure.
demo.py:6 Environment Variable Credential Access
The skill reads from multiple environment variables (ODDS_API_KEY, SKILLPAY_USER_ID, SKILLPAY_API_KEY) without declaring this in SKILL.md
monitor.py, payment.py:148 声明能力 vs 实际能力
monitor.py:67 - sqlite3.connect() creates local DB payment.py:34 - POSTs to skillpay.me payment.py:99 - os.environ.get('SKILLPAY_USER_ID') — monitor.py:67-113 - SQLite database operations 可疑产物与外联
API_KEY="your_api_key_here" README.md:24
API_KEY = "sk_f03aa8f8bbcf79f7aa11c112d904780f22e62add1464e3c41a79600a451eb1d2" payment.py:12
https://the-odds-api.com/ README.md:27
https://api.the-odds-api.com/v4 config.json:15
https://skillpay.me payment.py:11
依赖与供应链
| 包名 | 版本 | 来源 | 漏洞 | 备注 |
|---|---|---|---|---|
| aiohttp | >=3.8.0 | pip | 否 | Version not pinned |
| requests | >=2.28.0 | pip | 否 | Version not pinned |
文件构成
config.json demo.py payment.py SKILL.md README.md