Back to skill

Security audit

Query trade area distribution analysis for HS codes — retrieve trade distribution data by country/region for a specified HS code, with exporter/importer type and recent months filters. Provides trade counts, amounts, buyer counts and seller counts per country for comprehensive geographic market analysis across global customs data covering 220+ countries and territories. Designed for trade analysts, market researchers and import-export professionals who need to understand which countries trade a specific product, analyze regional distribution patterns and compare exporter vs importer country activity for strategic market planning.

Security checks across malware telemetry and agentic risk

Overview

The skill’s trade-query function is real, but it also manages plaintext API keys, account top-up flows, and an automatic version-check call that deserve user review before installation.

Install only if you are comfortable with this skill storing an UpKuaJing API key in a plaintext ~/.upkuajing/.env file, sending trade-query parameters to UpKuaJing, checking skill version status remotely, and creating account top-up payment links when requested. Review charges before confirming any paid query or recharge action.

SkillSpector

By NVIDIA
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
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
Findings (16)

Lp3

Medium
Category
MCP Least Privilege
Confidence
92% confidence
Finding
The skill declares only environment requirements, but the documented behavior clearly includes reading local files, writing to ~/.upkuajing/.env, and making network requests. This under-declaration reduces transparency and can bypass user or platform expectations about what the skill is allowed to access, increasing the chance of unintended credential exposure or unauthorized external actions.

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding
The stated purpose is a trade area query skill, but the documented workflow also covers API key issuance, credential storage, account inspection, recharge order creation, pricing lookups, and remote version checking. That functional expansion materially changes the trust boundary: a user invoking a data-query skill may unintentionally trigger account-management, billing, or credential-handling behaviors they did not expect.

Description-Behavior Mismatch

High
Confidence
96% confidence
Finding
The file implements API key issuance, account lookup, recharge-order creation, and pricing access, which are materially unrelated to the advertised HS-code regional trade-analysis function. In an agent-skill context, hidden financial/account-management capabilities increase attack surface and can enable unauthorized account actions or user confusion about what the skill actually does.

Context-Inappropriate Capability

High
Confidence
97% confidence
Finding
Recharge-order creation and pricing-query features introduce payment and billing functionality into a skill that claims to perform trade-area analytics. That mismatch is dangerous because users or orchestrators may invoke the skill expecting data retrieval, while the code can trigger financially relevant workflows that are outside the declared scope.

Context-Inappropriate Capability

Medium
Confidence
89% confidence
Finding
The code provisions a new API key and persists it locally in a .env file, which is outside the stated trade-analysis purpose and expands secret-handling responsibilities. Even if intended for convenience, local credential creation and storage can expose secrets through weak filesystem permissions, backups, logs, or accidental sharing.

Intent-Code Divergence

Medium
Confidence
85% confidence
Finding
The module docstring says it provides authentication management, but the code also performs recharge-order creation and pricing queries. This inconsistency obscures the module's real capabilities, making security review, user consent, and policy enforcement less reliable in an agent ecosystem.

Description-Behavior Mismatch

Medium
Confidence
93% confidence
Finding
The module performs outbound network access and writes persistent local state for a version-check feature that is unrelated to the stated trade-area analysis purpose of the skill. Even if intended as a benign update notifier, this expands the skill's trust boundary, creates telemetry about skill usage, and introduces an unnecessary external dependency that could be abused or fail in unexpected ways.

Context-Inappropriate Capability

Medium
Confidence
91% confidence
Finding
The skill includes self-update telemetry logic that sends the skill name to a remote API endpoint despite this having no clear connection to customs/trade analysis functionality. This can leak information about local tool usage and normalizes hidden network behavior inside a data-analysis skill, which is risky in environments expecting least privilege and purpose limitation.

Missing User Warnings

Medium
Confidence
71% confidence
Finding
The function transmits caller-supplied parameters to a remote third-party API without any user-visible disclosure or consent mechanism in this code path. In an agent skill context, users may not realize their HS code queries and related trade parameters are being sent off-host, creating a privacy and data-handling risk.

Credential Access

High
Category
Privilege Escalation
Content
### **API Key Not Set**
First check if the `~/.upkuajing/.env` file has UPKUAJING_API_KEY;
If UPKUAJING_API_KEY is not set, prompt the user to choose:
1. User has one: User provides it (manually add to ~/.upkuajing/.env file)
2. User doesn't have one: You can apply using the interface (`auth.py --new_key`), the new key will be automatically saved to ~/.upkuajing/.env
Wait for user selection;
Confidence
96% confidence
Finding
.env

Credential Access

High
Category
Privilege Escalation
Content
First check if the `~/.upkuajing/.env` file has UPKUAJING_API_KEY;
If UPKUAJING_API_KEY is not set, prompt the user to choose:
1. User has one: User provides it (manually add to ~/.upkuajing/.env file)
2. User doesn't have one: You can apply using the interface (`auth.py --new_key`), the new key will be automatically saved to ~/.upkuajing/.env
Wait for user selection;

### **Account Top-up**
Confidence
95% confidence
Finding
.env

Credential Access

High
Category
Privilege Escalation
Content
"""
    申请新的 API 密钥。
    """
    # 检查是否已存在 .env 文件和 API key
    env_file = UPKUAJING_ENV_FILE

    if env_file.exists():
Confidence
86% confidence
Finding
.env

Credential Access

High
Category
Privilege Escalation
Content
env_file = UPKUAJING_ENV_FILE

    if env_file.exists():
        # 读取现有的 .env 文件
        try:
            with open(env_file, 'r', encoding='utf-8') as f:
                content = f.read()
Confidence
90% confidence
Finding
.env

Credential Access

High
Category
Privilege Escalation
Content
"envFilePath": str(env_file)
        }

    # 保存到 .env 文件
    try:
        with open(env_file, 'w', encoding='utf-8') as f:
            f.write(f"{API_KEY_ENV}={api_key}\n")
Confidence
95% confidence
Finding
.env

Credential Access

High
Category
Privilege Escalation
Content
except IOError as e:
        return {
            "success": False,
            "message": f"API密钥申请成功,但保存到 .env 文件失败:{str(e)}。\n请手动设置环境变量 {API_KEY_ENV}。",
            "envFilePath": str(env_file)
        }
Confidence
74% confidence
Finding
.env

Unpinned Dependencies

Low
Category
Supply Chain
Content
httpx>=0.23.0
Confidence
91% confidence
Finding
httpx>=0.23.0

VirusTotal

65/65 vendors flagged this skill as clean.

View on VirusTotal

Static analysis

Detected: suspicious.exposed_secret_literal

File appears to expose a hardcoded API secret or token.

Critical
Code
suspicious.exposed_secret_literal
Location
scripts/common.py:196

File appears to expose a hardcoded API secret or token.

Critical
Code
suspicious.exposed_secret_literal
Location
SKILL.md:58