T09 · Insecure Skill Coding Practices
- Location
scripts/boc_forex_cron_runner.py:137- Finding
Notification Recipient and Account Identifiers Stored Without Enforced Access Restrictions
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This skill is a disclosed Bank of China exchange-rate monitor with local state and optional user-configured notifications.
Install this only in a workspace where a recurring forex check is desired. Review the .openclaw-state files, keep notification targets private, and understand that enabling Feishu or another OpenClaw message channel can send alert details outside the local workspace.
scripts/boc_forex_cron_runner.py:137Notification Recipient and Account Identifiers Stored Without Enforced Access Restrictions
Referenced artifact was not completely inspected
- `scripts/boc_forex_check.py`: fetch + parse + compare + trigger generation
The skill instructs the agent to copy and execute Python scripts, read environment variables, write local state files, access the network, and potentially send notifications, but it does not declare any explicit tool scope such as permissions or allowed-tools. This creates an authorization gap where an agent may exercise broader capabilities than reviewers expect, increasing the risk of unintended file access, command execution, or outbound communication if the bundled scripts or future edits are unsafe.
The documentation instructs users to configure external notifications to Feishu or another messaging target but does not clearly warn that monitoring results and trigger metadata may be transmitted to a third-party service. In a monitoring skill, that omission can cause operators to unintentionally send financial monitoring data, account identifiers, or alert context outside the local environment.
subprocess module calls execute external commands. Without careful input validation, this enables command injection.
def run_check():
proc = subprocess.run([sys.executable, str(CHECK_SCRIPT)], cwd=str(ROOT), capture_output=True, text=True)
if proc.returncode not in (0, 10):
err = (proc.stderr or proc.stdout or '').strip()
print('❌ 汇率检查执行失败')
subprocess module calls execute external commands. Without careful input validation, this enables command injection.
cmd = ['openclaw', 'message', 'send', '--channel', channel, '--target', target, '--message', message]
if account_id:
cmd.extend(['--account', account_id])
return subprocess.run(cmd, cwd=str(ROOT), capture_output=True, text=True)
def parse_args():
This markdown file states that the scripts read and write several files under .openclaw-state, but it does not include any caution that running the skill will create and update local state in the target workspace. For markdown files, user-facing documentation should warn about behaviors that affect user data or filesystem state.
No suspicious patterns detected.