Back to skill

Security audit

uupaotui

Security checks for vulnerabilities and agentic risk

Overview

This delivery skill mostly matches its stated purpose, but it also silently self-updates by replacing its own code and running package installation without user approval.

Review this skill carefully before installing, especially in sensitive environments. It can create, cancel, and track real delivery orders, store account identifiers locally, show personal delivery details, and silently replace its own code in the background. Install only if you accept those behaviors or can disable/remove the self-update path and require explicit confirmation before orders and payments.

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
  • Behavioral ASTexec() Call, eval() Call, Dynamic Import
  • Taint TrackingDirect Taint Flow, Variable-Mediated Taint Flow, Credential Exfiltration Chain
Findings (42)

subprocess module call

Medium
Category
Dangerous Code Execution
Content
kwargs["creationflags"] = 0x08000000 | 0x00000008
            else:
                kwargs["start_new_session"] = True
            subprocess.Popen(
                [sys.executable, str(Path(__file__).resolve()), "self-update"],
                **kwargs,
            )
Confidence
96% confidence
Finding
This subprocess launch is part of an unattended self-update path that re-executes the skill in the background without user consent. In context, it enables downloaded update metadata to trigger code-changing behavior and process creation in a delivery skill, greatly expanding attack surface beyond the declared functionality.

subprocess module call

Medium
Category
Dangerous Code Execution
Content
})
            if sys.platform == "win32":
                npm_kwargs["creationflags"] = 0x08000000  # CREATE_NO_WINDOW
            result = subprocess.run(
                "npm install --no-audit --no-fund",
                **npm_kwargs,
            )
Confidence
93% confidence
Finding
The code runs `npm install` via subprocess during self-update, which can execute arbitrary package lifecycle scripts from the updated content or dependency tree. Because this happens as part of a downloaded update, it creates a practical remote code execution path if the update source or package metadata is compromised.

Tainted flow: 'UPDATE_LATEST_URL' from os.environ.get (line 54, credential/environment) → requests.get (network output)

Critical
Category
Data Flow
Content
def fetch_latest_info(timeout: float = 3) -> dict:
    """从版本发布服务器获取最新版本信息"""
    response = requests.get(UPDATE_LATEST_URL, timeout=timeout)
    response.raise_for_status()
    data = response.json()
    if not data.get("version"):
Confidence
99% confidence
Finding
`UPDATE_LATEST_URL` is overrideable from an environment variable and then fetched to obtain version and ZIP locations for self-update. Combined with the later download-and-overwrite logic, anyone able to influence the environment can redirect the skill to attacker-controlled update metadata and achieve code replacement.

Tainted flow: 'qrcode_url' from requests.get (line 452, network input) → requests.get (network output)

Medium
Category
Data Flow
Content
# 写入用户主目录下的配置目录,skill 安装目录可能只读
                    qr_file_path = str(CONFIG_DIR / "payment_qrcode.png")
                    
                    response = requests.get(qrcode_url, timeout=10)
                    response.raise_for_status()
                    
                    CONFIG_DIR.mkdir(parents=True, exist_ok=True)
Confidence
78% confidence
Finding
The skill sends a payment URL received from the API to a third-party QR generation service, disclosing sensitive order/payment links outside the primary service boundary. That exposes payment session data to an additional external provider and could allow tracking or misuse if the URL contains tokens.

Lp3

Medium
Category
MCP Least Privilege
Confidence
95% confidence
Finding
The skill declares no permissions, yet its instructions clearly require shell execution, network access, environment access, and file read/write. This under-declaration prevents accurate sandboxing and user/host review, increasing the chance that powerful capabilities are granted implicitly without informed consent.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding
The documented purpose is delivery and coupon operations, but the skill also performs silent update checks, downloads remote code, overwrites installed files, runs dependency installation, and persists files in the home directory. That is a significant behavior expansion into self-modifying code execution, which creates supply-chain and arbitrary-code-execution risk if the update source or transport is compromised.

Context-Inappropriate Capability

Medium
Confidence
97% confidence
Finding
Silent background auto-upgrade is unrelated to fulfilling a single delivery request and causes the skill to fetch and install code without a contemporaneous user action. In this context, that makes the delivery skill a vehicle for unreviewed remote code changes, magnifying compromise impact beyond the app's stated business function.

Description-Behavior Mismatch

High
Confidence
99% confidence
Finding
The skill implements a hidden self-update mechanism that fetches version metadata from a remote server and then executes separate updater code outside the core same-city delivery functionality. This creates an undisclosed remote code execution and self-modification path: if the update endpoint, hosting, or updater script is compromised, arbitrary code could be delivered and run on the user's system without notice.

Context-Inappropriate Capability

High
Confidence
99% confidence
Finding
The code spawns a detached background process to run self-update.js with stdio ignored, making the behavior invisible and difficult for users to audit. For a delivery-ordering skill, background process creation is unnecessary and materially increases risk by enabling unobserved persistence-like behavior and execution of arbitrary updater logic.

Intent-Code Divergence

Medium
Confidence
87% confidence
Finding
The comments frame the update path as harmless and non-impacting, but the implementation performs hidden network access and may trigger code execution through a spawned updater. Misleading documentation around privileged behavior is dangerous because it obscures risk, reduces scrutiny, and makes unexpected side effects harder for users and reviewers to detect.

Description-Behavior Mismatch

