Back to skill

Security audit

CSV Data Explorer

Security checks for vulnerabilities and agentic risk

Overview

This CSV helper mostly matches its stated purpose, but its filter feature uses unsafe expression evaluation that could run unintended code if given a malicious condition.

Install only if you are comfortable reviewing or constraining the filter feature. Avoid running filter conditions copied from untrusted sources, use fresh output filenames to prevent overwrites, and treat exported CSVs from untrusted input as unsafe to open directly in spreadsheet software unless sanitized.

Vulnerability Patterns
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • 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
Findings (3)

T09 · Insecure Skill Coding Practices

Error
Location
scripts/main.py:183
Finding

Arbitrary Code Execution Through User-Controlled Pandas Query

Content
View full analysis
value' or 'column == \"string\"'") return df ``` ### Technical Analysis The `--where` command-line argument, or the condition entered in interactive mode, is passed to `DataFrame.query()` using the Python evaluation engine. This makes the filtering expression an executable expression rather than a strictly parsed comparison. The preceding substring blacklist is not an adequate security boundary. It only rejects expressions containing `import`, `exec`, `eval`, or `__`. It does not enforce a grammar or prevent access to other objects and callable attributes available through the pandas evaluation environment. A crafted expression can therefore invoke a reachable dangerous function without containing any blocked substring. Even if the resulting expression is not a valid boolean filter, its side effects may occur before pandas reports an error. ### Attack Path 1. An attacker controls a condition supplied through `filter --where` or convinces a user or automation agent to process an attacker-provided condition. 2. The attacker constructs a pandas expression that reaches a command-execution function through an object available to the query environment while avoiding the four blocked substrings. 3. The blacklist accepts the expression. 4. `df.query(condition, engine='python')` evaluates it in the local Python pro ...[truncated 825 chars]
Remediation
View remediation
numeric_value`. - Reject function calls, attribute access, indexing into arbitrary objects, `@` references, and all syntax outside the supported grammar. - Return a failure rather than the original unfiltered DataFrame when a condition is invalid. Returning the full dataset can cause unintended disclosure or export. - Add regression tests containing known expression-injection patterns and verify that no callable object can be reached. - If a third-party expression parser is used, configure an explicit AST-node allowlist and ensure that evaluation cannot access Python globals, locals, built-ins, or object attributes. ]]>

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/main.py:326
Finding

Spreadsheet Formula Injection in Exported CSV Files

Content
View full analysis
Remediation
View remediation

T08 · Insecure Dependencies

Note
Location
SKILL.md:153
Finding

Unpinned Third-Party Dependency Installation

Content
View full analysis
Remediation
View remediation
Vulnerability Patterns
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • 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
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (7)

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
70% confidence
Finding

Without declared permissions the skill's intent is opaque and cannot be validated.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The manifest description emphasizes exploring, filtering, summarizing, and visualizing CSV data directly in the terminal. However, the code includes persistent file-writing behavior by saving histogram images to PNG files and exporting filtered data to CSV/JSON, which goes beyond a purely terminal-based explorer.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
84% confidence
Finding

The export feature writes to any user-supplied path with no validation, overwrite protection, or explicit confirmation. In an agent-driven or automated context, this can overwrite arbitrary local files the process has permission to modify, causing data loss or unintended filesystem changes.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
85% confidence
Finding

This markdown file documents commands that write output files, such as --output filtered.csv, but provides no user-facing warning about file creation or possible overwrite effects. Under the markdown criteria for missing user warnings, behaviors affecting user data should be disclosed.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
81% confidence
Finding

The feature description explicitly says results can be exported to new CSV/JSON files, which affects user data and filesystem state, but no caution or disclosure is provided in the skill description. A short warning would help users understand that the tool writes files as part of its operation.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
88% confidence
Finding

The skill advertises exporting filtered results to CSV/JSON files but does not warn users about overwriting existing files or modifying local data. In a terminal workflow, this can lead to accidental data loss or unintended modification of user files, especially if output paths are reused or user-supplied.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
79% confidence
Finding

The matplotlib path saves a generated histogram image to a file, which changes the user's filesystem. The code announces the saved file afterward, but it does not disclose beforehand in help text or comments that invoking this option creates a PNG output file.

Content

No source excerpt is available for this finding.