Back to skill

Security audit

finance-analyzer

Security checks for vulnerabilities and agentic risk

Overview

The skill is a coherent financial spreadsheet analyzer with expected local file reading and optional JSON export, but users should treat dependency installation and output-file overwrites carefully.

Install this only if you are comfortable running a local Python script on financial spreadsheets. Prefer a dedicated virtual environment, avoid privileged or system-wide pip installs, review the spreadsheet before processing, and only use --output with a deliberate path because it can overwrite an existing JSON file and persist sensitive extracted financial data.

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

T08 · Insecure Dependencies

Warning
Location
SKILL.md:24
Finding

Unpinned Third-Party Dependency Installation

Content
View full analysis

Vulnerability Details

File Location: SKILL.md, lines 24–29
Vulnerability Type: T08: Insecure Dependencies
Risk Level: Medium

Vulnerable Code

markdown
### Step 2: Install Dependencies

Before running the analysis script, ensure required Python packages are available:

```bash
pip install pandas openpyxl
text

### Technical Analysis

The installation command does not pin dependency versions, verify package hashes, or specify an approved package index. Consequently, `pip` resolves mutable package releases from whichever repository is configured in the user's environment.

This prevents the installed code from being reliably tied to reviewed artifacts. A compromised upstream release, package repository, mirror, or local `pip` configuration could supply malicious dependency code. Installation into the active Python environment may also modify dependencies used by unrelated applications.

The audited project does not itself contain a malicious package or remote execution routine. The risk arises from instructing users to install uncontrolled third-party artifacts.

### Attack Path

1. An attacker compromises an upstream package release, configured package repository, or package mirror.
2. Alternatively, an attacker modifies the victim's `pip` configuration so package resolution uses a malicious index.
3. The user follows the Skill's setup instructions and runs:
   ```bash
   pip install pandas openpyxl
  1. pip resolves and installs the attacker-controlled artifact because no trusted version, hash, or repository constraint is enforced.
  2. Malicious code may execute during package installation or when analyze_financials.py imports pandas.
  3. The payload runs with the permissions of the user who performs the installation or launches the analyzer.

Impact Assessment

Successful exploitation could execute arbitrary Python code with the invoking user's privileges. Depending on those privileges and the environment, the attack ...[truncated 370 chars]

Remediation
View remediation

Remediation Suggestions

  1. Add a reviewed dependency lock file containing exact versions and cryptographic hashes.
  2. Install dependencies with hash verification, for example:
    bash
    python3 -m venv .venv
    . .venv/bin/activate
    python3 -m pip install --require-hashes -r requirements.txt
    
  3. Populate requirements.txt with reviewed, pinned artifacts, for example:
    text
    pandas==<reviewed-version> --hash=sha256:<reviewed-hash>
    openpyxl==<reviewed-version> --hash=sha256:<reviewed-hash>
    
    Include and hash required transitive dependencies as well.
  4. Document and enforce an approved HTTPS package index or internal artifact repository.
  5. Avoid system-wide or privileged installation. Use a dedicated virtual environment with only the permissions required to read the input workbook and write the requested result.
  6. Add automated dependency scanning and a controlled process for reviewing and updating pinned versions.
Vulnerability Patterns
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • 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
Findings (8)

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
93% confidence
Finding

The skill instructs the agent to run a script with an optional --output <output.json> parameter, which introduces file-write capability, but the manifest does not declare any corresponding tool scope or permission boundary. This is dangerous because it can cause undeclared modification of the local workspace or user files, reducing transparency and making it easier for a skill to write artifacts without explicit user awareness or policy enforcement.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The trigger description is broad enough to activate on generic requests about financial reports, metrics, or spreadsheet interpretation, which can cause the skill to run in more situations than necessary. Over-broad activation increases the chance that the agent will execute package installation or file-processing instructions on untrusted files when a simpler, non-executing response would have sufficed.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

Natural-language output strings such as formulas and warnings are emitted in Chinese regardless of user preference, while the CLI description and other interface text are in English. This can violate language/locale policy because the skill forces a specific language without opt-in or clear justification.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The manifest frames this skill as extracting data from Excel/CSV files and calculating financial metrics, which implies read-oriented analysis. The code additionally supports --output and writes JSON results to a caller-specified path, expanding behavior beyond the described read/analyze scope.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
89% confidence
Finding

The skill documents an --output <output.json> option that writes results to disk but does not prominently warn the user that running the workflow may create or overwrite files. Even though the output is framed as optional, silent file creation/modification can surprise users and, in shared or sensitive directories, lead to accidental data loss or unwanted persistence of extracted financial information.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
93% confidence
Finding

This markdown file contains natural-language content exclusively in Chinese, starting from the title and continuing throughout the document. Under the language/locale policy rule, forcing a specific language without user opt-in can be a policy violation when no rationale or alternative is provided.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Low
Category
Not specified by scanner
Confidence
90% confidence
Finding

The docstring's Output section states that the script 'Prints a JSON object' containing parsed data, metrics, and warnings. However, when --output is supplied, the code writes the JSON to disk and prints only 'Results saved to ...', which contradicts the documented behavior.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
94% confidence
Finding

The script opens a user-specified path with write mode ('w') and will silently overwrite an existing file. In agent or automated environments, a crafted output path could destroy or replace important local files accessible to the process, causing integrity loss even though no privilege escalation occurs.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.