T09 · Insecure Skill Coding Practices
- Location
kawaiiartgenerator.js:8- 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 does what it claims, but users should treat prompts and the Neta API token as shared with the external image service and avoid exposing the token in shell history.
Install only from a source you trust, prefer a pinned or verified installer when available, and run the script with a token that has limited scope or quota. Do not put private personal data, secrets, or confidential material in prompts or reference identifiers, because they are sent to the external image-generation provider. Be aware that the documented --token flag can leave the token visible in shell history, process listings, or logs.
kawaiiartgenerator.js:8API Token Exposed Through Command-Line Arguments
SKILL.md:31Unpinned Package Execution Through npx Installation Instructions
The README instructs users to run npx skills add blammectrappora/kawaii-art-generator without pinning a specific version or immutable source. This allows a future compromised or maliciously updated package or installer path to be fetched and executed on a user's machine, turning installation into a supply-chain execution risk.
The install instruction uses npx skills add blammectrappora/kawaii-art-generator without pinning a specific package/version, so users may execute whatever package version is current at install time. This creates a supply-chain risk: if the referenced package, dependency chain, or publisher account is compromised, arbitrary code could run on the user's machine during installation.
This code sends user-supplied prompts and an authentication token to a third-party external API endpoint. External transmission is expected for an image-generation skill, but it still creates a real data exposure risk because any prompt content, reference UUIDs, and bearer-style token are disclosed to an outside service with no minimization, validation, or disclosure controls.
}
console.error('Generating kawaii art...');
const makeRes = await request('POST', 'https://api.talesofai.com/v3/make_image', makeBody);
let taskUuid;
if (typeof makeRes === 'string') {
The polling request repeatedly transmits the task UUID to the same third-party service, confirming ongoing dependence on an external system and extending metadata exposure. While less sensitive than the initial prompt submission, it still leaks workflow identifiers and creates a privacy and service-trust risk if the remote provider is compromised or logs requests aggressively.
const maxAttempts = 90;
for (let i = 0; i < maxAttempts; i++) {
await sleep(2000);
const pollRes = await request('GET', `https://api.talesofai.com/v1/artifact/task/${taskUuid}`, null);
const status = pollRes && pollRes.task_status;
if (status === 'PENDING' || status === 'MODERATION') {
The "When to use" section says to use the skill when someone asks to "generate or create kawaii art generator images," but it does not define specific trigger phrases, constraints, or negative examples. This could lead to over-invocation for loosely related requests about cute art or image creation.
No suspicious patterns detected.