T08 · Insecure Dependencies
- Location
setup_volcengine.sh:41- Finding
Unpinned Python Dependencies Permit Supply-Chain Code Execution
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This looks like a real AI API balance checker, but it deserves review because it can use local API credentials automatically and its install steps rely on mutable, unpinned external code.
Review this before installing if you keep API keys in OpenClaw config. Prefer the reviewed ClawHub install path over cloning a mutable GitHub branch, use least-privilege provider credentials where available, and be aware that invoking the skill may send authenticated requests to the configured providers and print account balances into the current chat.
setup_volcengine.sh:41Unpinned Python Dependencies Permit Supply-Chain Code Execution
README.md:39Installation Instructions Retrieve Skill Code from an Unpinned Repository Branch
The skill description presents itself as a generic balance checker, but the visible setup and resource access are focused on Volcengine installation and AK/SK credential use. This creates a trust and transparency problem: users may not realize that the skill requires cloud access keys and setup steps beyond a simple balance query, increasing the risk of over-privileged credential exposure.
The skill description presents itself as a generic balance checker, but the visible setup and resource access are focused on Volcengine installation and AK/SK credential use. This creates a trust and transparency problem: users may not realize that the skill requires cloud access keys and setup steps beyond a simple balance query, increasing the risk of over-privileged credential exposure.
The documented trigger phrases are very broad everyday-language expressions like '查余额', '余额多少', and '还有多少额度', which can easily appear in normal conversation and unintentionally auto-trigger the skill. In this skill’s context, accidental activation could cause unsolicited external API calls and exposure of sensitive account balance information to the current chat/session, making it a genuine security and privacy concern even without malicious code.
The skill advertises access to environment variables, file reads, and shell execution but does not declare any explicit tool scope or permissions boundary. In an agent environment, this increases the blast radius of accidental or unauthorized actions, especially because the skill handles API credentials and instructs users to run shell commands during setup.
The trigger phrases are broad everyday expressions such as '查余额' and '余额多少', which can cause the skill to auto-run in contexts the user did not intend. Because the skill may access credentials, perform network requests, or invoke setup-related behavior, misfires can lead to unnecessary exposure of sensitive account information or unintended command execution paths.
The listed keywords are ambiguous and lack scoping or exclusion conditions, making accidental activation more likely. In the context of a skill that reads environment-provided API keys and may execute supporting scripts, ambiguous triggering materially raises the chance of unintended sensitive operations.
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
if [ -n "$DEEPSEEK_API_KEY" ]; then
echo ""
echo "💰 DeepSeek 余额"
DEEPSEEK_RESULT=$(curl -s "https://api.deepseek.com/user/balance" \
-H "Authorization: Bearer $DEEPSEEK_API_KEY" \
-H "Content-Type: application/json" 2>/dev/null)
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
if [ -n "$MOONSHOT_API_KEY" ]; then
echo ""
echo "🌙 Moonshot/Kimi 余额"
MOONSHOT_RESULT=$(curl -s "https://api.moonshot.cn/v1/users/me/balance" \
-H "Authorization: Bearer $MOONSHOT_API_KEY" 2>/dev/null)
if echo "$MOONSHOT_RESULT" | grep -q "available_balance"; then
The manifest says the skill checks balances for multiple AI API providers including DeepSeek, Moonshot/Kimi, and Volcengine, but this file only retrieves Volcengine credentials and calls the Volcengine billing SDK. That is a direct scope mismatch between the advertised capability and the actual implemented behavior in this skill file.
The user-facing instructions, examples, and trigger phrases are presented entirely in Chinese, which can amount to a language policy issue if the skill implicitly assumes a specific language without user opt-in. There is no note that the skill is Chinese-only, region-specific, or that alternative languages are supported.
This shell script performs outbound HTTP requests using bearer credentials from environment variables to retrieve account balance information, but it does not include any user-facing warning that it will contact external provider APIs and transmit authentication data. Although the operation is central to the script's purpose, the code provides only progress messages and no explicit disclosure about network access or credential use.
The script checks for sensitive access key and secret key environment variables, activates a virtual environment, and runs a Python helper that will use those credentials, but there is no explicit disclosure to the user that these secrets are being consumed for an authenticated external balance check. The visible messages mention querying balance and dependencies, but not sensitive credential usage or subprocess execution.
This file contains user-facing natural language in Chinese in the module docstring and throughout CLI output, but does not provide an opt-in, alternative locale, or justification for enforcing a single language. That can violate language/locale policy when users are not explicitly limited to a Chinese-language environment.
Dynamic getattr() with a non-literal attribute name can access arbitrary object attributes, potentially bypassing access controls.
def get_val(obj, key):
if isinstance(obj, dict):
return obj.get(key)
return getattr(obj, key, None)
if quiet:
# 简洁输出,适合嵌入到 balance-checker
Nearly all user-facing messages in the script are written only in Chinese, including installation guidance and credential setup instructions. This can violate language/locale policy expectations when a skill forces a specific language without user opt-in or documented regional justification.
No suspicious patterns detected.