Back to skill

Security audit

Agent Toolkit

Security checks for vulnerabilities and agentic risk

Overview

This is a disclosed local logging utility for agent-related notes; it stores and exports plain-text user input, so users should avoid sensitive data, but I found no hidden exfiltration or privilege behavior.

Install only if you want a local plaintext activity log. Do not enter API keys, tokens, passwords, confidential prompts, regulated data, or security incident details. Treat exported CSV/JSON/TXT files as sensitive, and be careful opening CSV exports in spreadsheet software because values are not safely escaped.

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

Unescaped User-Controlled Data Produces Unsafe 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 ;; ``` The exported `val` field originates from command-line input stored directly in category logs. For example, the `configure` command writes the supplied value without normalization or validation: ```bash local input="$*" local ts=$(date '+%Y-%m-%d %H:%M') echo "$ts|$input" >> "$DATA_DIR/configure.log" ``` ### Technical Analysis JSON output is constructed through string interpolation without escaping quotation marks, backslashes, control characters, or embedded line breaks. A value containing JSON syntax can therefore corrupt the document or inject additional properties or records into the generated export. CSV output is similarly generated without RFC 4180 quoting. Commas, quotation marks, and line breaks in a stored value can alter the apparent columns or inject additional rows. In addition, a value beginning with `=`, `+`, `-`, or `@` can be interpreted as a formula when the CSV is opened by spreadsheet software. Depending on the spreadsheet application and its security settings, a malicious formula may initiate external requests, expose spreadsheet dat ...[truncated 1693 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Note
Location
scripts/script.sh:58
Finding

Export Files Can Follow Pre-existing Symbolic Links

Content
View full analysis
"$out" # Export generation continues... ;; csv) echo "type,time,value" > "$out" # Export generation continues... ;; txt) echo "=== Agent Toolkit Export ===" > "$out" # Export generation continues... ;; *) echo "Formats: json, csv, txt"; return 1 ;; esac } ``` The concrete truncating writes are: ```bash echo "[" > "$out" echo "type,time,value" > "$out" echo "=== Agent Toolkit Export ===" > "$out" ``` ### Technical Analysis The export destination has a predictable name: `export.json`, `export.csv`, or `export.txt`. Shell redirection follows symbolic links by default. The script neither checks whether the destination is a symbolic link nor creates the output through a securely created temporary file. Consequently, an attacker who can create or replace entries in the data directory can make an export path point to another file. When the victim runs the corresponding export command, the target is opened with truncation and subsequently receives attacker-influenced export content. The default directory is created using: ```bash DATA_DIR="${HOME}/.local/share/agent-toolkit" mkdir -p "$DATA_DIR" ``` No explicit `0700` permissions are enforced. Actual exposure therefore depends on existing directory ownership, permissions, the invoking user's `umask`, and whether another principal can modify the directory. Exploitation is conditional and normally requires local filesystem access under the same account or access to an improperly writable data directory. ### Attack Path 1. The attacker obtains permission to modify `~/.local/share/ ...[truncated 1219 chars]
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (8)

Tp4

High
Category
MCP Tool Poisoning
Confidence
94% confidence
Finding

The skill’s declared purpose emphasizes configuring and benchmarking agent tools, but the content reveals broader behavior including persistent local logging, historical search, export, and additional operational commands. This mismatch matters because users may invoke the skill expecting transient benchmarking help while it actually retains potentially sensitive operational data on disk and exposes secondary data-handling capabilities not clearly foregrounded in the top-level purpose.

Content

No source excerpt is available for this finding.

Missing User Warnings

High
Category
Not specified by scanner
Confidence
99% confidence
Finding

The example explicitly encourages logging an API-key-related event string, which normalizes putting credential-management details into a tool that persistently writes plain-text logs. Even if the example does not include a raw secret value, it trains users to record sensitive security operations in searchable/exportable logs, increasing exposure through local compromise, accidental sharing, or later export.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The skill stores command inputs and activity history persistently in plain-text files, but the user-facing description does not prominently warn that all entered content may be written to disk. In an agent-tooling context, users are likely to paste prompts, configs, endpoints, cost records, or troubleshooting details that may contain secrets or sensitive internal information, making silent retention particularly risky.

Content

No source excerpt is available for this finding.

Ssd 3

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The tool is designed to retain arbitrary user-provided content across multiple commands and then resurface that content through recent, search, status, and export features in plain text. Because agent workflows commonly process sensitive prompts, system instructions, test cases, tokens, and proprietary evaluation material, this broad retention materially increases the chance of unintended disclosure.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The manifest frames this skill as something used to set up agent workflows, compare tools, or evaluate agents. In contrast, the implemented commands simply accept free-form input and append it to local log files for broad categories like prompt, fine-tune, cost, usage, optimize, test, and report, with support for search/export/status rather than actually configuring or benchmarking tools.

Content

No source excerpt is available for this finding.

Ssd 3

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The export routine aggregates all logged content into JSON, CSV, or TXT files without escaping, redaction, or classification of sensitive data. This makes previously entered prompts or secrets easy to exfiltrate, share accidentally, or open in downstream tools, especially CSV consumers where spreadsheet formula injection can also create client-side risk if a value begins with characters such as '=' or '+'.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The script persistently stores arbitrary user input in plaintext log files under the user's home directory without warning, consent, retention controls, or sensitivity filtering. In an agent-tooling context, those inputs may include prompts, API keys, internal model outputs, evaluation data, or other secrets that could later be exposed to local users, backups, sync tools, or support bundles.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Low
Category
Not specified by scanner
Confidence
85% confidence
Finding

Exporting all collected entries to JSON/CSV/TXT and searching across every stored log turns the skill into a general local data archival and retrieval tool. That capability is adjacent to note management rather than an obvious requirement for setting up workflows, comparing tools, or evaluating agents as described in the manifest.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.