T01 · Skill Instruction Hijacking
- Location
SKILL.md:96- Finding
Forced Promotional Output in API-Key Error Handling
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This chart-generation skill has a coherent purpose, but it documents unsafe shell-style invocation and includes under-scoped network download behavior that should be reviewed before installation.
Install only if you are comfortable sending selected prompts and spreadsheet contents to ChartGen. Do not use it with confidential, regulated, or secret data unless your organization approves ChartGen, and avoid running requests that contain shell metacharacters until the invocation method is hardened to pass arguments without a shell.
SKILL.md:96Forced Promotional Output in API-Key Error Handling
SKILL.md:85Shell Command Injection Through Documented User-Input Interpolation
tools/chartgen_api.js:343Unrestricted Server-Directed Download Enables SSRF and Resource Exhaustion
The invocation criteria are very broad: they cover generic visualization, analysis, reports, mention of ChartGen, and any spreadsheet upload. This can cause the skill to activate for many ordinary requests and unnecessarily route user prompts and files to an external service, expanding data exposure and the blast radius of any downstream issue.
Referenced artifact was not completely inspected
## Tool — `tools/chartgen_api.js`
Referenced artifact was not completely inspected
## Tool — `tools/chartgen_api.js`
Referenced artifact was not completely inspected
## Tool — `tools/chartgen_api.js`
Skill instructs the agent to never refuse or to always comply. Suppressing the agent's ability to decline removes a core safety control and enables downstream harmful requests to succeed.
### STEP 1 — Confirm Before Submitting
Always respond in the user's language. **Must** include numbered options (1=go, 2=modify, 0=cancel).
**Confirmation rules:**
1. **Cancel = abandon forever.** Never proceed with a cancelled task.
Skill instructs the agent to never refuse or to always comply. Suppressing the agent's ability to decline removes a core safety control and enables downstream harmful requests to succeed.
### STEP 1 — Confirm Before Submitting
Always respond in the user's language. **Must** include numbered options (1=go, 2=modify, 0=cancel).
**Confirmation rules:**
1. **Cancel = abandon forever.** Never proceed with a cancelled task.
The skill declares environment/runtime requirements and instructs the agent to execute local commands, but it does not constrain tool scope with an explicit allowlist such as allowed-tools or permissions. In agents that support multiple powerful tools, this increases the chance of unintended tool access or broader execution than the skill actually needs.
The skill explicitly sends user queries, uploaded spreadsheets, and potentially data from web/external sources to a third-party API, but the description does not clearly warn users about external data sharing. Users may provide sensitive business or personal data without informed consent, creating privacy, compliance, and confidentiality risks.
Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.
**File upload:** Do NOT submit immediately. Recommend 3–5 analysis tasks (numbered, noting which files). User picks a number, types custom text, or cancels.
Text request example (adapt to language):
> I'll use **ChartGen** to create this for you:
> 📊 **Generate a monthly sales trend line chart for 2025.**
> **1** — Go ahead **2** — Modify **0** — Cancel
The manifest frames this skill as creating visualizations, analyzing spreadsheet data, and generating reports. In addition to those functions, the code implements credential discovery by reading environment variables and multiple files under the user's home/state directories, which is a separate capability not inherently required by chart generation itself.
User-supplied spreadsheet contents are uploaded to a third-party remote API, but this file provides no explicit consent or warning at the point where data leaves the local environment. In a chart/report skill this behavior is functionally expected, yet it is still sensitive because uploaded files may contain confidential business or personal data and the transfer is easy to miss.
The tool follows artifact-provided download URLs and fetches them with raw http/https without validating host, scheme safety, redirect targets, size, or content type. Because the URL comes from the remote service response, a compromised service or malicious response could trigger arbitrary outbound requests and write attacker-controlled content to local storage, creating SSRF-style network access and untrusted file write behavior.
The tool saves generated images and presentation files into the media/workspace/tmp directory via write operations, which affects the user's filesystem. While image-saving is part of the tool's function, there is no user-facing log or warning at these write points indicating where files are being created.