Back to skill

Security audit

Yufluent Clawhub Publish Yufluentcn Visual Craft

Security checks for vulnerabilities and agentic risk

Overview

This cloud-backed ecommerce content skill is not clearly malicious, but it needs Review because it can upload user text or file contents and an API token to a configurable endpoint without strong disclosure or endpoint safeguards.

Install only if you are comfortable sending product copy, listing context, competitor notes, and image descriptions to the Yufluent cloud. Do not pass secret-bearing files as --listing-context, and avoid setting TOKENAPI_BASE_URL to any untrusted or non-HTTPS remote endpoint.

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
scripts/cloud_cli.py:14
Finding

Unrestricted local file upload through a configurable plaintext API endpoint

Content
View full analysis
str: """CLI parameters: read an existing file path; otherwise treat it as literal text.""" raw = (value or "").strip() if not raw: return "" path = Path(raw) if path.is_file(): return path.read_text(encoding="utf-8") return raw ``` `scripts/run.py:40,55-56,68`: ```python parser.add_argument("--listing-context", help="Listing text or file path") if args.listing_context: payload["listing_context"] = read_text_arg(args.listing_context) data = run_skill(SKILL_API_ID, payload, timeout=180.0) ``` `scripts/yufluent_api.py:19-23`: ```python def normalize_api_root(base_url: str) -> str: base = (base_url or "").strip().rstrip("/") if not base: base = "http://localhost:8080/v1" if base.endswith("/v1"): return base return f"{base}/v1" ``` `scripts/yufluent_api.py:49-53`: ```python def _auth_headers(api_key: str) -> dict[str, str]: return { "Authorization": f"Bearer {api_key}", "Accept": "application/json", } ``` `scripts/yufluent_api.py:218-230`: ```python root = base_url or os.getenv("TOKENAPI_BASE_URL", "") url = skill_run_url(root, skill_id) try: resp = _post_json(url, api_key=key, body=payload, timeout=timeout) except requests.RequestException as exc: raise YufluentApiError(f"Request failed: {exc}") from exc if _should_fallback_skill_run(resp.status_code): return _run_skill_via_agent_turn( skill_id, payload, api_key=key, base_url=root, timeout=timeout, ) ``` ### Technical Analy ...[truncated 3424 chars]
Remediation
View remediation
Vulnerability Patterns
  • 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
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
Findings (18)

Tainted flow: 'url' from os.getenv (line 271, credential/environment) → requests.post (network output)

Critical
Category
Data Flow
Confidence
90% confidence
Finding

Credentials or environment variables flow to a network sink. This is a high-confidence indicator of credential exfiltration.

Content

Scanner excerpt · scripts/yufluent_api.py (reported line 150)May include surrounding context.

python
}
    if body is not None:
        kwargs["json"] = body
    return requests.post(url, **kwargs)


def _raise_for_status(resp: requests.Response) -> None:

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

If the client can invoke arbitrary remote skill_id values and report agent outcomes, then its actual capability exceeds the declared single-purpose visual-craft function. That creates a confused-deputy risk: a caller may believe they are authorizing a narrow content-planning skill while actually enabling a general remote execution gateway using their API key.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

If the client can invoke arbitrary remote skill_id values and report agent outcomes, then its actual capability exceeds the declared single-purpose visual-craft function. That creates a confused-deputy risk: a caller may believe they are authorizing a narrow content-planning skill while actually enabling a general remote execution gateway using their API key.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding

If the client can invoke arbitrary remote skill_id values and report agent outcomes, then its actual capability exceeds the declared single-purpose visual-craft function. That creates a confused-deputy risk: a caller may believe they are authorizing a narrow content-planning skill while actually enabling a general remote execution gateway using their API key.

Content

No source excerpt is available for this finding.

Credential Access

High
Category
Privilege Escalation
Confidence
60% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

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

md
## 快速开始(3 步,60 秒)

1. **注册获取 API 密钥** → https://claw.changzhiai.com/login (新用户即送体验积分,无需绑卡)
2. **设置环境变量**:export TOKENAPI_KEY=*** 或写入 .env 文件
3. **运行**:参照下方 Examples 示例执行 python scripts/run.py ...

> 还没注册?前往 https://claw.changzhiai.com/login 免费获取密钥。

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The README presents the skill name, description, modes, and workflow entirely in Chinese, and the example invocation also uses Chinese content. There is no indication that users may choose another language or that the skill is intentionally restricted to a Chinese-only regional/compliance context, which can violate language/locale policy requirements.

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
89% confidence
Finding

The skill advertises environment-variable use, file-path input, and remote API access, but does not declare any explicit tool/permission scope. That weakens least-privilege controls and makes it harder for a host agent to constrain file reads, secret access, and network egress before invocation.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The documentation says listing context or file-path content can be provided, but it does not clearly warn that such content may be transmitted to a remote Yufluent service. This omission undermines informed consent and may expose proprietary product copy, draft listings, or unintended local file contents to an external API.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

Broad trigger phrases like generic A+ content, video script, or image compliance requests increase the chance that the skill auto-activates for ordinary commerce-writing tasks. In this skill's context, that matters because activation may cause data to be sent to a remote service and may bypass a user's expectation that the agent would answer locally.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
87% confidence
Finding

The script sends multiple user-supplied fields such as message, product, listing_context, competitor_ref, and image_description to a remote cloud API via run_skill(), but this file provides no visible disclosure, consent prompt, or data handling warning before transmission. In a skill that may process listing copy, competitive information, and potentially sensitive business content, silent transmission increases privacy and compliance risk even if the behavior is functionally expected.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
84% confidence
Finding

The fallback path can send requests to the generic /agent/turn orchestration endpoint, which is broader than a dedicated skill-run API and may enable behavior outside the declared skill boundary. Because _build_agent_turn_body embeds an imperative natural-language instruction to directly execute the skill and passes arbitrary payload fields as text slots, this increases the attack surface for prompt-injection-like routing errors, unintended tool use, or broader remote processing than users expect.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The constructed user_message explicitly instructs the agent in Chinese, including '请直接执行技能' and '勿追问', which enforces a specific language for downstream interaction. There is no indication that the user can choose language or opt into Chinese-only behavior.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The module sends user-supplied payload data to a remote cloud service, but the code contains no user-facing disclosure, consent check, or minimization controls. In this skill context, inputs may include marketing copy, product assets, compliance notes, or business-sensitive content, so silent transmission to a third-party backend creates a real confidentiality and privacy risk even if it is the intended architecture.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
86% confidence
Finding

The manifest describes a visual-content coaching skill that outputs Markdown plans and coordinates with imaging/rendering workflows. This file also implements record_outcome, which posts telemetry/effect data to /v1/agent/outcomes, a separate outcome-registration capability not described in the manifest. That is a semantic behavior addition rather than an obvious implementation detail of generating A+ pages, video scripts, briefs, or compliance checks.

Content

No source excerpt is available for this finding.

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
95% confidence
Finding

The dependency is specified as requests>=2.31.0 without an upper bound or exact pin, which makes builds non-reproducible and allows unexpected future versions to be installed. This is a real supply-chain hygiene issue because security posture and behavior can change over time, though by itself it is not an immediately exploitable flaw in this file alone.

Content

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

text
requests>=2.31.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
91% confidence
Finding

Because requests is not pinned, it is impossible to verify from this manifest whether the installed version avoids known advisories affecting some requests releases. The danger is indirect but real: deployments may resolve to different versions, including vulnerable ones, creating avoidable exposure to known issues.

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 docstrings at L01, L13, and L24 are written only in Chinese, which imposes a specific language context without offering any user choice or documenting a locale-specific requirement. This matches the policy category for language/locale constraints in natural-language content.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
91% confidence
Finding

The CLI defaults --lang to "zh", which imposes a specific language/locale behavior unless the user notices and overrides it. The file does allow other languages, but the default still forces a locale choice without explicit opt-in or justification in the visible text.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.