Back to skill

Security audit

Financial Analyzer

Security checks for vulnerabilities and agentic risk

Overview

The skill is a local financial-analysis tool, but its financial health scoring has under-disclosed assumptions and its install command adds unnecessary supply-chain risk.

Install only after reviewing the financial-method limitations. Treat generated scores as rough calculations, not investment advice, and remove or pin the unused dependency install command before use in a sensitive environment.

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:55
Finding
Unpinned and Unnecessary Third-Party Dependencies<![CDATA[ ## Vulnerability Details **File Location**: `SKILL.md`, line 55 **Vulnerability Type**: Unpinned third-party dependency installation **Risk Level**: Medium ### Vulnerable Code ```bash pip install numpy pandas ``` ### Technical Analysis The installation instructions retrieve mutable, unpinned versions of `numpy` and `pandas` and their transitive dependencies. No lock file, exact version constraints, or package hashes are provided. Consequently, the code ultimately installed can change after the Skill has been reviewed. Python package installation may execute package-controlled build or installation logic. If an upstream release or transitive dependency is compromised, following this command could execute attacker-controlled code with the privileges of the user running `pip`. The reviewed implementation in `financial_analyzer.py` imports only Python standard-library modules. Neither `numpy` nor `pandas` is imported, making this supply-chain exposure unnecessary for the current implementation. ### Attack Path 1. An attacker compromises a future release of one of the named packages or a dependency resolved by the package manager. 2. A user follows the installation command in `SKILL.md`. 3. `pip` resolves the mutable package specification to the compromised release. 4. Malicious build or installation logic executes in the installation environment. 5. The payload acts with the permissions and accessible resources of the user running `pip`. This path depends on an upstream supply-chain compromise; the audit found no evidence that the currently named packages are malicious. ### Impact Assessment Successful exploitation could permit arbitrary code execution under the installing user's account. The accessible scope could include files, environment variables, credentials, and network resources available to that account. Elevated impact is possible if installation is performed from a privileged account. The reviewed project itself does not request ele ...[truncated 76 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Remove the `pip install numpy pandas` instruction while these packages remain unused. 2. If future functionality requires them, pin exact reviewed versions in a dependency or lock file. 3. Use cryptographic hashes for all direct and transitive packages, such as with `pip install --require-hashes`. 4. Restrict package resolution to an explicitly trusted package index. 5. Install dependencies in an isolated virtual environment under a non-privileged account. 6. Add automated dependency vulnerability and provenance checks to the release process. 7. Review and update pinned dependencies through a controlled, tested upgrade workflow. ]]>
Vulnerability Patterns
  • 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
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
Findings (3)

Intent-Code Divergence

Medium
Confidence
93% confidence
Finding
The Piotroski F-Score implementation claims to evaluate all 9 criteria but unconditionally marks three criteria as passed by assumption. This produces misleadingly optimistic health scores and can bias downstream risk and investment conclusions, which is especially dangerous in a financial analysis skill because users may treat these outputs as evidence-based assessments.

Intent-Code Divergence

Medium
Confidence
99% confidence
Finding
The risk assessment function calls nonexistent methods on the FinancialStatements object (`fs.debt_to_equity(...)` and `fs.interest_coverage(...)`) instead of evaluating computed values. In practice this will raise an exception during analysis, causing denial of service for any caller that reaches this path and preventing delivery of risk results in a finance-focused tool where users may rely on the output for decisions.

Natural-Language Policy Violations

Low
Confidence
89% confidence
Finding
The analyzer initializes with a hard-coded default currency of "CNY", which imposes a specific locale convention unless the caller overrides it. The file does not indicate that this China-specific default is intentional or region-scoped, so it can conflict with language/locale policy expectations for neutral defaults or user choice.

Static analysis

No suspicious patterns detected.