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 Why this conclusion was reached
3/4 dimensions flagged1 undeclared or violating capabilities were inferred.
2 high-risk artifacts or egress signals were extracted.
The report includes 0 attack-chain steps and 1 severe findings.
2 dependency or supply-chain issues need attention.
What drove the risk score up
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
Most important evidence
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 Declared capability vs actual capability
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 Suspicious artifacts and egress
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
Dependencies and supply chain
| Package | Version | Source | Known vuln | Notes |
|---|---|---|---|---|
| aiohttp | >=3.8.0 | pip | No | Version not pinned |
| requests | >=2.28.0 | pip | No | Version not pinned |
File composition
config.json demo.py payment.py SKILL.md README.md