Back to skill

Security audit

GI ValueSider Superinvestor Data

Security checks for vulnerabilities and agentic risk

Overview

This skill fetches public ValueSider 13F portfolio data and parses it locally, with no evidence of hidden persistence, credential access, or destructive behavior.

Install in a normal least-privileged Python environment, expect outbound requests to valuesider.com when using live fetches, and prefer pinning dependencies or using a lockfile if reproducible installs matter. Confirm before live fetching when a finance request is ambiguous.

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
requirements.txt:1
Finding

Unbounded Third-Party Dependency Versions

Content
View full analysis

Vulnerability Details

File Location: requirements.txt:1-2
Vulnerability Type: Supply-chain exposure through non-reproducible dependency resolution
Risk Level: Medium

text
requests>=2.28.0
beautifulsoup4>=4.11.0

Technical Analysis

Both dependencies use lower-bound-only version constraints. Consequently, pip install -r requirements.txt may install any future release accepted by the configured package index, rather than an exact version reviewed with this Skill. Transitive dependencies are likewise not locked or verified with cryptographic hashes.

This is not evidence that requests or beautifulsoup4 is currently malicious. The weakness is that installation is not reproducible and implicitly trusts future package releases and the configured package source. A compromised package release, package-index account, mirror, or dependency could introduce attacker-controlled installation or runtime behavior without any change to this repository.

Attack Path

  1. An attacker compromises a permitted future release, a transitive dependency, a package publisher account, or the package index/mirror used by the victim.
  2. The victim follows the documented installation process and runs pip install -r requirements.txt.
  3. Because no exact versions or hashes are enforced, pip resolves and installs the compromised package artifact.
  4. Malicious package installation hooks or imported runtime code execute with the privileges of the user or environment performing the installation.
  5. Depending on those privileges, the compromised dependency could access application data, environment variables, network resources, and files available to that account.

Impact Assessment

Successful exploitation could execute arbitrary code within the Python installation or Skill runtime context. The obtainable privileges are limited to those of the user, container, virtual environment, or automation account that ins ...[truncated 500 chars]

Remediation
View remediation

Remediation Suggestions

  1. Pin every direct dependency to an exact, reviewed version rather than using lower-bound-only constraints.
  2. Generate a lock file that includes all transitive dependencies, using a tool such as pip-tools, Poetry, or an equivalent reproducible dependency manager.
  3. Record cryptographic hashes for approved distributions and install with:
    bash
    pip install --require-hashes -r requirements.txt
    
  4. Prefer a controlled package index or trusted internal mirror, and explicitly configure the permitted index source in deployment environments.
  5. Add automated dependency vulnerability and provenance scanning to the release process.
  6. Review and intentionally update locked dependencies on a controlled schedule, testing the parser and network-fetch workflow before publishing each update.
  7. Install and run the Skill in a least-privileged virtual environment or container without unnecessary credentials, sensitive mounts, or host filesystem access.
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (8)

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The README instructs live fetching from external URLs and saving fetched content to local files, but does not warn users that the workflow performs network access and writes data to disk. This reduces informed consent and can surprise users in restricted, privacy-sensitive, or policy-controlled environments where outbound requests or local persistence should be explicit.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The README states that the agent will trigger on broad terms like 'holdings', '13F', 'ValueSider', or a fund manager name, which can cause the skill to activate for loosely related finance prompts without clear user confirmation. In a skill that performs live web fetching, overly broad activation increases the chance of unintended network access and data retrieval beyond what the user explicitly requested.

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
93% confidence
Finding

The skill instructs use of network access (web_fetch, direct HTTP requests) and local file handling (saving fetched content to temp files and parsing them), but it does not declare any explicit tool scope or permissions boundary. This creates an authorization and governance gap: an agent may invoke broader-than-intended capabilities without clear restriction, making unintended external access or local file interaction harder to audit and contain.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
83% confidence
Finding

The natural-language instructions and examples are presented only in Chinese, which can impose a language requirement on users without opt-in. The policy allows locale constraints when clearly documented and justified, but no such justification or alternative language option appears here.

Content

No source excerpt is available for this finding.

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
97% confidence
Finding

The dependency is specified with a lower bound only, so builds may resolve to different versions over time, including vulnerable or breaking releases. This weakens reproducibility and makes it difficult to verify whether the deployed package includes known security fixes.

Content

Scanner excerpt · requirements.txt (reported line 1)May include surrounding context.

text
requests>=2.28.0
beautifulsoup4>=4.11.0

Unverifiable Dependency: requests has 16 known advisory(ies) (CVE-2014-1830 (Exposure of Sensitive Information to an Unauthorized Actor in Requests); CVE-2024-47081 (Requests vulnerable to .netrc credentials leak via malicious URLs); CVE-2024-35195 (Requests `Session` object does not verify requests after making first request wi) +13 more), but the manifest does not pin a version, so it is unknown whether the installed release is affected

Low
Category
Supply Chain
Confidence
94% confidence
Finding

The manifest includes requests without an exact version, and that package has multiple known advisories across its release history. Because the resolved version is unspecified, you cannot verify from this file alone whether installations will receive a safe patched release or an affected one.

Content

No source excerpt is available for this finding.

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
95% confidence
Finding

Using an unpinned beautifulsoup4 version makes installations non-reproducible and can introduce unexpected vulnerable or incompatible releases in future deployments. Even if no specific exploit is cited here, supply-chain risk increases when dependency versions are not fixed.

Content

Scanner excerpt · requirements.txt (reported line 2)May include surrounding context.

text
requests>=2.28.0
beautifulsoup4>=4.11.0

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
95% confidence
Finding

The request headers hard-code Accept-Language: en-US,en;q=0.9, which imposes a specific language/locale choice in the skill's behavior. The file does not offer the user any locale selection or document a justified region-specific requirement.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.