Back to skill

Security audit

企查查中转站

Security checks for vulnerabilities and agentic risk

Overview

The skill is mostly a coherent zqcc business-data lookup integration, but its wrapper can send the paid AppKey and query data to an arbitrary base URL if that environment variable is changed.

Review before installing. Use only the default zqcc HTTPS endpoint unless you fully control and trust an alternate endpoint, keep ZQCC_APP_KEY out of prompts/logs/config sharing, and do not submit sensitive or regulated company/person data unless you have authorization. Maintainers should pin publishing tools and isolate the publish environment.

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 (2)

T09 · Insecure Skill Coding Practices

Error
Location
scripts/zqcc.sh:4
Finding

Unrestricted Base URL Allows AppKey Exfiltration

Content
View full analysis

Vulnerability Details

File Location: scripts/zqcc.sh, lines 4-6 and 33-41
Vulnerability Type: Credential exfiltration through an unvalidated destination
Risk Level: High

Vulnerable Code

bash
base_url="${ZQCC_BASE_URL:-https://zqcc.mkstone.club}"
mcp_url="${base_url%/}/mcp/stream"
chat_url="${base_url%/}/api/v1/chat"

post_json() {
  local url="$1"
  local body="$2"

  curl --fail-with-body --silent --show-error \
    --connect-timeout 15 \
    --max-time 300 \
    -X POST "$url" \
    -H "Authorization: Bearer ${ZQCC_APP_KEY}" \
    -H 'Content-Type: application/json' \
    --data "$body"
}

Technical Analysis

The script accepts ZQCC_BASE_URL without validating its scheme, hostname, port, or ownership. The resulting URLs are passed directly to curl, while the ZQCC_APP_KEY credential is attached as a Bearer token.

Consequently, an environment value can redirect authenticated tools-list, tools-call, and chat requests to an arbitrary endpoint. The destination may be an attacker-controlled HTTPS server or even a plaintext HTTP endpoint. This directly contradicts the security rule in SKILL.md, lines 104-105, which states that the AppKey must not be sent outside the trusted zqcc HTTPS domain.

This is not shell command injection because the URL is quoted. The vulnerability is instead a trust-boundary failure: sensitive authentication data is transmitted to a destination selected by an unrestricted environment variable.

Attack Path

  1. An attacker gains the ability to influence the environment used to run the Skill, such as through a wrapper script, deployment configuration, poisoned environment file, or misleading setup instructions.
  2. The attacker sets ZQCC_BASE_URL to an endpoint under their control, for example an attacker-operated HTTPS host.
  3. The user or Agent runs tools-list, tools-call, or chat.
  4. The script constructs the MCP or Chat URL ...[truncated 779 chars]
Remediation
View remediation

Remediation Suggestions

  1. Remove ZQCC_BASE_URL configurability if alternate service endpoints are not required.
  2. If customization is required, parse and validate the URL before constructing authenticated endpoints.
  3. Strictly allowlist trusted HTTPS origins, preferably only https://zqcc.mkstone.club.
  4. Reject plaintext HTTP, URL user information, fragments, unexpected ports, malformed URLs, and unapproved hostnames or subdomains.
  5. Configure curl to permit HTTPS only, including for redirects, using restrictions equivalent to --proto '=https' --proto-redir '=https'.
  6. Disable redirects or ensure credentials are never forwarded across origins.
  7. Resolve configuration from an administrator-controlled source rather than accepting untrusted per-invocation environment values.
  8. Add automated tests confirming that unapproved hosts, non-HTTPS schemes, deceptive suffix domains, and URLs containing user information are rejected before any request is sent.

T08 · Insecure Dependencies

Warning
Location
README.md:59
Finding

Unpinned Global Installation of the ClawHub CLI

Content
View full analysis

Vulnerability Details

File Location: README.md, lines 59-65; duplicated in README.zh-CN.md, lines 101-108
Vulnerability Type: Unpinned third-party dependency installation
Risk Level: Medium

Vulnerable Code

bash
npm install -g clawhub
clawhub login
clawhub skill publish . --slug zqcc --name "企查查中转站" --version 1.0.2 --dry-run
clawhub skill publish . --slug zqcc --name "企查查中转站" --version 1.0.2

Technical Analysis

The publication workflow instructs maintainers to install the latest available clawhub npm package globally without pinning an exact reviewed version or verifying package integrity. The installed package can therefore change independently of the audited project.

