Back to skill

Security audit

Genai Toolkit

Security checks for vulnerabilities and agentic risk

Overview

The skill is an offline logging tool, but its manifest advertises a database/MCP bridge and it encourages storing sensitive configuration like API keys in plaintext local logs.

Review this skill before installing. Treat it as a local plaintext logging utility, not a database/MCP bridge. Do not record API keys, tokens, passwords, private keys, production prompts, private schemas, or confidential datasets in it, and be careful sharing exported JSON, CSV, or text files.

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

Plaintext Storage of API Keys and Other Sensitive Configuration Data

Content
View full analysis
` | Log a configuration note such as model parameters, API keys, or environment settings. Use this to record setup changes and track which configurations were active during experiments. | ``` The data directory and history log are created without explicitly restrictive permissions: ```bash DATA_DIR="${HOME}/.local/share/genai-toolkit" mkdir -p "$DATA_DIR" _log() { echo "$(date '+%m-%d %H:%M') $1: $2" >> "$DATA_DIR/history.log"; } ``` Configuration input is then written to both the category log and unified history log: ```bash else local input="$*" local ts=$(date '+%Y-%m-%d %H:%M') echo "$ts|$input" >> "$DATA_DIR/configure.log" local total=$(wc -l < "$DATA_DIR/configure.log") echo " [Genai Toolkit] configure: $input" echo " Saved. Total configure entries: $total" _log "configure" "$input" fi ``` ### Technical Analysis The documented workflow encourages users to submit API keys or environment configuration to the `configure` command. The script stores that input verbatim in `configure.log` and duplicates it in `history.log`. Neither the data directory nor the generated files receive explicit modes such as `0700` and `0600`. Their effective permissions therefore depend on the invoking user's umask and the surrounding environment. A permissive umask can make the files readable by other local users. Export functionality may also produce additional plaintext copies of these records. No credential detection, redaction, encryption, retention control, or warning is implemented. This viola ...[truncated 1226 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/script.sh:62
Finding

CSV Formula Injection and Invalid JSON Generation in Exported Data

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 Log values originate from command-line input and are serialized directly into JSON and CSV output. For JSON, quotes, backslashes, control characters, and embedded line breaks are not escaped. An input containing these characters can terminate the intended string, inject additional JSON structure, or make the export syntactically invalid. For CSV, fields are not enclosed in quotes and embedded quotes, commas, carriage returns, and line breaks are not escaped according to CSV rules. More importantly, values beginning with spreadsheet formula prefixes such as `=`, `+`, `-`, or `@` are emitted unchanged. When an exported CSV file is opened in spreadsheet software, a crafted value may be interpreted as a formula rather than inert text. The shell quoting prevents this input from becoming shell command injection inside the exporter itself. The security boundary is crossed later when the generated file is processed by a JSON consumer or spr ...[truncated 1483 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 (12)

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

The skill metadata and manifest claim database/MCP bridging functionality, but the content actually describes a local offline logging/export tool with filesystem persistence. This mismatch can mislead users and higher-level agents into invoking the skill in inappropriate contexts and can cause unexpected storage and handling of sensitive operational data.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

High
Category
Not specified by scanner
Confidence
98% confidence
Finding

The manifest advertises an MCP/database bridge, but the documented behavior is a standalone local CLI logger. In an agent ecosystem, this kind of identity mismatch is dangerous because orchestration logic may grant trust or select the skill based on capabilities it does not actually have, while users may unknowingly feed it sensitive data expecting database tooling rather than persistent local logs.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

High
Category
Not specified by scanner
Confidence
98% confidence
Finding

The script immediately creates a local data directory and appends activity to history logs, even though the skill is described as DB/MCP tooling rather than a local telemetry collector. In this context, users may enter credentials, prompts, schema details, or evaluation data expecting operational processing, but the tool silently stores them on disk, creating confidentiality risk.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

High
Category
Not specified by scanner
Confidence
98% confidence
Finding

The implemented behavior does not match the declared skill purpose of a database/MCP bridge and instead exposes a generic local logging utility. This kind of capability mismatch is dangerous because users or orchestrators may grant trust, invoke it with sensitive DB- or prompt-related material, and unknowingly persist that data locally under misleading branding.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The internal documentation directly contradicts the manifest by presenting a fully offline local toolkit instead of a database/MCP bridge. While this may be documentation drift rather than overt maliciousness, contradictory documentation creates unsafe assumptions about data flow, trust boundaries, and whether information will be transmitted or stored.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The command examples explicitly suggest logging 'API keys' as configuration notes, yet the tool stores entries locally and supports export and search. That encourages users to persist secrets in plaintext logs, increasing the risk of credential disclosure through local compromise, backups, exports, shell history, or accidental sharing.

Content

No source excerpt is available for this finding.

Ssd 3

Medium
Category
Not specified by scanner
Confidence
98% confidence
Finding

The natural-language guidance encourages recording and exporting sensitive secrets, which is especially risky because the tool also provides unified history, search, and export functions. In this skill context, the danger is elevated because users working with AI systems often handle production credentials, provider tokens, and internal configuration details that should never be stored in general-purpose logs.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The file header identifies the artifact as 'Genai Toolkit — ai tool', and the help text repeats 'ai toolkit'. That active documentation conflicts with the manifest's more specific identity and purpose as 'Genai Toolbox' for bridging AI models to databases through MCP.

Content

No source excerpt is available for this finding.

Ssd 3

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The tool persistently records user-provided content across many commands and later exposes that content through recent, search, status, and export functions. This creates a broad secondary disclosure channel for sensitive operational or prompt data that users may not expect from the advertised skill.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
87% confidence
Finding

The manifest scope is specific to database tool setup, engine comparison, and prompt evaluation. Exposing a much wider toolkit surface with unrelated lifecycle commands suggests extra capability beyond that stated purpose, especially since each command just stores arbitrary input rather than performing the declared specialized task.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The export, search, recent, and status features turn the script into a local data harvesting and disclosure surface unrelated to the advertised DB/MCP bridge function. These features increase the blast radius of any sensitive input by making it easy to enumerate, retrieve, and repackage previously stored content.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
99% confidence
Finding

User-supplied input is written verbatim to persistent log files without notice, consent, minimization, or masking. In a genAI/database-tooling context, these inputs can easily include API keys, prompts, dataset fragments, schema details, or other confidential material, leading to unintended local data exposure.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.