T09 · Insecure Skill Coding Practices
- Location
scripts/selfie.py:143- Finding
Unrestricted Dereferencing of a Server-Controlled Image URL
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This skill appears to be a legitimate avatar generator, but it needs review because it can guide agents toward public profile changes and has unsafe handling of remote image URLs.
Install only if you are comfortable sending personality/style prompts to SkillBoss and storing generated prompts locally. Do not allow automatic Discord/Twitter/AgentGram avatar changes unless you explicitly approve each change, and avoid running this from sensitive networks until the image URL validation issue is fixed.
scripts/selfie.py:143Unrestricted Dereferencing of a Server-Controlled Image URL
scripts/selfie.py:150Stored HTML Injection Through Unescaped Personality Data
INSTALL.md:4Unpinned Package Execution in Installation Instructions
The heartbeat instructs the agent to update Discord/Twitter/AgentGram avatars, which expands behavior from image generation into modifying external accounts. That creates an unsolicited side effect on third-party services and can change public-facing identity without explicit per-action user approval or clearly declared capability boundaries.
The documented purpose of the skill is self-portrait generation, but the heartbeat adds profile-modification actions on external platforms. This scope expansion is risky because operators may enable the skill expecting only local content generation, while it can instead perform outward-facing account changes with reputational or operational consequences.
The instructions describe updating avatars on external services without warning the user that third-party accounts may be modified. Lack of disclosure and confirmation increases the chance of surprise account changes, accidental misuse of connected credentials, and user trust or branding damage.
The installation guide instructs users to run npx clawhub install agent-selfie without pinning a specific version of the package being executed. This can cause users to fetch and run whatever the latest published clawhub package is at install time, increasing supply-chain risk if the package is updated maliciously or unexpectedly.
The update command npx clawhub update agent-selfie again relies on an unpinned npx package execution path, which may retrieve and run a different package version than originally reviewed. In a skill ecosystem, update paths are especially sensitive because users may trust them and execute them repeatedly over time.
The README instructs users to run npx clawhub install agent-selfie without pinning an exact package version. This can cause execution of whatever version is currently published or resolved at install time, increasing supply-chain risk if the package is compromised, typosquatted, or updated maliciously.
The skill advertises use of environment variables, local file output, and an external API, but it does not declare any explicit tool scope such as permissions or allowed-tools. That mismatch weakens least-privilege controls and can cause users or hosting platforms to grant broader capabilities than they intended, especially for a skill that reads an API key, writes files, and performs network requests.
The documentation does not clearly warn users that personality data, style descriptions, and related prompt content are transmitted to the external SkillBoss API service. Because this skill is specifically designed around identity/avatar generation, users may include sensitive branding, persona, or personal descriptors they would not expect to leave the local environment, creating a privacy and data-handling risk.
The quickstart instruction uses npx clawhub install agent-selfie without pinning an explicit version of the package or runner, which allows users to fetch whatever version is current at install time. If the upstream package, dependency chain, or publishing account is compromised, users could execute unexpected code during installation or use, making this a real supply-chain risk.
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
import urllib.request
from pathlib import Path
API_BASE = "https://api.heybossai.com/v1"
DEFAULT_PERSONALITY = {
"name": "Agent",
The script sends prompts built from user-supplied personality, mood, and theme data to a third-party remote API, but it does not provide an explicit notice or consent step explaining that this content will leave the local environment. In an agent setting, personality fields may contain sensitive identifiers or internal context, so silent transmission can create an unexpected privacy and data-handling risk even if the feature is intended.
The script stores generated images, the full prompt, and an HTML gallery on local disk without clearly warning the user that their content will be persisted. If prompts or personality data contain sensitive or identifying information, this can leave recoverable artifacts on shared machines or in synced directories.
No suspicious patterns detected.