T09 · Insecure Skill Coding Practices
- Location
ghostportraitgenerator.js:26- Finding
API Token Exposed Through Command-Line Arguments
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This skill is a straightforward ghost-image generator that sends prompts and a user-provided Neta token to the documented image API, with some install and token-handling cautions.
Before installing, use a token you can revoke, avoid putting sensitive personal or proprietary details in prompts, and prefer a pinned or ClawHub-mediated install path. Treat the documented --token examples cautiously because command-line tokens may be visible in shell history or process logs.
ghostportraitgenerator.js:26API Token Exposed Through Command-Line Arguments
SKILL.md:32Unpinned Package Execution in Installation Instructions
The README describes sending user prompts and optional reference image UUIDs to an external image-generation service but does not clearly warn users that their inputs are transmitted off-platform. In this skill's context, prompts may contain personal, sensitive, or proprietary descriptions, and reference identifiers may link to user assets, so the omission can lead to unintended data disclosure and privacy/compliance issues.
The README instructs users to install/run the skill via npx skills without pinning a specific version, which can cause users to fetch and execute whatever package version is current at the time of install. That creates a supply-chain risk: a compromised publisher account, malicious update, or typo/squatted dependency in the execution chain could result in arbitrary code execution on the user's machine.
The skill declares only a Bash tool and omits any explicit tool scope or network permission boundaries, yet its documented purpose requires calling an external API tokenized by the user. That mismatch can lead to broader-than-expected outbound network use and makes review harder because the skill's effective capabilities are not clearly constrained or disclosed.
The activation guidance is very broad—'when someone asks to generate or create ghost portrait ai generator images'—without constraints on input handling, safety boundaries, or user confirmation. Broad triggers can cause over-activation, increasing the chance the skill runs in contexts where external API calls, token use, or prompt forwarding happen unnecessarily.
The install instruction uses npx skills add blammectrappora/ghost-portrait-generator without a pinned version, so users may fetch whatever package or remote content is current at install time. This creates a supply-chain risk where a later compromised or malicious update could be silently installed and executed.
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
body.inherit_params = { collection_uuid: ref, picture_uuid: ref };
}
const submitRes = await fetch('https://api.talesofai.com/v3/make_image', {
method: 'POST',
headers,
body: JSON.stringify(body),
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
body.inherit_params = { collection_uuid: ref, picture_uuid: ref };
}
const submitRes = await fetch('https://api.talesofai.com/v3/make_image', {
method: 'POST',
headers,
body: JSON.stringify(body),
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
body.inherit_params = { collection_uuid: ref, picture_uuid: ref };
}
const submitRes = await fetch('https://api.talesofai.com/v3/make_image', {
method: 'POST',
headers,
body: JSON.stringify(body),
No suspicious patterns detected.