npm packages can execute lifecycle scripts during installation, and the installed CLI subsequently runs with the invoking user's privileges. A compromised package release, registry account, dependency, or unexpected future version could execute arbitrary local code. Global installation also increases the persistence and scope of the installed executable compared with a project-local, locked dependency.

Attack Path

  1. The clawhub package, one of its transitive dependencies, or its registry publishing account is compromised, or an unsafe future release is published.
  2. A project maintainer follows the documented command npm install -g clawhub.
  3. npm retrieves the current package version rather than a previously reviewed and pinned version.
  4. Malicious package code executes through an installation lifecycle script or when the maintainer invokes clawhub login or clawhub skill publish.
  5. The malicious code accesses data available to the maintainer process, potentially including publishing credentials and repository contents.

Impact Assessment

Exploitation could execute arbitrary code with the privileges of the user running npm. Potential consequences include theft of ClawHub credentials, source-code ...[truncated 391 chars]

Remediation
View remediation

Remediation Suggestions

  1. Pin the CLI to an exact, reviewed version rather than installing the latest release.
  2. Prefer a project-local development dependency governed by a committed lockfile instead of a global installation.
  3. Use deterministic installation commands such as npm ci in a dedicated publishing environment.
  4. Verify package provenance and integrity before installation.
  5. Disable npm lifecycle scripts where compatible with the reviewed CLI.
  6. Run publishing operations in an isolated, least-privileged container or CI job with narrowly scoped, short-lived credentials.
  7. Keep the pinned version synchronized in all documentation files.
  8. Review dependency changes explicitly before updating the pinned CLI version.
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (9)

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The README describes forwarding enterprise queries through the zqcc relay as MCP and Chat API access, but it does not clearly warn users that their prompts, company names, and related business query data are transmitted to a third-party service. This creates a transparency and privacy risk because users or downstream agents may send sensitive commercial investigation data off-platform without informed consent.

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
91% confidence
Finding

The skill requires shell access via local scripts and external network calls but does not declare any explicit tool restrictions such as permissions or allowed-tools. That gap can let an agent invoke broader shell capabilities than intended, increasing the chance of command execution, secret exposure, or misuse of the provided AppKey beyond the documented workflow.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

This file catalogs tools that can retrieve highly sensitive company and executive data, including contact details, risk records, legal proceedings, and historical personal/business associations, but provides no privacy, legal-use, or authorization guidance. In the context of a discovery directory for 185 data-access functions, that omission increases the likelihood of misuse, overcollection, or unlawful querying by downstream users or agents.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
70% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · scripts/zqcc.sh (reported line 34)May include surrounding context.

sh
local url="$1"
  local body="$2"

  curl --fail-with-body --silent --show-error \
    --connect-timeout 15 \
    --max-time 300 \
    -X POST "$url" \

Scope Creep

Low
Category
Excessive Agency
Confidence
70% confidence
Finding

Skill's behavior or capabilities extend beyond its stated purpose. Scope creep allows an agent to perform actions unrelated to its documented functionality, increasing the attack surface.

Content

Scanner excerpt · LICENSE (reported line 12)May include surrounding context.

text
permit persons to whom the Software is furnished to do so.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
90% confidence
Finding

The text says "SKILL.md 是默认中文 Agent 指令," which sets a default language behavior in natural language without mentioning an option for other languages or user preference. This can violate language/locale policy when a skill forces a specific language absent opt-in or clear justification.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
78% confidence
Finding

The file title and registration steps require interaction with Chinese-language flows such as mainland China mobile login, while the document does not state that the skill is China-specific or that Chinese is required by design. Under the language/locale policy, forcing a specific language or locale without opt-in or justification can be a policy issue.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
89% confidence
Finding

The document states that the server retains bounded recent history by AppKey and session ID, but it does not clearly warn users not to send sensitive personal, credential, or regulated data through chat sessions. In a business-information lookup skill, users may reasonably paste sensitive company or personal data, so the lack of an explicit retention/privacy warning can lead to avoidable data exposure to the service operator and persistence beyond the immediate request.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
84% confidence
Finding

The title and descriptive text are presented only in Chinese, and there is no note offering alternative languages or documenting that the locale restriction is intentional. The policy requires flagging language/locale constraints when a skill forces a specific language without user opt-in.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.