Back to skill

Security audit

Furry Art Skill

Security checks for vulnerabilities and agentic risk

Overview

This looks like a purpose-aligned image-generation skill, but it needs Review because it handles the API token through command-line arguments and uses mutable install instructions.

Install only if you are comfortable sending prompts and your Neta/Tales of AI token to api.talesofai.com. Prefer a version-pinned install path if available, and avoid putting real API tokens directly on the command line; rotate the token if it has already appeared in shell history, logs, or process telemetry.

Vulnerability Patterns
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • Insecure Skill Coding PracticesFinds exploitable flaws such as hardcoded secrets or command injection
  • Skill Instruction HijackingAlters the agent's session goals or safety constraints when the skill loads
  • Agent Memory PoisoningWrites attacker-controlled rules into memory that affect later sessions
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
Findings (2)

T09 · Insecure Skill Coding Practices

Warning
Location
furryart.js:3
Finding

API Token Exposed Through Command-Line Arguments

Content
View full analysis
"your prompt" --token "$NETA_TOKEN" ``` ```bash node furryart.js "your description here" --token YOUR_TOKEN ``` ### Technical Analysis The script obtains the API token from `process.argv`. Command-line arguments are not an appropriate secret-transport mechanism because they can be exposed through operating-system process inspection, command auditing, terminal or automation logs, and shell history when a literal token is used. Although `package.json` declares a required environment variable named `NETA_TOKEN`, the implementation does not read `process.env.NETA_TOKEN`. Even the documented environment-variable example expands the token into the argument vector before starting Node.js, so the environment variable does not prevent exposure through process inspection. Exploitation requires an attacker or monitoring component that can inspect the victim's process arguments, command records, or relevant logs. This issue does not independently provide host privilege escalation. ### Attack Path 1. A user follows the documented command and supplies a valid token through `--token`. 2. The shell expands the token into the Node.js process argument vector. 3. While the process is running, a local user or monitoring service with process-inspe ...[truncated 768 chars]
Remediation
View remediation

T08 · Insecure Dependencies

Warning
Location
SKILL.md:32
Finding

Unpinned Package Execution in Installation Instructions

Content
View full analysis
Remediation
View remediation
add omactiengartelle/furry-art-skill ``` 2. Do not use version ranges or mutable tags such as `latest` for executable installation tooling. 3. Where supported, verify package integrity using a lockfile, checksums, signatures, provenance attestations, or registry integrity metadata. 4. Document the expected package name, exact version, publisher, and trusted registry so users can verify what will execute. 5. Prefer an installation workflow that downloads and verifies an artifact before executing it. 6. Keep the pinned version current through a controlled review and release process rather than resolving updates automatically at installation time. ]]>
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (11)

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

A description-behavior mismatch is especially dangerous here because the skill claims to use the Neta API, while the finding indicates it actually uses a different external service and supports unadvertised reference-based image editing via --ref. This can mislead users about where prompts, images, and tokens are sent, undermining informed consent and creating a strong indicator of deceptive or hidden functionality.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
70% confidence
Finding

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.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
70% confidence
Finding

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.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The README instructs users to pass the API token via a --token command-line argument, which can expose the credential through shell history, process listings, terminal logs, and CI job output. Because this skill is specifically designed to use a bearer-style API token to access a third-party image generation service, disclosure of that token could allow unauthorized API use, quota theft, and account abuse.

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
82% confidence
Finding

The skill declares Bash tooling and describes calling an external image-generation API, but it does not constrain tool scope with explicit permissions or allowed-tools. In a skill that performs networked actions and handles API tokens, this increases the chance of unintended outbound access or misuse beyond the user’s expectations.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
76% confidence
Finding

Using npx skills add omactiengartelle/furry-art-skill without a pinned version makes installation non-reproducible and exposes users to supply-chain risk if the upstream package changes or is compromised later. An attacker controlling or hijacking the package distribution path could deliver different code than what was originally reviewed.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

Accepting an API token on the command line can expose it through shell history, process listings, job control tools, and logging systems. In this skill context, the token is then used for external API calls, so credential leakage could let others abuse the user's account or consume quota.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
70% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · furryart.js (reported line 72)May include surrounding context.

js
// --- Submit job ---
async function submitJob() {
  const res = await fetch("https://api.talesofai.com/v3/make_image", {
    method: "POST",
    headers: HEADERS,
    body: JSON.stringify(body),

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · furryart.js (reported line 72)May include surrounding context.

js
// --- Submit job ---
async function submitJob() {
  const res = await fetch("https://api.talesofai.com/v3/make_image", {
    method: "POST",
    headers: HEADERS,
    body: JSON.stringify(body),

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · furryart.js (reported line 93)May include surrounding context.

js
// --- Submit job ---
async function submitJob() {
  const res = await fetch("https://api.talesofai.com/v3/make_image", {
    method: "POST",
    headers: HEADERS,
    body: JSON.stringify(body),

Intent-Code Divergence

Low
Category
Not specified by scanner
Confidence
90% confidence
Finding

The section is labeled 'Token resolution', which implies the script will obtain or derive the token itself. In reality, the code only checks whether a token was supplied via --token and exits if it was not, so the inline documentation misstates the behavior.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.