Back to skill

Security audit

Pension

Security checks for vulnerabilities and agentic risk

Overview

This appears to be a local-only personal finance logger, but its stored finance files should be treated as sensitive.

Install only if you are comfortable storing finance notes locally in plaintext under ~/.local/share/pension. On shared or backed-up machines, restrict that directory's permissions and be careful with exported CSV/JSON files, especially before sharing or opening CSVs in spreadsheet software.

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

Sensitive financial records are created without enforced restrictive permissions

Content
View full analysis
> "$DATA_DIR/history.log"; } ``` The same unrestricted file-creation pattern is used for financial records throughout the command handlers, for example: ```bash echo "$ts|$input" >> "$DATA_DIR/record.log" ``` ### Technical Analysis The application stores potentially sensitive personal financial information under `~/.local/share/pension`, but it does not set a restrictive `umask` or explicitly assign access modes to the directory and files. Consequently, permissions are inherited from the execution environment. With a common `umask` of `022`, a newly created directory may have mode `0755`, while newly created logs and exports may have mode `0644`. On a multi-user system, these modes can permit other local users to traverse the data directory and read financial records. The `_log` function also duplicates command input in `history.log`, increasing the number of files containing sensitive information. The same permission concern applies to the command-specific logs and generated export files. ### Attack Path 1. A victim runs the Skill on a multi-user system with a permissive default `umask`, such as `022`. 2. The script creates `~/.local/share/pension` and its files without explicitly restricting their permissions. 3. The victim records balances, tax notes, budget information, forecasts, or other financial data. 4. The data is written to command-specific logs and may also be duplicated in `history.log`. 5. Another local account enumerates the victim's accessible home-directory paths and reads the files if parent-directory and file permissions permit it. 6. The local attacker obtains the stored financial information without needing the victim's application credentials. This pat ...[truncated 729 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Note
Location
scripts/script.sh:56
Finding

JSON and CSV exports embed untrusted record values without format-aware escaping

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 "\n]" >> "$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 log files are directly interpolated into JSON and CSV output without using a serializer or escaping routine. For JSON, characters such as double quotes, backslashes, tabs, carriage returns, and control characters must be escaped. A value containing these characters can terminate or alter the intended string representation, resulting in malformed JSON or attacker-controlled additional JSON structure. For CSV, fields containing commas, double quotes, carriage returns, or line breaks must be quoted according to CSV rules, with embedded quotes doubled. The implementation performs none of these transformations. In addition, values beginning with spreadsheet formula markers such as `=`, `+`, `-`, or `@` may be interpreted as formulas when a CSV export is opened in formula-capable spreadsheet software. This is data-for ...[truncated 1946 chars]
Remediation
View remediation
Vulnerability Patterns
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
Findings (3)

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The skill states that it performs automatic history and activity logging, but it does not present a clear, prominent warning about retention of potentially sensitive financial activity. In a personal-finance context, users may enter income, spending, tax notes, and other sensitive details, so silent or under-disclosed local logging creates a meaningful privacy risk even if data does not leave the machine.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The script stores raw user-supplied finance entries and activity history in plaintext under ~/.local/share/pension without any warning, consent flow, or protection such as restrictive permissions or encryption. Because the tool explicitly handles personal finance data, local persistence materially increases confidentiality risk from other local users, backups, malware, or accidental disclosure.

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 financial logs into a new report file on disk, potentially broadening exposure by creating an additional plaintext copy of sensitive data. The operation occurs without any explicit warning about the destination, persistence, or sensitivity of the resulting file, increasing the chance of accidental sharing or retention.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.