T09 · Insecure Skill Coding Practices
- Location
config/settings.json:2- Finding
Hardcoded Opik API Credential Exposed in Configuration and Documentation
- Content
View full analysis
Vulnerability Details
File Location:
config/settings.json:2-7; duplicated inSKILL.md:134-148
Vulnerability Type: Hardcoded plaintext credential
Risk Level: HighVulnerable Code
config/settings.json:2-7:json "opik": { "apiKey": "I5xMCUAO14m4EyckFWfqQla3O", "workspace": "default", "project": "openclaw", "apiUrl": "https://www.comet.com/opik/api" }SKILL.md:134-148:json { "opik": { "apiKey": "I5xMCUAO14m4EyckFWfqQla3O", "workspace": "default", "project": "openclaw" }, "discord": { "channel": "discord", "to": "channel:1481801666851373138" }, "reportSchedule": { "hourly": true, "daily": true, "onError": true } }Technical Analysis
An Opik API key is embedded directly in the distributed configuration and repeated in the user documentation. Any person or system able to read the package can recover the credential without needing access to a protected secret store.
The current reporter implementation does not load or transmit this key, so the audit did not identify credential exfiltration by
scripts/reporter.cjs. Nevertheless, distributing a reusable credential in plaintext independently exposes it. Its actual capabilities depend on the server-side permissions assigned to the key.Attack Path
- An attacker obtains the Skill package, repository contents, build artifact, or documentation.
- The attacker reads the plaintext key from
config/settings.jsonorSKILL.md. - The attacker submits the key to the configured Opik service or another valid Opik API endpoint.
- If the key remains active, the attacker performs operations permitted by its assigned workspace and API scopes.
No claim is made that the credential is currently active; revocation status cannot be established through static analysis.
Impact Assessment
If valid, the exposed key may permit unauthorized ...[truncated 378 chars]
- Remediation
View remediation
Remediation Suggestions
- Revoke and rotate the exposed API key immediately.
- Remove the credential from
config/settings.json,SKILL.md, repository history, release archives, logs, and cached artifacts. - Require users to supply their own credential through a protected environment variable or secret manager, for example
OPIK_API_KEY. - Ensure example configuration uses an unmistakable placeholder such as
${OPIK_API_KEY}rather than a realistic credential. - Restrict the replacement key to the minimum workspace and read-only scopes required for reporting.
- Add automated secret scanning to development and release pipelines.
- Review service audit logs for use of the exposed credential and investigate unexpected requests.
