Back to skill

Security audit

online-shopping-discount

Security checks for vulnerabilities and agentic risk

Overview

This shopping discount skill mostly matches its stated purpose, but it automatically sends a stable device identifier to a remote service and handles cached credentials in ways users may not expect.

Review this skill before installing. It contacts a remote shopping API, registers an account, stores credentials locally, and may send your machine UUID or machine-id unless you provide a username yourself. Prefer using an explicit throwaway username, avoid printing the credential cache, and install only if you are comfortable with the remote service receiving shopping queries and account identifiers.

Vulnerability Patterns
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
  • 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)

T05 · Unauthorized Access and Privilege Escalation

Warning
Location
scripts/register.sh:49
Finding

Persistent Device Identifier Collected and Transmitted to an External Service

Content
View full analysis
/dev/null 2>&1; then uuid=$(ioreg -rd1 -c IOPlatformExpertDevice 2>/dev/null | awk -F'"' '/IOPlatformUUID/ {print $4; exit}') fi elif [[ "$OSTYPE" == "linux"* ]] || [[ "$OSTYPE" == "gnu"* ]]; then if [ -r /sys/class/dmi/id/product_uuid ]; then uuid=$(cat /sys/class/dmi/id/product_uuid 2>/dev/null) elif [ -r /etc/machine-id ]; then uuid=$(cat /etc/machine-id 2>/dev/null) fi elif [[ "$OSTYPE" == "msys"* ]] || [[ "$OSTYPE" == "cygwin"* ]] || [[ "$OSTYPE" == "win32"* ]]; then if command -v powershell.exe >/dev/null 2>&1; then uuid=$(powershell.exe -NoProfile -Command "(Get-CimInstance Win32_ComputerSystemProduct).UUID" 2>/dev/null | tr -d '\r') elif command -v pwsh >/dev/null 2>&1; then uuid=$(pwsh -NoProfile -Command "(Get-CimInstance Win32_ComputerSystemProduct).UUID" 2>/dev/null | tr -d '\r') elif command -v wmic >/dev/null 2>&1; then uuid=$(wmic csproduct get UUID 2>/dev/null | awk 'NF && $0 !~ /UUID/ {print; exit}') fi else if [ -r /sys/class/dmi/id/product_uuid ]; then uuid=$(cat /sys/class/dmi/id/product_uuid 2>/dev/null) elif [ -r /etc/machine-id ]; then uuid=$(cat /etc/machine-id 2>/dev/null) fi fi uuid=$(echo "$uuid" | tr -d '[:space:]"') echo "$uuid" } ``` ```bash local device_uuid_used=false if [ -z "$username" ]; then local device_uuid device_uuid=$(get_device_uuid) if [ -n "$device_uuid" ]; then username="$device_uuid" device_uuid_used=true el ...[truncated 2892 chars]
Remediation
View remediation
/dev/null 2>&1; then openssl rand -hex 16 else tr -dc 'a-f0-9'

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/search_products.sh:73
Finding

Credential Exposed Through Process Arguments and GET Query Parameters

Content
View full analysis
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • 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 (33)

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding

The skill depends on external credentials and remote API access while the declared purpose under-describes those external interactions and overstates implemented capabilities such as recommendation and link generation logic. Undisclosed external access is risky because users and orchestrators may approve a benign-looking shopping skill without realizing it performs authenticated network operations and token handling.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

The skill depends on external credentials and remote API access while the declared purpose under-describes those external interactions and overstates implemented capabilities such as recommendation and link generation logic. Undisclosed external access is risky because users and orchestrators may approve a benign-looking shopping skill without realizing it performs authenticated network operations and token handling.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
90% confidence
Finding

The skill depends on external credentials and remote API access while the declared purpose under-describes those external interactions and overstates implemented capabilities such as recommendation and link generation logic. Undisclosed external access is risky because users and orchestrators may approve a benign-looking shopping skill without realizing it performs authenticated network operations and token handling.

Content

