Skill Trust Decision

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.

Install decision first Source: Manual upload Scanned: Apr 3, 2026
Files 10
Artifacts 5
Violations 1
Findings 5
Most direct threat evidence
High
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

Why this conclusion was reached

3/4 dimensions flagged
Block
Declared vs actual capability

1 undeclared or violating capabilities were inferred.

Block
Hidden execution and egress

2 high-risk artifacts or egress signals were extracted.

Block
Attack chain and severe findings

The report includes 0 attack-chain steps and 1 severe findings.

Review
Dependencies and supply chain hygiene

2 dependency or supply-chain issues need attention.

What drove the risk score up

Hardcoded API key +18

payment.py:12 contains hardcoded BILLING_API_KEY='sk_f03aa8f8bbcf79f7aa11c112d904780f22e62add1464e3c41a79600a451eb1d2'

Undeclared payment behavior +12

SKILL.md does not mention the SkillPay billing system that charges 0.01 USDT per call

Documentation mismatch +5

SKILL.md lists non-existent files: odds_fetcher.py, alert_manager.py, data_storage.py

External IP network requests +3

payment.py makes requests to skillpay.me API, but this is partially declared in _meta.json

Most important evidence

High

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
Move API key to environment variable or secure config management
Medium

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
Clearly disclose payment behavior in SKILL.md's core capabilities section
Medium

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
Update SKILL.md to match actual file structure or remove file structure section
Low

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
Use relative imports or platform-agnostic path handling
Low

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
Document required environment variables in SKILL.md

Declared capability vs actual capability

Filesystem Pass
Declared NONE
Inferred WRITE
monitor.py:67 - sqlite3.connect() creates local DB
Network Pass
Declared READ
Inferred READ+WRITE
payment.py:34 - POSTs to skillpay.me
Environment Block
Declared NONE
Inferred READ
payment.py:99 - os.environ.get('SKILLPAY_USER_ID')
Shell Pass
Declared NONE
Inferred NONE
Database Pass
Declared NONE
Inferred WRITE
monitor.py:67-113 - SQLite database operations

Suspicious artifacts and egress

High API Key
API_KEY="your_api_key_here"

README.md:24

High API Key
API_KEY = "sk_f03aa8f8bbcf79f7aa11c112d904780f22e62add1464e3c41a79600a451eb1d2"

payment.py:12

Medium External URL
https://the-odds-api.com/

README.md:27

Medium External URL
https://api.the-odds-api.com/v4

config.json:15

Medium External URL
https://skillpay.me

payment.py:11

Dependencies and supply chain

PackageVersionSourceKnown vulnNotes
aiohttp >=3.8.0 pip No Version not pinned
requests >=2.28.0 pip No Version not pinned

File composition

10 files · 1719 lines
Python 5 files · 1432 linesMarkdown 2 files · 217 linesJSON 2 files · 68 linesText 1 files · 2 lines
Files of concern · 5
config.json JSON · 49 lines
https://api.the-odds-api.com/v4
demo.py Python · 223 lines
Platform-Specific Path Reference
payment.py Python · 142 lines
Hardcoded Billing API Key · Undisclosed Payment Collection · API_KEY = "sk_f03aa8f8bbcf79f7aa11c112d904780f22e62add1464e3c41a79600a451eb1d2" · https://skillpay.me
SKILL.md Markdown · 126 lines
SKILL.md References Non-Existent Files
README.md Markdown · 91 lines
API_KEY="your_api_key_here" · https://the-odds-api.com/
Other files · monitor.py · change_detector.py · __init__.py · _meta.json · requirements.txt

Security positives

No shell command execution or subprocess usage found
No base64-encoded payloads or obfuscated code detected
No credential harvesting targeting sensitive paths (~/.ssh, ~/.aws, etc.)
No data exfiltration mechanisms beyond declared network calls
No reverse shell, C2, or reverse engineering behavior
Database operations are local SQLite for legitimate data storage
Network calls are to declared, legitimate APIs (the-odds-api.com, skillpay.me)