Back to skill

Security audit

openclaw venture capitalist

Security checks for vulnerabilities and agentic risk

Overview

The skill does what it claims, but it sends sensitive business inputs and optional API credentials to a cloud service with some under-scoped and under-verified security controls.

Review this carefully before installing if you will submit confidential startup, investment, financial, or customer information. Use the default ZhenCap endpoint only, do not set ZHENCAP_API_URL unless you fully trust the destination, avoid sharing terminal output containing ZHENCAP_API_KEY, and verify the vendor privacy/terms pages and billing controls before using the paid tier.

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

Warning
Location
index.js:8
Finding

Configurable API Endpoint Can Expose API Keys and Sensitive Business Data

Content
View full analysis

Vulnerability Details

File Location: index.js:8-24
Vulnerability Type: Unvalidated destination for authenticated API requests
Risk Level: Medium

Vulnerable Code

javascript
const API_BASE_URL = process.env.ZHENCAP_API_URL || 'https://www.zhencap.com/api/v1';
const API_KEY = process.env.ZHENCAP_API_KEY;

class ZhenCapSkill {
  constructor() {
    // Build headers object conditionally
    const headers = {
      'Content-Type': 'application/json'
    };

    // Only add Authorization header if API key exists
    if (API_KEY) {
      headers['Authorization'] = `Bearer ${API_KEY}`;
    }

    this.client = axios.create({
      baseURL: API_BASE_URL,
      headers: headers
    });
  }

Technical Analysis

The destination of every API request can be overridden through ZHENCAP_API_URL. The implementation does not validate the URL scheme, hostname, port, or origin before attaching the bearer credential.

If the process environment is influenced by an untrusted MCP configuration, deployment script, container configuration, or local user, requests can be redirected to an attacker-controlled server. The same Axios client then sends both the Authorization header and user-supplied analysis inputs to that destination.

The affected payloads include company names, industries, revenue, growth rates, funding stages, team sizes, and other risk-scoring data. A plaintext http:// URL is also accepted, allowing network interception where such traffic is permitted.

Attack Path

  1. An attacker obtains the ability to modify the Skill's environment or MCP launch configuration.
  2. The attacker sets ZHENCAP_API_URL to an attacker-controlled URL, such as https://attacker.example/api/v1.
  3. A user starts the Skill with a valid ZHENCAP_API_KEY.
  4. The user invokes any analysis method.
  5. Axios sends the bearer credential and request body to the attacker-controlled endpoint.

...[truncated 730 chars]

Remediation
View remediation

Remediation Suggestions

  1. Remove production endpoint configurability unless it is operationally required.
  2. Parse the configured value with the standard URL class and reject malformed URLs.
  3. Require the https: scheme.
  4. Enforce an explicit hostname and port allowlist, preferably permitting only www.zhencap.com on port 443.
  5. Before adding the authorization header, verify that the final request origin is the approved ZhenCap origin.
  6. Configure Axios redirect handling so credentials cannot be forwarded to an untrusted redirect destination.
  7. If custom endpoints are needed for development, require a separate explicit development mode and do not attach production credentials to them.
  8. Add automated tests confirming that HTTP URLs, user-information URLs, lookalike domains, unapproved ports, and unapproved hosts are rejected.

T08 · Insecure Dependencies

Note
Location
package.json:18
Finding

Unpinned Dependencies and Missing Lockfile Make Installations Non-Reproducible

Content
View full analysis

Vulnerability Details

File Location: package.json:18-24; no package lockfile is present in the submitted project
Vulnerability Type: Uncontrolled dependency resolution
Risk Level: Low

Vulnerable Code

json
"dependencies": {
  "axios": "^1.6.0"
},
"devDependencies": {
  "jest": "^29.0.0"
},
"mcp": {
  "manifest": "./manifest.json",
  "entry": "./index.js"
}

Technical Analysis

Both dependencies use caret ranges. For example, ^1.6.0 permits npm to resolve later compatible Axios 1.x releases, while ^29.0.0 permits later compatible Jest 29.x releases. The project contains no package-lock.json or equivalent lockfile.

Consequently, a future installation may execute dependency code that differs from the versions originally reviewed. This weakens artifact reproducibility and increases exposure to compromised maintainer accounts, malicious compatible releases, registry incidents, or newly introduced vulnerabilities.

No evidence was found that Axios or Jest is currently malicious. This finding concerns the package's dependency-control mechanism rather than a confirmed malicious dependency.

Attack Path

  1. A dependency publisher account or package release channel is compromised, or an unsafe release is published within the permitted semantic-version range.
  2. A user installs the Skill after that release becomes available.
  3. npm resolves the newer compatible version because no lockfile fixes the dependency graph.
  4. Installation or runtime loads code that was not part of this audit.
  5. Malicious dependency code executes with the permissions of the Node.js process.

Impact Assessment

A compromised runtime dependency could execute with all permissions available to the Skill process, potentially including:

