T09 · Insecure Skill Coding Practices
- Location
scripts/publish_article.py:34- Finding
API Credential Disclosure Through Unrestricted Base URL in Article Publishing
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill does what it says, but its scripts can send the NiceBox API key to any configured base URL, including non-NiceBox or plaintext HTTP destinations.
Install only if you trust the environment and invocation path. Keep AIBOX_BASE_URL set to the documented NiceBox HTTPS endpoint, avoid passing custom --base-url values, and prefer a narrowly scoped API key because this skill can publish site content and read messages.
scripts/publish_article.py:34API Credential Disclosure Through Unrestricted Base URL in Article Publishing
scripts/list_messages.py:38API Credential Disclosure Through Unrestricted Base URL in Message Retrieval
scripts/site_status.py:38API Credential Disclosure Through Unrestricted Base URL in Site Status Checks
The code clearly matches one part of the description: publishing articles through the NiceBox OpenClaw API. It does not show any functionality for viewing messages or checking site status. Since the declared purpose presents the skill as supporting multiple website-management capabilities, but the actual supplied code chunk only performs article publication, the description is broader than the observed behavior. There is no evidence of unrelated or hidden capabilities beyond publishing, but there is still a description-to-behavior mismatch because the implemented functionality in this chunk is materially narrower than the declared set of supported actions.
The skill declares capabilities that require environment access and outbound network access, but it does not explicitly constrain tool scope with permissions or allowed-tools. In an agent setting, that ambiguity can let the runtime grant broader-than-necessary access, increasing the risk of secret exposure from environment variables and unintended external requests.
This code performs an outbound HTTP GET request and includes the AIBOX_API_KEY in the Authorization header, but there is no confirmation prompt or user-facing disclosure before the request is made. Although the script purpose implies listing remote messages, the file itself does not warn the user that it will contact an external service using credentials from the environment.