T09 · Insecure Skill Coding Practices
- Location
SKILL.md:23- Finding
AtlasCloud API Token Persisted in General Agent Memory
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill does what it claims, but it handles the user's AtlasCloud API token in ways that deserve review before installation.
Review this skill before installing. Use a short-lived or low-privilege AtlasCloud token, avoid letting the agent store it in persistent memory, rotate the token if it may have appeared in command logs, and do not include sensitive private content in image prompts sent to AtlasCloud.
SKILL.md:23AtlasCloud API Token Persisted in General Agent Memory
SKILL.md:32AtlasCloud Bearer Token Exposed Through Process Arguments
The skill instructs the agent to collect and persist the user's AtlasCloud API token in memory without clear consent, retention limits, or masking guidance. Persisting secrets beyond the immediate task increases the risk of unintended disclosure to other skills, future prompts, logs, or memory inspection, making compromise of the external account more likely.
The manifest-style description says to use the skill for phrases like "generate image", "create image", "draw a scene", and even "any request to produce a visual from a text prompt," then adds "Always use this skill" when the user wants to produce an image from descriptive text. These activation conditions are broad and lack exclusion criteria, increasing the chance of unintended invocation for generic conversation about images rather than explicit use of this specific provider/model.
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
const fs = require("fs");
const path = require("path");
const BASE_URL = "https://api.atlascloud.ai/api/v1";
const MODEL = "google/nano-banana-2/text-to-image";
function log(...args) { console.log(...args); }
The script sends params.prompt to https://api.atlascloud.ai as part of the request payload, which transmits user-provided content off-system. The code logs that a request is being submitted, but it does not clearly warn users in the usage text or documentation that their prompt data will be sent to a third-party service.
This code writes last_result.json and last_url.txt to disk, which is a safety-relevant file operation. Although it logs after saving, there is no prior disclosure in the script usage/help text or a confirmation before creating files next to the script.
The file includes headings, warnings, field examples, and error tables partly in Portuguese (for example, Payload Correto, descrição detalhada da imagem, NÃO inclua, and Quando usar esta skill) while other instructions are in English. Without stating that the skill is Portuguese-specific or letting the user choose language, this can create a language/locale mismatch for users expecting a consistent language.
The module header describes the script as generating images from text prompts, but does not mention that it also persists output metadata and URLs to local files. The inline comment at L148 documents that behavior accurately, so this is only a mild intent/documentation divergence at the module level rather than a stronger contradiction.