Back to skill

Security audit

Trigger

Security checks for vulnerabilities and agentic risk

Overview

This skill appears to be a local activity tracker, but its documentation is vague and mismatched with behavior that persistently stores, searches, and exports user-entered data.

Review this carefully before installing. It does not show evidence of exfiltration or system compromise, but it will retain user-entered plans, reminders, reviews, and similar workflow data locally and can consolidate that history into export files. Avoid entering sensitive personal, business, or credential-like information unless the storage location, permissions, retention, and export handling are acceptable.

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 (2)

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/script.sh:63
Finding

Unescaped User-Controlled Data in JSON and CSV Exports

Content
View full analysis
"$out" local first=1 for f in "$DATA_DIR"/*.log; do [ -f "$f" ] || continue local name=$(basename "$f" .log) while IFS='|' read -r ts val; do [ $first -eq 1 ] && first=0 || echo "," >> "$out" printf ' {"type":"%s","time":"%s","value":"%s"}' "$name" "$ts" "$val" >> "$out" done < "$f" done echo "" >> "$out" echo "]" >> "$out" ;; csv) echo "type,time,value" > "$out" for f in "$DATA_DIR"/*.log; do [ -f "$f" ] || continue local name=$(basename "$f" .log) while IFS='|' read -r ts val; do echo "$name,$ts,$val" >> "$out" done < "$f" done ``` ### Technical Analysis Values read from the log files are inserted directly into JSON and CSV output without format-specific encoding. For JSON output, quotation marks, backslashes, control characters, or embedded newlines in `name`, `ts`, or `val` are not escaped. An attacker-controlled value can therefore terminate a JSON string, inject additional properties or records, or make the entire export invalid. For CSV output, fields containing commas, quotation marks, carriage returns, or newlines are not quoted according to CSV rules. In addition, values beginning with spreadsheet formula indicators such as `=`, `+`, `-`, or `@` can be interpreted as formulas when the exported file is opened in spreadsheet software. The precise behavior depends on the spreadsheet application and its security configuration. ### Attack Path 1. An attacker supplies crafted text through a record-creati ...[truncated 1170 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Note
Location
scripts/script.sh:60
Finding

Predictable Export Paths Allow Symbolic-Link File Overwrite

Content
View full analysis
"$out" ``` The same predictable destination is overwritten in the other supported export branches: ```bash csv) echo "type,time,value" > "$out" ``` ```bash txt) echo "=== Trigger Export ===" > "$out" ``` The data directory is initialized without an explicit restrictive mode: ```bash DATA_DIR="${HOME}/.local/share/trigger" mkdir -p "$DATA_DIR" ``` ### Technical Analysis The export function always writes to predictable names: `export.json`, `export.csv`, and `export.txt`. Shell output redirection follows symbolic links and truncates the link target. The implementation does not verify that the destination is a regular file, reject symbolic links, or securely create a temporary file before replacement. The data directory is also created without explicitly enforcing mode `0700`, leaving its effective permissions dependent on existing directory permissions and the caller's `umask`. Exploitation requires an attacker to have write access to the data directory; this is not normally available to unrelated users when the user's home directory and umask are securely configured. ### Attack Path 1. An attacker obtains write access to `~/.local/share/trigger/`, such as through weak directory permissions, a shared account, or another local compromise. 2. The attacker creates one of the predictable export names as a symbolic link, for example `export.json`, pointing to another file writable by the victim. 3. The victim runs `trigger export json`. 4. The shell follows the symbolic link when processing `> "$out"`. 5. The target file is truncated and replaced with generated export c ...[truncated 443 chars]
Remediation
View remediation
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 (7)

Tp4

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding

The skill presents itself as a generic everyday CLI tool, but the documented behavior includes persistent local storage and export capabilities that materially change its privacy and data-handling risk. Underspecified storage, logging, and export behavior can cause users or agents to invoke the skill without realizing it retains or exposes data beyond a one-shot command execution.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The phraseology is broad enough to match many ordinary user requests, increasing the chance the agent auto-selects this skill in situations where the user did not intend to invoke it. Because the skill can run commands and interact with persistent local data, overbroad activation language raises the risk of unintended execution and unnecessary data exposure.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The 'When to Use' guidance is too vague to constrain activation and could cause the skill to be selected for a wide range of unrelated workflow or batch-processing tasks. In context, that is more dangerous because the skill also references automation, event logging, exports, and a writable data directory, so mistaken invocation may create or expose persistent artifacts.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The manifest/description materially understates what the tool does: it persistently stores user-provided activity data under the user's home directory and supports bulk export of those logs. This kind of capability mismatch can mislead users or higher-level agents into supplying sensitive personal or workflow data without informed consent, increasing privacy and data-handling risk.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The script creates a persistent data directory and logs user-provided entries to multiple local files without any explicit warning, consent flow, or retention controls. In this skill context, users are likely to enter personal plans, reminders, reports, and reviews, so silent persistence can expose sensitive behavioral or personal information to other local users, backups, or later export.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The export function aggregates all recorded activity into a single JSON/CSV/TXT file on disk without warning the user that sensitive historical data is being consolidated into an easily shareable artifact. Aggregation meaningfully increases exposure because one file now contains cross-category activity history that may be accidentally synced, shared, or read by other local processes/users.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Low
Category
Not specified by scanner
Confidence
97% confidence
Finding

The help text omits implemented commands such as search and recent, creating a documentation/behavior mismatch. Hidden or undocumented data-access features are risky because users and calling agents may not realize stored activity can be searched or enumerated, which reduces transparency around sensitive data handling.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.