Back to skill

Security audit

Signup

Security checks for vulnerabilities and agentic risk

Overview

The skill does not show network exfiltration or destructive behavior, but it is a Review item because it presents itself as a signup manager while implementing a broad local logger that can retain personal signup data with unclear boundaries.

Install only if you are comfortable with the skill saving entered signup-related text locally under ~/.local/share/signup. Avoid entering secrets or sensitive personal data unless you have checked local file permissions, and expect some documented commands such as export/status to behave inconsistently with the description until fixed.

Vulnerability Patterns
  • 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
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
Findings (1)

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/script.sh:5
Finding

Locally Stored Signup Records Lack Explicit Access Restrictions

Content
View full analysis

Vulnerability Details

File Location: scripts/script.sh, lines 5–8; the same unrestricted file-creation pattern is repeated for action logs, such as line 134
Vulnerability Type: Insecure permissions for potentially sensitive local data
Risk Level: Medium

bash
DATA_DIR="${HOME}/.local/share/signup"
mkdir -p "$DATA_DIR"

_log() { echo "$(date '+%m-%d %H:%M') $1: $2" >> "$DATA_DIR/history.log"; }

A representative action log is also created without an explicit mode:

bash
echo "$ts|$input" >> "$DATA_DIR/run.log"

Technical Analysis

The script creates its data directory and log files without setting a restrictive umask or explicitly applying access permissions. Consequently, the resulting permissions depend entirely on the invoking process's environment.

With a permissive umask, or a common 022 configuration, generated files can be readable by other local users. The directory may also permit traversal by those users. The records managed by a signup utility can contain names, email addresses, registration details, reports, configuration values, or other personal information.

This weakness affects history.log and the command-specific logs created through shell redirection. Generated export files would be subject to the same inherited permission behavior if the export implementation became reachable.

Attack Path

  1. A legitimate user runs the Skill and supplies signup or registration information.
  2. The script creates ~/.local/share/signup using permissions derived from the current umask.
  3. It writes the supplied values to action logs and history.log, again relying on inherited default permissions.
  4. On a multi-user system where those defaults permit group or world access, another local account locates the user's home data directory.
  5. That account traverses the signup directory and reads the generated records.

Exploitation requires local system access and filesys ...[truncated 597 chars]

Remediation
View remediation

Remediation Suggestions

Establish restrictive permissions before creating any storage:

bash
umask 077
DATA_DIR="${HOME}/.local/share/signup"
mkdir -p -m 700 "$DATA_DIR"
chmod 700 "$DATA_DIR"

Ensure every generated data or export file is owned by the invoking user and has mode 600. Existing files should also be corrected safely:

bash
find "$DATA_DIR" -type f -exec chmod 600 {} +

Before writing, verify that the data directory is owned by the current user and is not a symbolic link. Where feasible, open files using mechanisms that reject symbolic links and create them atomically with exclusive, restrictive permissions.

Document that signup inputs are persisted locally, advise users not to enter secrets unnecessarily, and add automated tests that execute the script under permissive umask values to confirm that directories remain mode 700 and files remain mode 600.

Vulnerability Patterns
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (11)

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

The skill presents itself as a narrowly scoped signup tracker, but the documented behavior is much broader and includes generic logging, unrelated commands, local persistence, history tracking, and operational details not clearly reflected in the description. This mismatch is dangerous because users or agents may invoke it under false assumptions, causing unintended data retention, misleading exports/status behavior, or use outside the expected signup-management scope.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

High
Category
Not specified by scanner
Confidence
97% confidence
Finding

The core behavior of the script is generic persistence of free-form strings under command-named logs, with no signup-specific data model, registration workflow, status state, or actual analysis/report logic. This is a strong mismatch between the claimed purpose and the actual implementation.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The manifest advertises a signup tracker, but the command set includes generic operations such as run, convert, generate, batch, compare, and config that materially expand scope beyond the declared purpose. Overbroad capability descriptions are risky because they can trigger inappropriate use by an agent or operator, leading to unintended processing or storage of unrelated inputs.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The metadata description is broad enough that an agent could select this skill for many loosely related tasks without understanding its true behavior, including persistent logging and generic command handling. In agent ecosystems, ambiguous invocation criteria can become a security issue because they increase accidental activation and unintended data capture.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
88% confidence
Finding

The 'Works entirely offline' claim suggests a simple local signup tracker, yet the command table includes shell snippets such as du, cat, wc, tail, and command substitution syntax in user-facing behavior examples. This is an intent-level contradiction because the documentation presents a straightforward terminal signup manager while exposing behavior consistent with executing system shell commands.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The malformed and trigger-like command entries obscure what is an actual user command versus interpolated output or shell-expanded content. That ambiguity is dangerous in an agent setting because it can cause mis-parsing, accidental invocation, disclosure of environment-dependent data, or acceptance of undocumented behaviors as supported commands.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The skill claims it is for organizing and tracking signups, checking status, analyzing trends, and generating reports. However, the help text advertises a broad 'utility toolkit' and numerous generic commands that do not map to signup management, indicating the implemented behavior is materially broader and semantically different from the manifest purpose.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The inline usage documentation says the export command supports format arguments like json, csv, and txt. In the case statement, the earlier 'export)' branch at L243-L257 captures the command first and treats it as generic log input, so the later real export branch at L304 is unreachable, contradicting the documented behavior.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The help output documents status as a health/status command, but the earlier 'status)' branch at L273-L287 records free-form input to status.log and prevents the later '_status' dispatch at L307 from executing. This is an active contradiction between the documented intent and actual behavior.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The export routine aggregates all previously logged content into export files without clear user consent or warning, which can amplify accidental disclosure of sensitive local data. Because this skill is presented as a signup tool, the exported content could plausibly include personal registration information and operational history, increasing the privacy impact.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The script persistently stores arbitrary user input into local log files across many commands without clearly warning users that their entries will be retained under ~/.local/share/signup. In a signup-tracking context, users may enter names, emails, or other sensitive registration data, creating a privacy and confidentiality risk if the host is shared, backed up, or later inspected.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.