Back to skill

Security audit

Comic Panel Generator

Security checks for vulnerabilities and agentic risk

Overview

This skill does what it claims: it generates comic-style images through a documented third-party API, with some credential-handling and install-supply-chain cautions.

Install from a trusted source and prefer a pinned or ClawHub-managed install path when available. Use this only with prompts you are willing to send to the Neta/TalesOfAI service, and avoid putting sensitive personal, proprietary, or secret content in prompts. Treat the Neta token like a credential; avoid typing it literally into shared terminals or logs, and consider rotating it if it has been exposed.

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
comicpanelgenerator.js:5
Finding

API Token Exposed Through Command-Line Arguments

Content
View full analysis

Vulnerability Details

File Location: comicpanelgenerator.js:5-18; insecure usage is documented in SKILL.md:15-19 and README.md:27-31
Vulnerability Type: Sensitive credential exposure through process arguments
Risk Level: Medium

Vulnerable Code

javascript
const args = process.argv.slice(2);

let prompt = null;
let size = "portrait";
let tokenFlag = null;
let refUUID = null;

for (let i = 0; i < args.length; i++) {
  if (args[i] === "--size" && args[i + 1]) {
    size = args[++i];
  } else if (args[i] === "--token" && args[i + 1]) {
    tokenFlag = args[++i];
  } else if (args[i] === "--ref" && args[i + 1]) {
    refUUID = args[++i];
  } else if (!args[i].startsWith("--") && prompt === null) {
    prompt = args[i];
  }
}

The documentation explicitly instructs users to place the credential in the command line:

bash
node comicpanelgenerator.js "your description here" --token YOUR_TOKEN

Technical Analysis

The application obtains the Neta API token directly from process.argv. Command-line arguments are not an appropriate secret-transport mechanism because they can be exposed through shell command history, terminal logging, process-monitoring utilities, debugging tools, job runners, and process metadata available to authorized local users or processes.

The token is subsequently used as the x-token authentication header for requests to the declared API. It is not hardcoded or printed by the script, and the reviewed code does not deliberately exfiltrate it to an unrelated endpoint. The issue is the local exposure caused by the documented credential-input mechanism.

Attack Path

  1. A user follows the documented command and supplies a valid token with --token.
  2. The shell may save the complete command, including the token, in its history.
  3. While the process is running, a local process with sufficient same-user ...[truncated 755 chars]
Remediation
View remediation

Remediation Suggestions

  • Prefer a protected environment variable such as NETA_TOKEN instead of a command-line flag.

  • Optionally support reading the token from standard input or an interactive hidden prompt.

  • If --token must remain for compatibility, mark it as deprecated and display a warning explaining that process arguments may be observable.

  • Update all usage examples so they do not place the expanded secret in the command line. For example:

    bash
    export NETA_TOKEN="..."
    node comicpanelgenerator.js "your description"
    
  • Load and validate the environment variable without logging its value:

    javascript
    const TOKEN = process.env.NETA_TOKEN;
    
    if (!TOKEN) {
      console.error("Token required. Set the NETA_TOKEN environment variable.");
      process.exit(1);
    }
    
  • Ensure CI systems and wrappers mask the variable and do not emit it in diagnostic output.

  • Recommend rotating any token that has previously been entered literally into a shared or logged shell.

T08 · Insecure Dependencies

Warning
Location
SKILL.md:31
Finding

Unpinned Remote Installation Chain

Content
View full analysis

Vulnerability Details

File Location: SKILL.md:31-34; the same installation pattern also appears in README.md:10-14
Vulnerability Type: Mutable and unpinned third-party installation source
Risk Level: Medium

Vulnerable Code

markdown
## Install
```bash
npx skills add blammectrappora/comic-panel-generator
text

The README provides the corresponding installation instructions:

```markdown
**Via npx skills:**
```bash
npx skills add blammectrappora/comic-panel-generator
text

### Technical Analysis

The installation command invokes `npx skills` without pinning the CLI to a specific package version and identifies the Skill through a mutable repository-style reference rather than an immutable release or commit. Consequently, the components resolved when a user executes the command may differ from the files reviewed during this audit.

This creates a supply-chain trust boundary in which future versions of the installer or remote Skill source can alter the installed instructions and executable content. The audited `package.json` contains no runtime dependencies or installation scripts, and no current malicious dependency was identified. The risk arises from the mutable installation procedure rather than from a confirmed malicious package in the reviewed snapshot.

### Attack Path

1. An attacker compromises the account, package, repository, publishing credentials, or distribution infrastructure used by the installer or remote Skill source.
2. The attacker publishes a modified version containing malicious instructions or executable code.
3. A user runs the documented unpinned `npx skills add` command.
4. The package resolver retrieves the then-current CLI and mutable Skill content rather than the audited snapshot.
5. The altered Skill is installed and may execute under the user’s privileges when invoked.

Exploitation therefore requires compromise or malicious modification of an upstrea
...[truncated 669 chars]
Remediation
View remediation

Remediation Suggestions

  • Pin the skills CLI to an explicitly reviewed version, for example npx skills@<reviewed-version>.
  • Pin the Skill source to an immutable release tag or, preferably, a full commit hash.
  • Publish checksums or signed provenance for released Skill artifacts and verify them before installation.
  • Enable package-manager lockfile and integrity controls where applicable.
  • Document the exact version and commit corresponding to the audited release.
  • Recommend inspecting downloaded files before granting the Skill access to Bash or other high-impact tools.
  • Protect publisher accounts with multifactor authentication and narrowly scoped publishing credentials.
  • Establish a release process that prevents mutable tags from silently replacing previously reviewed content.
Vulnerability Patterns
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
Findings (8)

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
96% confidence
Finding

The README instructs users to send arbitrary prompts and an API token to a third-party image generation service, but it does not clearly warn that user content and credentials are being transmitted off-platform. In this skill's context, prompts may contain sensitive creative material, personal data, or proprietary content, so the lack of explicit disclosure increases privacy and data-handling risk for users.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The activation guidance, 'Use when someone asks to generate or create ai comic panel generator images,' is overly broad and vague. Ambiguous triggering can cause the skill to activate in unintended contexts, increasing the chance of unnecessary tool use or accidental token/API handling when a user's request only loosely matches the description.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
90% confidence
Finding

The install instruction uses npx skills add ... without pinning a specific version of the skills package. That means execution depends on whatever version is current at install time, creating supply-chain risk if the package changes unexpectedly or is compromised.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

This code sends the user-provided prompt, dimensions, and optional reference UUID to a remote API via HTTPS, but the only visible output is a progress/error message rather than a disclosure that user content is being transmitted off-system. For code files, outbound network calls that transmit user or system data should have some user-facing warning, comment, or documented notice unless clearly covered by the skill description, which is not present here.

Content

No source excerpt is available for this finding.

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 · comicpanelgenerator.js (reported line 103)May include surrounding context.

js
try {
    makeRes = await request(
      "POST",
      "https://api.talesofai.com/v3/make_image",
      makeBody
    );
  } catch (err) {

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 · comicpanelgenerator.js (reported line 123)May include surrounding context.

js
try {
    makeRes = await request(
      "POST",
      "https://api.talesofai.com/v3/make_image",
      makeBody
    );
  } catch (err) {

Static analysis

No suspicious patterns detected.