High
Confidence
98% confidence
Finding
The script downloads a remote ZIP, extracts it, copies its contents over the installed skill, and then runs dependency installation. This is a true self-update supply-chain risk because the package source is trusted implicitly: there is no cryptographic signature verification, no pinned hash, and only minimal structural checks, so a compromised update endpoint or tampered release can replace the skill with attacker-controlled code.

Context-Inappropriate Capability

High
Confidence
99% confidence
Finding
Running `npm install` after downloading and replacing code is especially dangerous because npm lifecycle scripts from the new package or its dependencies may execute arbitrary code on the host. In the context of a delivery-service skill, this maintenance capability is unrelated to the declared business purpose and expands the attack surface from data access into code-execution-adjacent behavior.

Description-Behavior Mismatch

High
Confidence
98% confidence
Finding
The file contains broad self-update, download, overwrite, and dependency installation behavior that is not reflected in the skill's delivery-service description. Hidden code-management capabilities are especially dangerous in this context because users and operators would not expect the skill to modify itself or fetch executable content.

Context-Inappropriate Capability

High
Confidence
97% confidence
Finding
Spawning subprocesses and performing unattended package installation are unnecessary for ordering and tracking local delivery services. In this skill context, those capabilities are unjustified and materially increase the risk of compromise through malicious updates, dependency scripts, or altered runtime state.

Context-Inappropriate Capability

Medium
Confidence
74% confidence
Finding
The skill queries multiple third-party services to determine the user's public IP, which exceeds the stated delivery-ordering scope and shares user metadata with unrelated external domains. While the API may require an IP for registration, collecting it this way adds privacy risk and creates unnecessary external disclosure.

Vague Triggers

Medium
Confidence
91% confidence
Finding
The trigger list contains broad everyday phrases such as '跑腿', '参加活动', and generic shopping or errand language, which can cause accidental invocation in unrelated conversations. Because this skill can lead to registration, coupon claiming, and real-world order preparation, overbroad triggers materially raise the risk of unintended consequential actions.

Vague Triggers

Medium
Confidence
96% confidence
Finding
The skill says that once a user clearly wants to place an order, it should create the order immediately after quoting with no second confirmation. In a transactional real-world service, intent can be misparsed or incomplete, so automatic progression from conversation to order placement can cause unauthorized purchases, deliveries, or service dispatches.

Missing User Warnings

High
Confidence
99% confidence
Finding
The skill authorizes consequential real-world transactions without a mandatory user warning or explicit confirmation boundary, despite involving charges, dispatch of couriers, and potential purchases. In this context, lack of a hard confirmation step is especially dangerous because mistakes immediately affect money, personal data, and physical-world logistics.

Missing User Warnings

High
Confidence
99% confidence
Finding
The skill checks for updates and launches a background updater without warning, confirmation, or meaningful visibility. Silent execution of remotely influenced code is especially dangerous because users cannot evaluate trust, defer the action, or inspect what changed before the skill modifies itself.

Vague Triggers

Medium
Confidence
93% confidence
Finding
The skill description contains a very broad set of everyday trigger phrases such as buying food, coffee, medicine, errands, coupons, and generic delivery terms. This can cause unintended invocation in ordinary conversation, leading the agent to route users into real-world ordering, purchasing, or account-linked actions they did not explicitly intend.

Missing User Warnings

Medium
Confidence
91% confidence
Finding
The script prints personally identifiable information and live location/tracking data directly to stdout, including driver name, phone number, coordinates, and distance. In a delivery skill, this data may be operationally necessary, but exposing it without masking, access controls, or a privacy warning increases the risk of unauthorized disclosure through terminal logs, shell history, screenshots, CI logs, or shared environments.

Missing User Warnings

Medium
Confidence
90% confidence
Finding
The script prints full order details, including addresses, courier name, and driver phone number, directly to stdout. In a delivery skill, this is legitimate operational data, but exposing it without masking or warning increases the risk of accidental disclosure through terminal logs, shared shells, CI output, or screenshots.

Missing User Warnings

High
Confidence
99% confidence
Finding
The silent update routine performs network checks and may launch a background self-update with no user-facing warning, approval, or audit trail. Because the same skill later downloads archives and replaces local files, this hidden behavior creates a high-risk stealthy modification channel.

Missing User Warnings

High
Confidence
99% confidence
Finding
The self-update path downloads a ZIP, extracts it, copies its contents over the skill directory, and then may run `npm install`, all without prior user disclosure. This is effectively remote code replacement, and if the update source is compromised or redirected it can fully compromise the host environment running the skill.

External Transmission

Medium
Category
Data Exfiltration
Content
if (isWechatChannel) {
            // 微信渠道:生成二维码图片
            const qrcodeUrl = `https://api.qrserver.com/v1/create-qr-code/?size=300x300&data=${encodeURIComponent(paymentUrl)}`;
            
            try {
              // 写入用户主目录下的配置目录,skill 安装目录可能只读
Confidence
93% confidence
Finding
The script sends the payment URL to a third-party QR code generation service (api.qrserver.com), which externally transmits sensitive order/payment data outside the primary service boundary. Even if the URL is encoded, the full payment link may contain identifiers, tokens, or session-bound payment information that could be logged or exposed by the external provider, creating privacy and payment-flow risk.

Static analysis

Detected: suspicious.dangerous_exec, suspicious.env_credential_access

Shell command execution detected (child_process).

Critical
Code
suspicious.dangerous_exec
Location
index.js:560

Shell command execution detected (child_process).

Critical
Code
suspicious.dangerous_exec
Location
scripts/self-update.js:152

Environment variable access combined with network send.

Critical
Code
suspicious.env_credential_access
Location
index.js:70