Back to skill

Security audit

Lifegoals

Security checks for vulnerabilities and agentic risk

Overview

This skill is a local life-goal logging CLI with disclosed persistence; it has privacy and hardening issues but no evidence of hidden exfiltration, privilege escalation, or destructive behavior.

Install only if you are comfortable with goal text being stored locally in plaintext and later searchable/exportable. Avoid entering highly sensitive health, financial, relationship, or career details on shared machines unless file permissions are locked down, and consider adding a purge/no-history workflow before regular use.

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:113
Finding

Option Injection Through the Search Term

Content
View full analysis
}" echo "Searching for: $term" for f in "$DATA_DIR"/*.log; do [ -f "$f" ] || continue local m=$(grep -i "$term" "$f" 2>/dev/null || true) if [ -n "$m" ]; then echo " --- $(basename "$f" .log) ---" echo "$m" | sed 's/^/ /' fi done } ``` ### Technical Analysis The search term is quoted, which prevents shell metacharacters from being evaluated as shell syntax. However, quoting does not prevent `grep` from interpreting an argument beginning with `-` as a command-line option. Consequently, an attacker who can invoke the CLI can supply values such as `-e.*` or `--file=/path/to/file`. These values alter `grep` behavior rather than being processed as literal search terms. A file supplied through `--file` is interpreted as a source of patterns. Special or very large files may also cause excessive resource consumption. The vulnerability does not provide shell command execution because the value is not passed through `eval`, `sh -c`, or an equivalent execution primitive. ### Attack Path 1. An attacker or untrusted caller controls the argument passed to `lifegoals search`. 2. The attacker supplies an option-shaped argument, for example: ```bash lifegoals search '--file=/path/to/attacker-selected-file' ``` 3. `_search` passes the value directly to `grep` without an `--` option terminator. 4. `grep` interprets the value as an option and reads the selected file as a pattern source. 5. The attacker can alter search results or cause resource consumption by selecting a large or special file. ### Impact Assessment The issue permits manipulation of search behavior and may cause denial of service or unintended reads of files already access ...[truncated 411 chars]
Remediation
View remediation
}" echo "Searching for: $term" local f m for f in "$DATA_DIR"/*.log; do [ -f "$f" ] || continue m=$(grep -iF -- "$term" "$f" 2>/dev/null || true) if [ -n "$m" ]; then echo " --- $(basename "$f" .log) ---" printf '%s\n' "$m" | sed 's/^/ /' fi done } ``` The `--` marker prevents subsequent values from being parsed as options, while `-F` treats the search term as a literal string rather than a regular expression. Add regression tests covering `-e`, `--file`, strings beginning with `-`, empty strings, and ordinary search terms. ]]>

T09 · Insecure Skill Coding Practices

Note
Location
scripts/script.sh:6
Finding

Sensitive Personal Data Stored Without Enforced Restrictive Permissions

Content
View full analysis
> "$DATA_DIR/check.log" local total=$(wc -l < "$DATA_DIR/check.log") echo " [Lifegoals] check: $input" echo " Saved. Total check entries: $total" _log "check" "$input" ``` The unified history logger also writes the supplied content: ```bash _log() { echo "$(date '+%m-%d %H:%M') $1: $2" >> "$DATA_DIR/history.log"; } ``` ### Technical Analysis The Skill is designed to persist life goals, which may contain health, financial, employment, relationship, or other sensitive personal information. It creates its storage directory and files without setting a restrictive `umask` or explicitly applying access modes. Directory and file permissions therefore depend on the caller's environment. With a permissive umask, the directory, command logs, unified history log, or generated exports can become readable by other local users. The same sensitive input is stored both in a command-specific log and in `history.log`, increasing the number of disclosure points. This is a local confidentiality weakness rather than a privilege-escalation issue. Exploitation also depends on the permissions of parent directories and whether another local user can traverse them. The argument-taking command branches currently contain top-level `local` declarations, which normally cause direct execution to fail before the representative write. That correctness defect limits the ...[truncated 1115 chars]
Remediation
View remediation
Vulnerability Patterns
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Rogue AgentSelf-Modification, Session Persistence
  • 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
Findings (8)

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

The skill is presented as a life-goal planning tool, but the documented behavior is closer to a generic logging/auditing CLI that stores arbitrary user inputs, activity history, exports, and searchable logs. That mismatch is security-relevant because users may disclose sensitive personal goals, health, financial, or career information without realizing it will be persistently retained and processed beyond simple goal planning.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

High
Category
Not specified by scanner
Confidence
99% confidence
Finding

The implemented command set materially diverges from the declared life-goals planning purpose and exposes generic development-oriented functions such as lint, diff, format, convert, and fix. Capability mismatch is dangerous because users and policy systems may grant trust or permissions based on the manifest, while the script actually collects arbitrary input and behaves like a broader utility, increasing the risk of misuse and deceptive deployment.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

High
Category
Not specified by scanner
Confidence
97% confidence
Finding

The script exposes multiple software-development style operations that are unjustified for a life-goals assistant, creating unnecessary and misleading attack surface. In this skill context, unrelated capabilities are especially risky because they can be used to conceal non-obvious behavior behind an innocuous wellness/productivity label.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The documentation omits a clear upfront warning that all goal inputs and activity history are persistently logged to local files. Because goal content can include highly sensitive personal data, this lack of transparency can lead to unintended collection and long-term exposure on shared machines, backups, or through later exports.

Content

No source excerpt is available for this finding.

Session Persistence

Medium
Category
Rogue Agent
Confidence
78% confidence
Finding

The skill documents persistent history and the ability to diff, search, report on, and revisit prior entries, which indicates session persistence of potentially sensitive goal data. While persistence is arguably part of the product design, it still creates privacy risk if users expect ephemeral assistance or use the tool on multi-user systems.

Content

Scanner excerpt · SKILL.md (reported line 103)May include surrounding context.

md
# Format goal data for presentation
lifegoals format "Career: Get promoted to senior engineer"

# Create a goal from a template
lifegoals template "fitness-90-day-challenge"

# Diff two goal snapshots

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The header presents the tool as both 'Lifegoals' and a 'devtools tool/toolkit,' which contradicts the advertised purpose and indicates misleading documentation. Mislabeling makes review, user consent, and policy enforcement less reliable because the skill's real scope is obscured.

Content

No source excerpt is available for this finding.

Ssd 3

Medium
Category
Not specified by scanner
Confidence
99% confidence
Finding

The tool persistently records all user inputs across commands and then provides built-in commands to search, display, and export that data in plaintext. In a life-goals context this is more dangerous because the expected content is often deeply personal, and the script makes bulk disclosure trivially easy without any access control, redaction, or warning.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
99% confidence
Finding

User-provided input is written verbatim to persistent local logs without notice, consent, minimization, or protection. For a life-goals skill, inputs may include sensitive personal plans, health, relationship, or financial details, so plaintext retention materially increases privacy and disclosure risk to other local users, backups, or later exports.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.