  • Reading environment variables such as ZHENCAP_API_KEY.
  • Reading files accessible to the running user.
  • Sending data over the network.
  • Modifying files ...[truncated 262 chars]
Remediation
View remediation

Remediation Suggestions

  1. Generate and commit a package-lock.json from a trusted environment.
  2. Use npm ci for deployment and CI so installation exactly follows the reviewed lockfile.
  3. Pin direct dependencies to reviewed versions rather than relying only on broad caret ranges.
  4. Review lockfile changes as security-sensitive code changes.
  5. Enable automated vulnerability and dependency-update monitoring.
  6. Verify package integrity and provenance before accepting dependency upgrades.
  7. Exclude development dependencies from production installations where they are unnecessary.

T09 · Insecure Skill Coding Practices

Note
Location
README.md:237
Finding

Troubleshooting Instructions Print the Complete API Key

Content
View full analysis

Vulnerability Details

File Location: README.md:237 and SKILL.md:377
Vulnerability Type: Secret exposure through terminal output
Risk Level: Low

Vulnerable Documentation

bash
echo "$ZHENCAP_API_KEY"

The README presents the instruction in this troubleshooting context:

markdown
### Error: "Invalid API key"

**Solution:**
- Re-generate API key in dashboard
- Check for extra spaces: `echo "$ZHENCAP_API_KEY"`
- Ensure correct API key is copied

Technical Analysis

The recommended command prints the entire bearer credential to standard output. Terminal output may be retained in terminal scrollback, CI logs, remote support sessions, shell recording systems, screenshots, screen sharing, or observability tooling.

The command does not itself transmit the credential, and exploitation requires another party to access or observe the resulting output. Nevertheless, displaying a complete reusable secret is avoidable and conflicts with secret-handling best practices.

Attack Path

  1. A user encounters an authentication problem and follows the documented troubleshooting instruction.
  2. The complete value of ZHENCAP_API_KEY is printed in the terminal.
  3. The output is captured through screen sharing, a support transcript, terminal recording, CI logs, a screenshot, or local terminal history facilities.
  4. An unauthorized party retrieves and reuses the exposed key against the ZhenCap service.

Impact Assessment

This issue does not provide local privilege escalation. A party who obtains the printed key may gain the API access assigned to that credential, potentially consuming paid quota, accessing account-scoped API functionality, or impersonating the affected account when making API requests.

The exact impact depends on server-side permissions, billing controls, expiration, and revocation capabilities associated with the key.

Remediation
View remediation

Remediation Suggestions

  1. Remove instructions that print the complete secret.

  2. Check only whether the variable exists:

    bash
    test -n "$ZHENCAP_API_KEY" && echo "API key is configured" || echo "API key is not configured"
    
  3. If whitespace diagnostics are required, use a local validation script that reports only length or the presence of leading/trailing whitespace without displaying the value.

  4. Warn users not to paste API keys into issue reports, support messages, screenshots, or shared terminal sessions.

  5. Advise immediate revocation and rotation if a key has already been displayed in a logged or shared environment.

