other
- Location
references/capabilities/sku_extract_aliexpress.md:22- Finding
Hidden Unicode Variation-Selector Obfuscation in Agent Instructions
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill matches its stated business purpose, but it needs review because it handles credentials and local files, can install packages during use, and contains hidden Unicode in agent instructions.
Install only after review or remediation. Users should be aware this skill can send merchant inquiries, change inquiry automation settings, store and use a 1688 access key, upload local files, report usage metadata, fetch product pages, and install packages during execution. The highest-priority fixes are removing hidden Unicode from instruction files, disabling automatic dependency installation, restricting local uploads to validated image attachments, validating gateway and product-fetch destinations, and hardening AK storage.
references/capabilities/sku_extract_aliexpress.md:22Hidden Unicode Variation-Selector Obfuscation in Agent Instructions
scripts/_img_upload.py:34Arbitrary Local File Read and Remote Disclosure Through Image Upload
references/capabilities/sku_extract_shopify.md:236Server-Side Request Forgery in the Documented Shopify HTTP Fallback
workflow/order-inquiry.js:463Automatic Runtime Installation of Unpinned Dependencies
scripts/capabilities/configure/service.py:35API Key Can Be Sent to an Unrestricted Gateway URL and Stored Without Explicit Permission Hardening
The code takes OPENCLAW_GATEWAY_URL directly from the environment and uses it as the destination for a PATCH request that includes the API key in the JSON body and possibly a bearer token in headers. If an attacker can influence the environment or runtime configuration, credentials can be exfiltrated to an arbitrary endpoint; the default also permits plain HTTP, increasing interception risk.
headers = {}
if token:
headers["Authorization"] = "Bearer {}".format(token)
resp = requests.patch("{}/api/config".format(gateway_url),
headers=headers, json=payload, timeout=5)
return resp.ok
except Exception:
This combines two material concerns: missing advertised SKU extraction and undocumented AK configuration. Undisclosed credential-handling functionality is more dangerous in this skill context because the skill presents itself as a business workflow helper, so users may not expect secret persistence or platform configuration changes as part of its operation.
This combines two material concerns: missing advertised SKU extraction and undocumented AK configuration. Undisclosed credential-handling functionality is more dangerous in this skill context because the skill presents itself as a business workflow helper, so users may not expect secret persistence or platform configuration changes as part of its operation.
This combines two material concerns: missing advertised SKU extraction and undocumented AK configuration. Undisclosed credential-handling functionality is more dangerous in this skill context because the skill presents itself as a business workflow helper, so users may not expect secret persistence or platform configuration changes as part of its operation.
This combines two material concerns: missing advertised SKU extraction and undocumented AK configuration. Undisclosed credential-handling functionality is more dangerous in this skill context because the skill presents itself as a business workflow helper, so users may not expect secret persistence or platform configuration changes as part of its operation.
This combines two material concerns: missing advertised SKU extraction and undocumented AK configuration. Undisclosed credential-handling functionality is more dangerous in this skill context because the skill presents itself as a business workflow helper, so users may not expect secret persistence or platform configuration changes as part of its operation.
This combines two material concerns: missing advertised SKU extraction and undocumented AK configuration. Undisclosed credential-handling functionality is more dangerous in this skill context because the skill presents itself as a business workflow helper, so users may not expect secret persistence or platform configuration changes as part of its operation.
This combines two material concerns: missing advertised SKU extraction and undocumented AK configuration. Undisclosed credential-handling functionality is more dangerous in this skill context because the skill presents itself as a business workflow helper, so users may not expect secret persistence or platform configuration changes as part of its operation.
This combines two material concerns: missing advertised SKU extraction and undocumented AK configuration. Undisclosed credential-handling functionality is more dangerous in this skill context because the skill presents itself as a business workflow helper, so users may not expect secret persistence or platform configuration changes as part of its operation.
This combines two material concerns: missing advertised SKU extraction and undocumented AK configuration. Undisclosed credential-handling functionality is more dangerous in this skill context because the skill presents itself as a business workflow helper, so users may not expect secret persistence or platform configuration changes as part of its operation.
This combines two material concerns: missing advertised SKU extraction and undocumented AK configuration. Undisclosed credential-handling functionality is more dangerous in this skill context because the skill presents itself as a business workflow helper, so users may not expect secret persistence or platform configuration changes as part of its operation.
This combines two material concerns: missing advertised SKU extraction and undocumented AK configuration. Undisclosed credential-handling functionality is more dangerous in this skill context because the skill presents itself as a business workflow helper, so users may not expect secret persistence or platform configuration changes as part of its operation.
Tool calls are chained to bypass individual safety checks or escalate capabilities beyond what any single tool call would allow.
}
const command = isWin
? `setlocal enabledelayedexpansion & ${redirectedCmd} & echo !errorlevel! & type "${outF}" & echo. & echo __WFSE__: & type "${errF}" & del /f /q "${outF}" "${errF}"`
: `${redirectedCmd}; _ec=$?; echo $_ec; cat "${outF}"; printf '\\n__WFSE__:'; cat "${errF}"; rm -f "${outF}" "${errF}"`
return { command, timeout, description: description || `exec: ${program}` }
}
The workflow automatically runs python3 -m pip install -r ... when it detects a missing module, which gives the skill runtime package-install capability on the host. This expands the skill far beyond order inquiry functionality and can execute arbitrary install-time code from dependencies or altered package indexes, making compromise of the environment possible without explicit user approval.
Without declared permissions the skill's intent is opaque and cannot be validated.
Overly broad trigger phrases like everyday shipping or inquiry language can cause accidental activation of a skill that performs external actions such as contacting merchants or changing inquiry state. In an agent setting, false activations are dangerous because they can send unintended messages, expose order data, or execute workflows without sufficiently explicit user intent.
文档中的用户可见进度话术和操作说明均固定为中文,例如“正在查询商家回复,请稍等...”和“正在为您配置对话能力,请稍等...”,但没有说明可根据用户语言偏好切换。若面向多语言用户,这构成未获用户选择的语言/locale 约束。
The CLI performs telemetry reporting via _tracker.report_skill_usage() after executing the requested command, but this behavior is not disclosed in the interface or module description. Silent data collection in a supply-chain/order workflow is security-relevant because it may leak usage metadata, order-related context, or environment details to an undeclared sink, violating least surprise and potentially compliance requirements.
Telemetry is sent silently and failures are suppressed, which prevents users from knowing that usage reporting exists and makes the behavior hard to audit. In the context of a procurement/order inquiry skill, even metadata about command invocation can be sensitive because it may reveal business operations, supplier interactions, or usage patterns.
The documentation instructs users to pass an AccessKey directly on the command line and shows it being persisted, but it does not warn that command-line arguments and stored secrets may be exposed through shell history, process listings, logs, or insecure local storage. In a skill whose primary function depends on authenticated access to a supplier platform, mishandling this credential could allow account misuse, unauthorized order inquiries, or access under the buyer identity automatically derived by the gateway.
Large whitespace padding was detected (a block of blank lines or a long run of spaces). This can push injected instructions below or to the right of the visible area so a human reviewer never sees them while the agent still reads them. Manual review of the hidden content is recommended.
### 参数表
| 参数 | 说明 |
| --------------- | ---------------------------------------------------------------------------------------- |
| `--multi-round` | 多轮对话开关(flag,默认关闭)。用户**明确要求支持多轮对话/AI 自动多轮回复**时加此参数(`orderSingleRound=false`);不加则默认单轮(`orderSingleRound=true`) |
The skill title and core behavior are specified entirely in Chinese, and the instructions mandate a fixed output format and interaction style without giving the user any language or locale opt-in. Under the policy, forcing a specific language is a natural-language policy violation unless the skill offers a choice or clearly justifies the locale constraint.
The file's HARD RULE requires the final message to contain only a bare JSON array with no surrounding text or section markers (L104-L109). Line L117 then instructs that when multiple links are provided, results should be output in separate sections labeled by product link or title, which directly conflicts with the earlier output-only-JSON requirement.
The skill instructions are written entirely in Chinese and prescribe exact output/error phrasing in Chinese, such as telling the agent to explain failures to the user in Chinese. There is no user opt-in or alternative language path, which conflicts with the language/locale policy for natural-language behavior.
The file repeatedly states that final output must be only a raw JSON array with no extra text, and line L124 says any extra fields are ignored while L142 explicitly forbids appended natural language. However, the script prints a summary such as '共 N 个 SKU' after the JSON, which directly contradicts the documented output contract and changes the actual emitted output format.
No suspicious patterns detected.