Back to skill

Security audit

Warehouse

Security checks for vulnerabilities and agentic risk

Overview

This skill should be reviewed because it claims to be a data warehouse toolkit but mainly stores user inputs in local plaintext logs without clear controls.

Install only if you intentionally want a local activity logger, not a real warehouse/query tool. Do not pass credentials, tokens, customer data, private prompts, connection strings, or proprietary queries to it. Expect retained data under ~/.local/share/warehouse, with no built-in purge, redaction, retention policy, or reliable configuration override.

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

Persistent Plaintext Storage of Potentially Sensitive Command Input

Content
View full analysis
> "$DATA_DIR/history.log"; } ``` Representative command-input capture: ```bash ingest) shift if [ $# -eq 0 ]; then echo "Recent ingest entries:" tail -20 "$DATA_DIR/ingest.log" 2>/dev/null || echo " No entries yet. Use: warehouse ingest " else local input="$*" local ts=$(date '+%Y-%m-%d %H:%M') echo "$ts|$input" >> "$DATA_DIR/ingest.log" local total=$(wc -l < "$DATA_DIR/ingest.log") echo " [Warehouse] ingest: $input" echo " Saved. Total ingest entries: $total" _log "ingest" "$input" fi ``` Equivalent raw-input logging occurs in the `transform`, `query`, `filter`, `aggregate`, `visualize`, `export`, `sample`, `schema`, `validate`, `pipeline`, and `profile` branches. ### Technical Analysis The script stores raw command arguments in command-specific log files and duplicates them in `history.log`. Inputs to warehouse-related commands may contain database queries, schema information, pipeline configuration, customer records, identifiers, tokens, passwords, or connection details. The script creates its data directory with `mkdir -p` and appends to files without setting restrictive permissions. Consequently, directory and file permissions depend on the invoking process's `umask`. Under a permissive configuration, other local users or processes may be able to read the retained data. The behavior also increases exposure by duplicating each payload ...[truncated 2410 chars]
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • 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
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (9)

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

The description is too vague and does not accurately convey the code's concrete behavior. Despite command names like ingest, transform, query, filter, aggregate, etc., the script does not actually perform those data-processing actions; it simply records the provided input strings with timestamps into local log files and maintains a history log. It also includes undeclared capabilities such as searching stored entries, exporting all logs into multiple formats, showing recent activity, and reporting status/statistics. Additionally, the code's main purpose appears to be persistent local tracking/logging of named activities, not a true general-purpose 'warehouse' command-line tool as described.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

High
Category
Not specified by scanner
Confidence
95% confidence
Finding

The help text advertises an export feature, but the main dispatcher defines an earlier export branch that only logs input, making the real _export path effectively unreachable. This deceptive interface can cause users to believe they are exporting structured data while actually creating additional persistent logs, compounding hidden data collection.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

High
Category
Not specified by scanner
Confidence
98% confidence
Finding

Commands such as ingest, transform, query, filter, aggregate, visualize, schema, validate, pipeline, and profile do not perform the named actions and instead persist arbitrary user input. In an agent-skill context, this is especially dangerous because users or upstream agents may pass secrets, dataset fragments, prompts, or internal queries expecting processing, not durable logging.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The phrase "Use when you need warehouse" does not define concrete triggers, scope, or exclusion conditions for activation. Because it is circular and nonspecific, it provides little guidance on when the skill should or should not be invoked, increasing the risk of unintended activation.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The script presents itself as a general-purpose data/warehouse tool, but its primary behavior is creating a hidden per-user datastore and recording command inputs to local log files. This mismatch can mislead users into entering sensitive operational or natural-language data they would not knowingly consent to store, increasing privacy and trust risks.

Content

No source excerpt is available for this finding.

Ssd 3

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The script is designed to persist user-provided inputs and later reveal them via status, recent, search, and export-style features in plain text. In a skill environment, that creates a straightforward data leakage channel for anything the user or agent passes into the tool, including prompts, tokens, and business data.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The export functionality aggregates previously stored records into JSON, CSV, or text files on disk without warning, multiplying the number of copies of potentially sensitive user data. Exported files are easier to share, misplace, or ingest into other tools, increasing the chance of disclosure.

Content

No source excerpt is available for this finding.

Ssd 3

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

Bulk export consolidates all accumulated logs into a single JSON, CSV, or text artifact, making exfiltration or accidental disclosure significantly easier than dispersed per-command logs. Because the content originates from arbitrary user input, the export may contain highly sensitive free-form data with no sanitization.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

User-supplied input is written verbatim to local log files with no clear disclosure, retention control, or sensitivity checks. This creates a privacy and data-handling vulnerability because users may provide credentials, proprietary data, or personal information assuming ephemeral processing.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.