  6. Apply the correction consistently to both README.md and SKILL.md.

Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Tool MisuseTool Parameter Abuse, Chaining Abuse, Unsafe Defaults
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
Findings (16)

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The migration guide mentions cloud API integration and that internet is required, but it does not explicitly and prominently warn that user prompts, business details, and potentially sensitive company information will be transmitted off the local machine to ZhenCap for processing. In a tool migrating from fully local processing to cloud-backed analysis, this omission can cause users to unintentionally disclose confidential investment or startup data under the assumption that behavior is similar to v1.0.0.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The report states that all flagged security issues were resolved, but later sections acknowledge that important privacy-policy resources and backend verification steps still remain unfinished. This creates a misleading security posture that could cause reviewers or users to trust the skill more than warranted and proceed without validating unresolved controls.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The document says business-related parameters such as company names, geography, revenue, and growth rates are transmitted to an external API, but it does not prominently warn users that sensitive business data leaves the local environment. Users may unknowingly submit confidential commercial information to a third party without an adequately conspicuous disclosure.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
87% confidence
Finding

The report documents tracking of IP addresses and user-agent fingerprints for quota enforcement, but it is not framed as a prominent user-facing privacy warning. Because these identifiers can be used for monitoring and correlation, burying them in operational text weakens transparency and may expose users to unexpected data collection.

Content

No source excerpt is available for this finding.

Unsafe Defaults

Medium
Category
Tool Misuse
Confidence
75% confidence
Finding

Tool defaults are unsafe or overly permissive (e.g. disabled TLS verification, no authentication, world-writable permissions). Unsafe defaults widen the attack surface.

Content

Scanner excerpt · SECURITY-FIX-REPORT-v2.0.1.md (reported line 248)May include surrounding context.

text

**Consistency achieved across:**
- manifest.json: requiresAuth = false ✅
- SKILL.md: Clear explanation of optional auth ✅
- README.md: Matching auth documentation ✅
- index.js: Conditional Authorization header ✅

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

This section presents vendor identity and privacy concerns as fixed/documented while also admitting that the privacy page, terms page, and contact channels may not yet exist. That contradiction undermines informed consent and due diligence because users may assume legal/privacy resources are available when they are not.

Content

No source excerpt is available for this finding.

Unbounded Resource Access

Medium
Category
Excessive Agency
Confidence
80% confidence
Finding

Skill allows unbounded resource consumption (API calls, storage, compute). Without rate limits or quotas, a compromised or misbehaving agent can cause denial-of-service or cost overruns.

Content

Scanner excerpt · README.md (reported line 54)May include surrounding context.

md
### Paid Tier (API Key Required)

**Unlimited calls** at 0.10-0.20 CNY per call

1. Register at [www.zhencap.com/register](https://www.zhencap.com/register)
2. Generate API key in dashboard

Unbounded Resource Access

Medium
Category
Excessive Agency
Confidence
80% confidence
Finding

Skill allows unbounded resource consumption (API calls, storage, compute). Without rate limits or quotas, a compromised or misbehaving agent can cause denial-of-service or cost overruns.

Content

Scanner excerpt · SECURITY-FIX-REPORT-v2.0.1.md (reported line 240)May include surrounding context.

md
### Paid Tier (API Key Required)

**Unlimited calls** at 0.10-0.20 CNY per call

1. Register at [www.zhencap.com/register](https://www.zhencap.com/register)
2. Generate API key in dashboard

Unbounded Resource Access

Medium
Category
Excessive Agency
Confidence
80% confidence
Finding

Skill allows unbounded resource consumption (API calls, storage, compute). Without rate limits or quotas, a compromised or misbehaving agent can cause denial-of-service or cost overruns.

Content

Scanner excerpt · SKILL.md (reported line 51)May include surrounding context.

md
### Paid Tier (API Key Required)

**Unlimited calls** at 0.10-0.20 CNY per call

1. Register at [www.zhencap.com/register](https://www.zhencap.com/register)
2. Generate API key in dashboard

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The tool documentation sets the default geography to "China" and the surrounding examples and product framing are China-specific, but it does not clearly ask the user to opt into that locale assumption. This can cause the skill to apply a specific regional context by default rather than offering a locale choice.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The method estimateMarketSize defaults geography to 中国, which imposes a specific locale/region assumption in natural-language behavior without offering a user choice or documenting the constraint as region-specific. This matches the policy concern for forced language/locale behavior without explicit opt-in.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
87% confidence
Finding

The manifest’s description, parameter descriptions, defaults, and installation instructions are largely Chinese-language, which can impose a language constraint on users. The file does not indicate that the skill is China-specific or provide any opt-in or alternative language selection for core usage metadata.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
84% confidence
Finding

This markdown file is in scope for SQP-2. The installation and configuration sections tell users that no configuration is required and they can 'just install and use,' but they do not warn there that free-tier operation relies on IP/User-Agent fingerprinting, which is only disclosed later in the document. Because this affects privacy expectations, an earlier user-facing warning would be appropriate.

Content

No source excerpt is available for this finding.

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
94% confidence
Finding

The dependency uses a caret range (^1.6.0) rather than an exact version, so installs may resolve to different patch/minor releases over time. In a security-sensitive agent skill, this weakens reproducibility and can unintentionally introduce vulnerable or malicious upstream changes through the supply chain.

Content

Scanner excerpt · package.json (reported line 19)May include surrounding context.

json
"author": "ZhenCap Team",
  "license": "MIT",
  "dependencies": {
    "axios": "^1.6.0"
  },
  "devDependencies": {
    "jest": "^29.0.0"

Unverifiable Dependency: axios has 16 known advisory(ies) (CVE-2026-44494 (axios Vulnerable to Full Man-in-the-Middle via Prototype Pollution Gadget in `co); CVE-2026-44495 (axios Vulnerable to Credential Theft and Response Hijacking via Prototype Pollut); CVE-2025-62718 (Axios has a NO_PROXY Hostname Normalization Bypass that Leads to SSRF) +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
89% confidence
Finding

axios has multiple known advisories, and because the manifest allows a version range rather than an exact release, it is not possible to verify from this file whether deployed installs avoid affected versions. Given this is an AI-powered investment analysis skill likely making network requests, a vulnerable HTTP client could increase risks such as SSRF, credential leakage, or traffic manipulation depending on how it is used in code.

Content

No source excerpt is available for this finding.

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
84% confidence
Finding

The development dependency jest is also specified with a version range, which reduces build reproducibility and can pull in unexpected upstream changes. While devDependencies are generally less exposed at runtime, they still affect CI, testing, and developer environments and can participate in supply-chain compromise.

Content

Scanner excerpt · package.json (reported line 22)May include surrounding context.

json
"axios": "^1.6.0"
  },
  "devDependencies": {
    "jest": "^29.0.0"
  },
  "mcp": {
    "manifest": "./manifest.json",