T09 · Insecure Skill Coding Practices
- Location
references/apikey-fetch.md:18- Finding
Plaintext API Key Storage in OpenClaw Configuration
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This is a coherent Baidu search skill, but users should protect the Baidu API key they configure for it.
Install only if you are comfortable sending your search queries to Baidu and using a Baidu API key. Store the key carefully, keep the OpenClaw config private, avoid sharing logs or screenshots that reveal it, and rotate the key if it may have been exposed.
references/apikey-fetch.md:18Plaintext API Key Storage in OpenClaw Configuration
The skill declares that it requires an environment variable and inherently performs outbound network access, but it does not explicitly declare a tool scope such as permissions or allowed-tools. This creates a trust and review gap: operators cannot easily constrain what the skill is allowed to access, and a networked skill handling API credentials is more dangerous when its execution boundaries are implicit rather than explicit.
Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.
Visit: **https://console.bce.baidu.com/ai-search/qianfan/ais/console/apiKey**
- Log in to your Baidu Cloud account
- Create an application or view existing API keys
- Copy your **API Key** (only API Key is needed)
### 2. Configure OpenClaw
The guide instructs users to store a live API key in a local JSON config file but gives no warning about credential sensitivity, file permissions, secret rotation, or avoiding accidental disclosure through backups, screenshots, logs, or version control. While this is common operational guidance, it increases the risk of credential exposure if the config file is broadly readable or mishandled.
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
}
# 使用POST方法发送JSON数据
response = requests.post(url, json=requestBody, headers=headers)
response.raise_for_status()
results = response.json()
if "code" in results:
This code sends the user-provided query content in requestBody to Baidu's external search endpoint via requests.post. While the network call is central to the script's purpose, the file itself provides no clear user-facing disclosure that input data will be transmitted to a third-party service.
No suspicious patterns detected.