whale-alert-monitor
Hardcoded billing API key exposed in source code; payment.py makes undeclared external network calls to skillpay.me that are not mentioned in SKILL.md; all scripts use mock/simulated data with no real blockchain APIs called.
BILLING_API_KEY is defined as a string literal on line 12 of payment.py and transmitted in the X-API-Key header to https://skillpay.me. If this file is exposed (e.g., through skill publication, debugging, or a supply-chain attack), the key can be stolen and abused for billing fraud. This key is not pinned to an environment variable as best practice requires.
payment.py:12 为什么得出这个结论
3/4 个维度触发发现 3 项声明之外的能力或越权行为。
提取到 1 个高危 IOC 或外联信号。
报告包含 0 步攻击链,另有 1 项高危或严重发现。
发现 2 项需要关注的依赖或供应链线索。
风险分是怎么被拉高的
BILLING_API_KEY = 'sk_f03aa8f8...' is hardcoded in payment.py:12 and sent to external skillpay.me
payment.py sends requests to https://skillpay.me/api/v1/billing/* — not declared in SKILL.md capabilities
SKILL.md describes functionality but buries the 0.01 USDT/call charge in an inline comment without declaring network:WRITE or environment access
All scripts generate random simulated blockchain data; Etherscan/Alchemy keys in env vars are never used, reducing actual risk
最关键的证据
Hardcoded billing API key in payment.py
BILLING_API_KEY is defined as a string literal on line 12 of payment.py and transmitted in the X-API-Key header to https://skillpay.me. If this file is exposed (e.g., through skill publication, debugging, or a supply-chain attack), the key can be stolen and abused for billing fraud. This key is not pinned to an environment variable as best practice requires.
payment.py:12 Undeclared external network calls in payment.py
SKILL.md declares network usage only for Telegram/Discord notifications. However, payment.py silently makes HTTP GET/POST requests to https://skillpay.me during verify_payment() and charge_user(). The skill payload (payment.py) is included in the published skill but its external network behavior is not documented.
payment.py:26 Silent payment enforcement on skill invocation
require_payment() in payment.py raises SystemExit if balance is insufficient. This means the skill refuses to function without payment, but this behavior is only visible as an inline comment in SKILL.md, not as a declared dependency or pre-condition.
payment.py:88 Environment variable access not declared
Multiple scripts read API keys and tokens from os.environ (ETHERSCAN_API_KEY, TELEGRAM_BOT_TOKEN, TELEGRAM_CHAT_ID, DISCORD_WEBHOOK_URL) but SKILL.md does not declare environment:READ as a capability.
whale_tracker.py:17 File write operations not declared
Scripts write to local files (whale_profile.json, alert_history.json, whale_monitor.log) but filesystem:WRITE is not declared in SKILL.md.
whale_tracker.py:231 All scripts use mock/simulated data
No script makes actual Etherscan, Alchemy, or Moralis API calls. All data is generated via random number generation. The ETHERSCAN_API_KEY read from environment is never used. This reduces the real-world risk but raises questions about the skill's utility.
whale_tracker.py:67 声明能力 vs 实际能力
payment.py:15 — requests.post to skillpay.me with API key whale_tracker.py:17 — os.getenv('ETHERSCAN_API_KEY'); alert_manager.py:105 — os.getenv('TELEGRAM_BOT_TOKEN') whale_tracker.py:231 — open(filename,'w'); monitor_daemon.py:44 — logging.FileHandler No subprocess or shell execution found 可疑产物与外联
API_KEY = "sk_f03aa8f8bbcf79f7aa11c112d904780f22e62add1464e3c41a79600a451eb1d2" payment.py:12
0x742d35Cc6634C0532925a3b8D4E6D3b6e8d3e8D3 SKILL.md:78
0x3f5CE5FBFe3E9af3971dD833D26bA9b5C936f0bE SKILL.md:96
0x71660c4005BA85c37ccec55d0C4493E66Fe775d3 SKILL.md:101
https://skillpay.me payment.py:11
https://api.etherscan.io/api references/api-configuration.md:8
https://eth-mainnet.g.alchemy.com/v2/ references/api-configuration.md:54
https://deep-index.moralis.io/api/v2/ references/api-configuration.md:89
https://eth-mainnet.g.alchemy.com/v2/KEY references/api-configuration.md:112
https://eth-mainnet.g.alchemy.com/v2/$ references/api-configuration.md:137
https://etherscan.io references/api-configuration.md:138
https://bsc-dataseed.binance.org references/api-configuration.md:142
依赖与供应链
| 包名 | 版本 | 来源 | 漏洞 | 备注 |
|---|---|---|---|---|
| requests | * | pip | 否 | Version not pinned; used for billing and notification HTTP calls |
| pyyaml | * | pip | 否 | Used for config loading in monitor_daemon.py |
文件构成
scripts/alert_manager.py SKILL.md payment.py references/api-configuration.md references/wallet-labels.md