No source excerpt is available for this finding.

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
# scripts/search_products.sh

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
# scripts/search_products.sh

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
# scripts/search_products.sh

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
# scripts/search_products.sh

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
# scripts/search_products.sh

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
# scripts/search_products.sh

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
# scripts/search_products.sh

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
# scripts/generate_link.sh

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
# scripts/generate_link.sh

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
# scripts/generate_link.sh

Context-Inappropriate Capability

High
Category
Not specified by scanner
Confidence
98% confidence
Finding

The script collects a persistent device identifier (IOPlatformUUID, product_uuid, machine-id, or Windows UUID) and, when available, uses it as the username sent to a remote registration endpoint. For a shopping discount skill, this hardware-derived identifier is not necessary for core functionality and creates an unnecessary device fingerprint that enables cross-session tracking, correlation, and privacy loss if the service or logs are compromised.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% 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 · EXAMPLE.md (reported line 76)May include surrounding context.

md
🔗 购买链接:https://s.click.taobao.com/xxx

📱 二维码:https://api.example.com/qr/xxx.png

⏰ 有效期:7天(至 2026-03-16)

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

Manifest 仅声明“查找优惠商品信息、生成优惠建议和优惠链接”,并列举商品搜索、价格比较、优惠推荐和链接生成。L283-L296 额外描述了持续性的价格监控与后续通知能力,这属于长期跟踪/提醒功能,不是前述购物查询与链接生成的直接实现细节。

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The examples normalize automatic credential registration, local storage, refresh, and cross-session reuse without clear user-facing disclosure or consent about how credentials are stored and shared. This can lead to unsafe deployment assumptions, especially in shared agents, multi-tenant environments, or systems where local files may be accessible to other processes.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The document explicitly instructs viewing the local credential cache file with cat scripts/.credential_cache | jq ., exposing secret material that is not necessary for normal shopping-query functionality. Encouraging direct credential inspection increases the chance of secret disclosure through logs, transcripts, screenshots, or model output.

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
95% confidence
Finding

The skill instructs the agent to execute shell scripts (register.sh, search_products.sh, generate_link.sh) but does not declare any explicit tool scope or allowed-tools boundary. This creates an authorization ambiguity where a host agent may invoke shell access more broadly than intended, increasing the chance of unsafe command execution or policy bypass.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
82% confidence
Finding

The entire skill description, prompts, and example interactions are written exclusively in Chinese, and the skill presents Chinese-only response templates without any opt-in or alternative language behavior. This can violate language/locale policy when a user has not chosen Chinese or may prefer another language.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The trigger keywords are extremely broad (买, 购物, buy, discount, etc.), making the skill likely to activate in ordinary conversation far beyond narrowly intended contexts. Over-broad activation is dangerous here because activation leads to shell-driven registration, credential use, and network queries, potentially causing unintended external actions or data disclosure from casual user prompts.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The documentation describes automatic collection and transmission of the local machine's device UUID during registration, but provides no clear consent flow, privacy notice, or explanation of why this sensitive identifier is needed. This creates a privacy/security issue because persistent hardware identifiers can be used to track users or correlate activity across environments, especially when silently sent to a backend service.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The README states that if no username is provided, the registration script automatically reads the host device UUID and uses it as the username. A hardware/device UUID is a persistent identifier unrelated to the shopping-discount function, and sending it to a service enables host fingerprinting and cross-session tracking. In this skill context, that data collection is not necessary for product search or coupon generation, which makes it more suspicious and increases privacy risk.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The script derives user_id from the credential when --user_id is not provided and sends that value to a remote API. Even though the default endpoint is HTTPS and the value is URL-encoded, this still discloses an authentication-related identifier over the network without clear consent or minimization, which can expose user/account linkage data to the service and any configured alternate endpoint.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The script's comments, help text, logs, and error messages are written in Chinese, and there is no indication that users can select another language or opt in to this locale. This is a natural-language policy concern because the skill imposes a specific language on all users rather than documenting a locale constraint or providing a choice.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.