T08 · Insecure Dependencies
- Location
SKILL.md:31- Finding
Unpinned Remote Packages and Repository Content Used During Installation
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This skill appears to do what it says, but users should handle the Neta API token carefully and understand that prompts are sent to an external image API.
Install only from a source you trust, avoid running the install command with elevated privileges, and prefer a safer token-handling workflow than pasting a live API token into command arguments or shared logs. Expect your prompt and optional reference UUID to be sent to the Neta/Tales of AI image service.
SKILL.md:31Unpinned Remote Packages and Repository Content Used During Installation
liminalspacegenerator.js:20API Token Accepted Through Process Command-Line Arguments
npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.
The README repeatedly instructs users to pass the API token via --token on the command line, which can expose secrets through shell history, process listings, audit logs, or CI job output. This is more concerning in this skill because the token is required for every invocation, increasing the likelihood that users will normalize unsafe secret-handling practices and leak a live API credential.
The skill declares only tools: Bash while its documented behavior clearly requires outbound network access to the Neta API, but it does not define any explicit tool scope or network restrictions. This increases the blast radius of shell execution because the agent may invoke network-capable code without transparent boundaries, making misuse, unexpected exfiltration, or overbroad execution harder to control.
The skill instructs users to pass an API token directly via the --token command-line flag but provides no warning that command-line arguments may be exposed through shell history, process listings, logs, or transcripts. In the context of an agent skill that uses Bash, this materially increases the likelihood of credential leakage and downstream unauthorized API use.
The trigger guidance says to use the skill when someone asks to generate liminal space images, but it does not define exclusions, approval boundaries, or limits on when shell/networked execution should occur. In an agent setting, vague invocation criteria can cause over-triggering, leading the agent to send prompts or tokens to external services when the user did not clearly intend that behavior.
The installation command uses npx skills without pinning a version, which makes the environment depend on whatever package version is current at install time. This creates a supply-chain risk: a compromised, malicious, or simply breaking future release could execute unintended code during installation or alter behavior after publication.
The hardcoded remote endpoint confirms that data is transmitted off-host to a third-party service. In the context of an agent skill, this matters because users may not realize their prompts, reference IDs, and bearer-style token are leaving the local environment and being processed by an external provider.
console.error(`→ Generating: "${prompt}"`);
console.error(` Size: ${size} (${dims.width}×${dims.height})`);
const submitRes = await fetch('https://api.talesofai.com/v3/make_image', {
method: 'POST',
headers,
body: JSON.stringify(body),
The hardcoded remote endpoint confirms that data is transmitted off-host to a third-party service. In the context of an agent skill, this matters because users may not realize their prompts, reference IDs, and bearer-style token are leaving the local environment and being processed by an external provider.
console.error(`→ Generating: "${prompt}"`);
console.error(` Size: ${size} (${dims.width}×${dims.height})`);
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.
for (let attempt = 0; attempt < 90; attempt++) {
await new Promise((r) => setTimeout(r, 2000));
const pollRes = await fetch(`https://api.talesofai.com/v1/artifact/task/${taskUuid}`, {
headers,
});
if (!pollRes.ok) continue;
No suspicious patterns detected.