Back to skill

Security audit

Huo15 Crm Agent

Security checks for vulnerabilities and agentic risk

Overview

This appears to be a real CRM sales assistant, but it needs Review because its Qichacha API client can send credentials to an arbitrary configured base URL and the README understates that network behavior.

Review this before installing in restricted environments. Use only the official HTTPS Qichacha endpoint unless you fully trust and control a private endpoint, protect the Qichacha key/secret, and require previews plus explicit confirmation before any bulk CRM creation, email, or group-message workflow.

Vulnerability Patterns
  • 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
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
Findings (1)

T09 · Insecure Skill Coding Practices

Warning
Location
src/clients/qichacha.ts:83
Finding

Unrestricted API Base URL Enables Credential Disclosure and Server-Side Request Forgery

Content
View full analysis
{ const timestamp = Math.floor(Date.now() / 1000).toString(); const token = defaultSign(this.apiKey, this.secretKey, timestamp); return { Token: token, Timespan: timestamp }; } private async call( path: string, query: Record, ): Promise> { const url = new URL(this.baseUrl + path); url.searchParams.set('key', this.apiKey); for (const [k, v] of Object.entries(query)) { if (v !== undefined && v !== '') url.searchParams.set(k, String(v)); } try { const response = await fetch(url.toString(), { method: 'GET', headers: this.signHeaders(), signal: AbortSignal.timeout(this.timeoutMs), }); ``` The unrestricted destination is exposed through the plugin configuration: ```json "qichacha_base_url": { "type": "string", "description": "v0.2 起。可选。企查查 API Base URL,默认 https://api.qichacha.net;私有部署或不同套餐可覆盖。" } ``` ### Technical Analysis The `qichacha_base_url` configuration value is used directly to construct an outbound request. The implementation does not: - Require HTTPS. - Restrict the hostname to an approved Qichacha endpoint. - Reject loopback, link-local, private-ne ...[truncated 3022 chars]
Remediation
View remediation
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
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
Findings (29)

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
88% confidence
Finding

This markdown file presents all user-facing natural-language content in Chinese and does not state that the skill is China-specific or that language selection is optional. Per the policy, forcing a specific language without user opt-in is a natural-language policy violation unless the locale constraint is explicitly documented and justified.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
87% confidence
Finding

The README describes workflows for bulk lead enrichment, CRM writes, activity scheduling, message posting, and mass outreach, but it does not clearly warn users about privacy, personal-data handling, or the implications of transferring company/contact data into CRM and third-party services. In a sales/CRM context, this increases the risk of unauthorized processing, over-collection, or accidental bulk outreach using sensitive lead information.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
98% confidence
Finding

The README explicitly claims the skill does not open network connections, yet earlier sections document sales_company_search and sales_company_detail as calling the Qichacha OpenAPI. This kind of documentation mismatch can mislead reviewers, operators, and users about the skill's data flows and trust boundary, causing them to approve or deploy it under false assumptions.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The technical-stack section repeats a false assurance that the plugin opens no network connections, directly contradicting the documented Qichacha-backed search/detail features. False statements about network behavior weaken security review and can lead to improper installation in environments where outbound connectivity or third-party data transfer is restricted.

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
93% confidence
Finding

The skill clearly relies on network-capable behaviors and external services (Qichacha API, WebFetch, searxng, and a companion Odoo skill), but it does not declare an explicit tool scope such as allowed-tools or permissions. That mismatch increases the chance of unintended or overly broad tool access at runtime, weakening least-privilege controls and making prompt-triggered external requests harder to audit.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The trigger list contains broad everyday phrases such as '找客户', '搜企业', '工商信息', and '销售话术', which can cause the skill to activate in contexts broader than the user intended. Because the skill can drive lead generation, external lookups, and draft CRM actions, accidental invocation could expose business data to unnecessary processing or initiate unwanted sales workflows.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The skill explicitly describes batch outbound messaging workflows (odoo_send_email and enterprise chat tools) but does not require a user-facing consent, privacy, or recipient-review warning at the point of use. In a CRM/sales context, this can lead to bulk contact of leads without adequate confirmation, lawful basis checks, or review of message targets, creating privacy, compliance, and reputational risk.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

This markdown file presents the skill planning content only in Chinese and does not indicate that the user can choose another language or that the document is intentionally limited to a Chinese-speaking audience. That can violate language/locale policy when a skill or its instructions effectively force one language without user opt-in.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

The package description forces a Chinese-language experience in the skill metadata, but the file does not state that the skill is China-specific or offer any language/locale opt-in. Under the policy, forcing a specific language without user choice or clear regional justification is a natural-language policy concern.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

This file contains natural-language comments and output strings intended for interpretation by developers or downstream users entirely in Chinese, such as the module description and scoring reasons. Under the policy, forcing a specific language without user opt-in or clear justification is a locale-policy issue.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The file’s user-facing templates and comments are written in Chinese throughout, and the exported pitch content appears intended for direct use by the skill. Because there is no indication that the skill is region-specific or that users can opt into another language, this creates a language/locale policy concern under the rule for natural-language policy violations.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The comments and user-facing stage/action text in this file are exclusively Chinese, which can force a specific language experience on downstream users or operators. The file does not indicate that the skill is region-specific or provide any opt-in or alternative locale handling.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The tool's description is entirely in Chinese and all user-facing status/error strings in the file are also Chinese, which imposes a specific language on users without opt-in. The provided rules treat forced language or locale as a natural-language policy violation unless the skill offers a language choice or clearly documents a justified regional constraint.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The user-facing tool description is entirely in Chinese and presents the skill's behavior, requirements, and warnings only in that language. This creates a locale/language policy issue because the skill implicitly assumes Chinese without offering a user choice or documenting that it is intended only for a Chinese-language environment.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The natural-language description states the tool generates follow-up actions in Chinese and all user-facing strings in the file are hardcoded in Chinese. This imposes a specific language/locale behavior without documenting user choice or opt-in, which matches the language-policy violation criteria.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The user-facing tool description is entirely in Chinese and instructs a specific Chinese-language sales workflow. Under the policy, forcing a specific language without user opt-in is a natural-language locale violation unless the regional constraint is clearly documented and justified.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The hint string returned by the tool is hard-coded in Chinese and provides workflow guidance only in that language. This can violate language/locale policy when users are not given a choice or when the locale restriction is not explicitly justified.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The natural-language description is entirely in Chinese and presents the tool's inputs, outputs, and guidance only in that language. This can violate a language/locale policy when users are not explicitly given a choice or opt-in for Chinese-language interaction.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The tool description is entirely in Chinese, which signals a fixed-language experience. Under the policy, forcing a specific language without user opt-in is a natural-language policy violation unless the locale constraint is explicitly justified, which is not present here.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The first contact message template is always produced in Chinese, regardless of user preference or locale. This is a fixed-language behavior and no opt-in or justification is provided in the file.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The tool description is entirely in Chinese and specifies Chinese labels and output semantics, which constrains interaction to a specific language/locale. The file does not offer any user opt-in, language selection, or documented region-specific justification for this restriction.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The tool description states that it generates sales scripts in Chinese ('生成场景化的财税获客话术') and all parameter descriptions are written as Chinese-only behavior, with no indication that users can choose another language. This is a natural-language locale policy issue because the skill appears to enforce a specific language without opt-in or a clearly justified region-specific constraint.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
91% confidence
Finding

The skill documentation is written wholly in Chinese and does not indicate that users may choose another language or that the Chinese-only presentation is an intentional region-specific limitation. Under the language/locale policy, forcing a specific language without opt-in can be a natural-language policy issue.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
87% confidence
Finding

The name and description force a specific language/locale presentation, and the file does not state that users can choose another language. Under the policy for natural-language issues, a fixed language without user opt-in can be a locale-policy violation.

Content

No source excerpt is available for this finding.

Unverifiable Dependency: openclaw has 16 known advisory(ies) (CVE-2026-53846 (OpenClaw: Workspace .env npm_execpath could influence bundled runtime dependency); CVE-2026-32064 (OpenClaw's andbox browser noVNC observer lacked VNC authentication); CVE-2026-32006 (OpenClaw has a BlueBubbles group allowlist mismatch via DM pairing-store fallbac) +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
72% confidence
Finding

The manifest declares a broad peer dependency on openclaw (>=2026.2.24) even though the platform is reported to have multiple known advisories. Because no safe upper/lower bound is specified, installations may resolve to vulnerable OpenClaw versions, making the skill's execution environment unpredictably exposed to known platform flaws.

Content

No source excerpt is available for this finding.