Back to skill

Security audit

uupt-delivery

Security checks across malware telemetry and agentic risk

Overview

This delivery skill performs real ordering tasks, but it also silently replaces its own code from a remote update source and can place paid orders without a final confirmation.

Review carefully before installing. The delivery API integration itself is expected, but this skill can silently update and overwrite its own code, run dependency installation, contact third-party IP and QR services, store credentials in your home directory, and create paid orders without a final confirmation. It should not be installed unless you accept those behaviors or the publisher removes silent self-update and adds explicit confirmation and stronger scoping.

SkillSpector

By NVIDIA
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Rogue AgentSelf-Modification, Session Persistence
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • Behavioral ASTexec() Call, eval() Call, Dynamic Import
Findings (40)

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
subprocess.Popen( [sys.executable, str(Path(__file__).resolve()), "self-update"], **kwargs, )

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
result = subprocess.run( "npm install --no-audit --no-fund", **npm_kwargs, )

Tainted flow: 'UPDATE_LATEST_URL' from os.environ.get (line 50, 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
response = requests.get(UPDATE_LATEST_URL, timeout=timeout)

Lp3

Medium
Category
MCP Least Privilege
Confidence
94% confidence
Finding
The skill declares no permissions while its documented behavior requires environment access, file read/write, network calls, and shell execution. This under-declaration prevents meaningful user or platform review and hides the real attack surface, especially because the skill stores credentials, executes scripts, and communicates with external services.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding
The skill’s stated purpose is delivery operations, but the documentation also describes silent self-updating, background remote version checks, public IP discovery, third-party QR retrieval, and persistent credential storage outside the skill directory. These extra behaviors materially expand trust and risk boundaries and enable remote code or configuration changes unrelated to the core task without clear user awareness.

Context-Inappropriate Capability

High
Confidence
98% confidence
Finding
The skill implements a silent self-update path that checks a remote endpoint and spawns a detached background updater without user visibility or consent. This creates an unauthorized code-update channel outside the normal installation path, and if the update server, DNS, or transport trust is compromised, arbitrary code could be delivered and executed on the host.

Description-Behavior Mismatch

Medium
Confidence
89% confidence
Finding
A delivery skill is making network requests to a separate version-check endpoint unrelated to its declared business function. Even if intended for maintenance, this expands the skill's network trust boundary and enables remote influence over later update behavior, especially when combined with the self-update mechanism.

Context-Inappropriate Capability

Medium
Confidence
95% confidence
Finding
This script downloads a ZIP from a remotely supplied URL, extracts it, and copies its contents over the installed skill, effectively replacing local code with remote code. In a delivery-service skill, a silent self-updater is outside the stated business purpose and creates a supply-chain and remote-code-installation path, especially because validation is limited to checking for SKILL.md and package.json rather than authenticity or integrity.

Context-Inappropriate Capability

High
Confidence
98% confidence
Finding
Running `npm install` after replacing the skill code can execute dependency lifecycle scripts from the newly downloaded package, turning the updater into an immediate remote code execution mechanism. Because the new package source is remote and not strongly authenticated in this script, an attacker who controls the update metadata, ZIP, or dependencies could run arbitrary commands on the host.

Description-Behavior Mismatch

High
Confidence
99% confidence
Finding
The skill implements a full self-update mechanism that downloads archives, extracts them, overwrites local files, and modifies the installed skill. That capability is unrelated to core delivery operations and creates a high-risk software supply-chain and self-modification channel inside a user-facing skill.

Context-Inappropriate Capability

High
Confidence
97% confidence
Finding
The code spawns detached background processes and executes package installation commands, both of which are unrelated to placing and tracking delivery orders. In a skill context, these behaviors expand the attack surface significantly and enable unprompted code execution paths.

Context-Inappropriate Capability

Medium
Confidence
86% confidence
Finding
The skill contacts unrelated third-party IP-discovery services during registration, disclosing the user’s network metadata outside the delivery provider. While not code-execution, this is an unnecessary privacy and data-sharing risk, especially because multiple fallback services are queried automatically.

Intent-Code Divergence

Medium
Confidence
90% confidence
Finding
The implementation performs unsolicited version-check network calls during ordinary command execution, despite presenting the update behavior as background-only when a new version exists. This mismatch reduces transparency and can conceal ongoing outbound traffic unrelated to the user’s requested delivery task.

Vague Triggers

High
Confidence
95% confidence
Finding
The trigger conditions are extremely broad and include common phrases like “帮我” and generic verbs such as “送” or “取”, making accidental invocation likely in ordinary conversation. In a transactional skill that can create paid orders, overbroad activation materially increases the chance of unintended execution and disclosure of user data to external services.

Missing User Warnings

High
Confidence
99% confidence
Finding
The skill instructs the agent to create an order immediately after pricing, explicitly '无需二次确认', even though the action is transactional and may incur charges or trigger courier dispatch. This creates a direct risk of unauthorized purchases, accidental orders, and disputes from ambiguous or mistaken user inputs.

Missing User Warnings

Medium
Confidence
98% confidence
Finding
The documented silent background auto-update modifies installed skill files, performs remote checks, and may change code without user disclosure or consent. This introduces supply-chain and persistence risk because future behavior can change outside the user’s active interaction and without an approval checkpoint.

Missing User Warnings

High
Confidence
98% confidence
Finding
The code launches a background subprocess for self-update with detached execution, ignored stdio, and no warning or confirmation. This prevents user awareness and review of code changes, undermines auditability, and can be abused to run untrusted code if the update path is compromised.

Missing User Warnings

Medium
Confidence
84% confidence
Finding
The skill queries multiple third-party services to discover the user's public IP and does so without clear disclosure at the point of use. That leaks metadata to unrelated services and may expose a user's network address during registration/auth flows, which is privacy-sensitive and unnecessary to hide from the user.

Missing User Warnings

Medium
Confidence
94% confidence
Finding
The script prints personally identifiable information and precise location data, including the driver's name, phone number, coordinates, and distance, directly to stdout with no masking, consent check, audience restriction, or privacy warning. In a delivery-tracking context this data may be legitimately available to an authorized user, but exposing it through an unrestricted CLI output increases the risk of shoulder-surfing, log retention leaks, terminal history capture, and misuse of real-time tracking information.

Missing User Warnings

Medium
Confidence
93% confidence
Finding
The script prints full order details and explicitly outputs personal data such as addresses, driver name, and driver phone number directly to stdout. In a delivery skill, this data is highly sensitive operational and personal information; if logs, terminals, or shared automation environments are accessible to others, this creates a real privacy exposure.

Missing User Warnings

High
Confidence
99% confidence
Finding
The silent updater checks for updates, downloads new code, and launches background replacement logic without disclosure or confirmation. In a skill that should only interact with a delivery API, this is a severe trust and supply-chain risk because it can change executable behavior outside the user’s intent.

Missing User Warnings

Medium
Confidence
84% confidence
Finding
Automatic public IP discovery sends user network information to unrelated external services without clear upfront consent. That is dangerous from a privacy and data-minimization standpoint, especially in an agent skill where users may not expect hidden third-party lookups.

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
95% confidence
Finding
https://api.qrserver.com/

External Transmission

Medium
Category
Data Exfiltration
Content
if is_wechat_channel:
                # 微信渠道:生成二维码图片
                qrcode_url = f"https://api.qrserver.com/v1/create-qr-code/?size=300x300&data={quote(payment_url, safe='')}"
                
                try:
                    # 写入用户主目录下的配置目录,skill 安装目录可能只读
Confidence
83% confidence
Finding
https://api.qrserver.com/

Self-Modification

High
Category
Rogue Agent
Content
/**
 * 静默自更新:带缓存节流(24h 最多请求一次),发现新版本时在后台启动
 * self-update.js 完成升级,全程无输出、无需用户确认。
 * 任何异常都静默忽略,绝不影响主功能。
 */
async function maybeSilentUpdate() {
Confidence
99% confidence
Finding
self-update

VirusTotal

VirusTotal findings are pending for this skill version.

View on VirusTotal

Static analysis

Detected: suspicious.dangerous_exec, suspicious.env_credential_access

Shell command execution detected (child_process).

Critical
Code
suspicious.dangerous_exec
Location
index.js:541

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:67