T09 · Insecure Skill Coding Practices
- Location
ring_tool.py:15- Finding
Reusable Ring authentication token stored without restrictive file permissions
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This Ring camera skill appears purpose-aligned, but it handles sensitive home-surveillance credentials and media with weak local protections.
Install only if you are comfortable giving this skill access to your Ring account and storing reusable Ring tokens plus camera snapshots under ~/.openclaw. Use it from a trusted local terminal, protect or delete the token and media files when no longer needed, and prefer a hardened version that hides password/2FA entry, pins dependencies, and sets restrictive permissions on saved credentials and images.
ring_tool.py:15Reusable Ring authentication token stored without restrictive file permissions
ring_tool.py:25Ring password and two-factor authentication code are visibly echoed during entry
SKILL.md:9Security-sensitive Ring dependency is installed without version or integrity pinning
The skill clearly instructs use of python3 commands, writes auth tokens and media files to disk, and depends on external binaries, but it does not declare any explicit tool scope such as shell, file read, or file write permissions. That mismatch can cause the agent platform to grant broader capabilities implicitly or leave users unaware that the skill will execute commands and persist sensitive data locally.
The setup instructions state that an authentication token will be saved to ~/.openclaw/ring_token.json, but the skill does not present this as a user-facing security warning. Ring tokens are sensitive credentials; local storage without prominent warning increases the risk of credential theft from other local users, backups, logs, or misconfigured file permissions.
The skill saves captured images to ~/.openclaw/media/ring/ but does not prominently warn users that potentially sensitive home surveillance images will persist on local storage. Because these images may contain people, interiors, and activity history, silent retention creates privacy and data exposure risk if the host is shared, compromised, or routinely backed up.
The Ring authentication token is written to a predictable file in the user's home directory without any apparent permission hardening, encryption, or informed consent. If another local user or process can read that file, they may gain persistent access to the user's Ring account and associated camera data.
The skill description emphasizes device control and monitoring, but the implementation also performs first-time authentication and stores persistent Ring auth tokens locally. That hidden expansion of scope increases privacy and credential-handling risk because users may not expect the skill to collect credentials and create durable access artifacts on disk.
The tool collects the Ring password interactively in plaintext input, which can expose the credential through terminal echo, logging, shoulder surfing, or shell/session capture. In a security-sensitive context involving home surveillance accounts, insecure password entry materially raises account-compromise risk.
The manifest describes interacting with Ring devices to list devices, capture snapshots, and view events; it does not indicate spawning local executables. While fetching Ring data is expected, launching ffmpeg introduces host-level process execution unrelated to the declared scope and increases capability beyond ordinary API interaction.
Snapshot images from security cameras are saved to local disk without explicit notice, creating a local archive of sensitive home-surveillance media. If the host is shared, backed up broadly, or later compromised, those images can be exposed beyond the user's expectations.
subprocess module calls execute external commands. Without careful input validation, this enables command injection.
if not url:
print("ERROR: Could not get recording URL")
sys.exit(1)
result = subprocess.run(
['ffmpeg', '-y', '-i', url, '-frames:v', '1', '-q:v', '2', str(out_path)],
capture_output=True, text=True
)
The fallback path both executes an external media-processing binary and writes output files to disk without explicit user awareness. In this surveillance context, silent subprocess execution and local artifact creation increase privacy risk and make the behavior less transparent than users would reasonably expect.
No suspicious patterns detected.