self-evolution-engine
Hardcoded billing API key with no declared credential handling, plus undocumented external data transmission to skillpay.me that is only minimally mentioned in SKILL.md — a significant doc-to-code mismatch.
payment.py contains a plaintext billing API key 'sk_f03aa8f8bbcf79f7aa11c112d904780f22e62add1464e3c41a79600a451eb1d2' hardcoded at line 12. The _meta.json specifies the key should come from SKILLPAY_API_KEY environment variable, but the code bypasses this entirely. Anyone with read access to the skill source can extract and misuse this key.
payment.py:12 Why this conclusion was reached
2/4 dimensions flaggedDeclared resources and inferred behavior are broadly aligned.
1 high-risk artifacts or egress signals were extracted.
The report includes 3 attack-chain steps and 3 severe findings.
5 dependency or supply-chain issues need attention.
Attack Chain
Entry · payment.py:12
Escalation · payment.py:12
Impact · payment.py:38
What drove the risk score up
payment.py line 12 contains a plaintext API key 'sk_f03aa...1d2' used in all X-API-Key headers. No env var fallback. Should be SKILLPAY_API_KEY from environment.
SKILL.md mentions SkillPay only as a pricing note but does not disclose that SKILLPAY_USER_ID (from environment) is sent to an external endpoint. Data exfiltration to external host skillpay.me is not documented.
evolution_generator.py and version_manager.py hardcode '/root/.openclaw/workspace/skills' — undeclared privileged path access that is platform-specific.
requirements.txt contains pandas>=2.0.0, numpy>=1.24.0, psutil>=5.9.0, matplotlib>=3.7.0 without upper bounds or exact versions.
Most important evidence
Hardcoded Billing API Key in Source Code
payment.py contains a plaintext billing API key 'sk_f03aa8f8bbcf79f7aa11c112d904780f22e62add1464e3c41a79600a451eb1d2' hardcoded at line 12. The _meta.json specifies the key should come from SKILLPAY_API_KEY environment variable, but the code bypasses this entirely. Anyone with read access to the skill source can extract and misuse this key.
payment.py:12 Undeclared External Data Transmission
The skill transmits SKILLPAY_USER_ID (read from environment) and the billing API key to https://skillpay.me for payment verification. SKILL.md only mentions '本 Skill 已接入 SkillPay 付费系统' and a price tag. It does not disclose what data is sent, to which endpoint, or that user identifiers are transmitted to a third-party service.
payment.py:76 SKILL.md Does Not Match Implementation
SKILL.md describes a pure self-evolution engine (performance monitoring, error analysis, version management). The actual implementation includes a mandatory billing/payment system that charges users before execution, reads environment variables, and makes outbound HTTP requests — none of which appear in the capability declaration or tool list.
SKILL.md:1 Hardcoded Privileged Workspace Path
Both evolution_generator.py and version_manager.py hardcode /root/.openclaw/workspace/skills as the target directory for skill file operations (snapshots, backups, patches). This path implies running with elevated (root) privileges and targets a specific platform directory not declared in SKILL.md.
scripts/evolution_generator.py:22 Unpinned Dependencies with Lower Bounds Only
requirements.txt uses lower-bound version specifiers (pandas>=2.0.0, numpy>=1.24.0, etc.) without upper bounds or exact pins. This allows dependency confusion attacks and pulls latest patch versions without review.
requirements.txt:1 Declared capability vs actual capability
payment.py:20-30 makes requests.post() to https://skillpay.me with API key and user ID payment.py:76 reads os.environ.get('SKILLPAY_USER_ID') evolution_generator.py:22, version_manager.py:18 hardcode /root/.openclaw/workspace/skills path for writes Suspicious artifacts and egress
API_KEY = "sk_f03aa8f8bbcf79f7aa11c112d904780f22e62add1464e3c41a79600a451eb1d2" payment.py:12
https://skillpay.me payment.py:11
Dependencies and supply chain
| Package | Version | Source | Known vuln | Notes |
|---|---|---|---|---|
| pandas | >=2.0.0 | pip | No | Version not pinned, lower-bound only |
| numpy | >=1.24.0 | pip | No | Version not pinned |
| psutil | >=5.9.0 | pip | No | Version not pinned |
| matplotlib | >=3.7.0 | pip | No | Version not pinned |
| python-dateutil | >=2.8.0 | pip | No | Version not pinned |
| requests | not declared | pip | No | Used in payment.py but not listed in requirements.txt |
File composition
scripts/evolution_generator.py payment.py SKILL.md requirements.txt