Back to skill

Security audit

miaoda-app-builder

Security checks across malware telemetry and agentic risk

Overview

This looks like a real Miaoda app-builder skill, but it needs Review because it can use ambient host session credentials and deploy public apps without strong explicit consent controls.

Install only if you intend to let this skill act on your Miaoda account, including creating, modifying, generating, and publishing apps. Avoid giving it ambient desktop session access unless you trust that environment, confirm before any publish/generate action, and keep `MIAODA_API_KEY` out of chat, logs, and shell history where possible.

SkillSpector

By NVIDIA
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (10)

Lp3

Medium
Category
MCP Least Privilege
Confidence
89% confidence
Finding
The skill clearly uses sensitive capabilities: reads credentials from environment variables and instructs the agent to perform networked API calls and production deployments, yet it declares no explicit permissions. That mismatch weakens policy enforcement and informed consent because a host may not surface to users that the skill can access secrets and make external changes.

Context-Inappropriate Capability

Medium
Confidence
97% confidence
Finding
The code installs auth hooks that silently fall back to host-provided session credentials and account identifiers when no explicit Miaoda API key is supplied. It then rewrites outbound requests and injects session/account headers, allowing the skill process to act with ambient platform privileges that were not explicitly granted to the script by the caller.

Context-Inappropriate Capability

Low
Confidence
80% confidence
Finding
The conversation-history feature parses and exposes trajectory artifacts including command-run observations, file actions, and other internal execution traces. That broadens access from app-building into retrieval of potentially sensitive operational context, which could reveal secrets, commands, or internal workflow data unrelated to the user's immediate task.

Missing User Warnings

Medium
Confidence
86% confidence
Finding
This skill can publish applications to production, but the description and routing guidance do not prominently warn users that it may perform external, real-world deployment actions. That creates a consent and safety risk: a user asking to 'build' or 'publish' may trigger irreversible or cost-bearing operations on a third-party platform.

Missing User Warnings

Low
Confidence
78% confidence
Finding
The authentication section tells operators to export and use an API key but does not include any warning about secret handling, logging, shell history, or avoiding disclosure back to the user/model output. In an agent setting, missing credential-handling guidance increases the chance of accidental leakage or unsafe reuse of the key.

Missing User Warnings

Medium
Confidence
94% confidence
Finding
The code prints resolved app/conversation IDs and full trajectory events directly to stdout during chat polling. Trajectory events can contain user prompts, generated content, metadata, and other sensitive workspace context, so unconditional logging increases the chance of accidental disclosure to parent processes, logs, or downstream consumers.

Env Variable Harvesting

High
Category
Data Exfiltration
Content
"MIAODA_BASE_URL", f"https://{API_SERVER_HOST}{MIAODA_PROXY_PATH}"
    )
    # Satisfy the CLI's required-key check; the proxy authenticates by session.
    os.environ["MIAODA_API_KEY"] = "api-server-managed"

    extra_headers = {
        "X-Dumate-Session-Id": session_id,
Confidence
96% confidence
Finding
os.environ["MIAODA_API_KEY"]

Env Variable Harvesting

High
Category
Data Exfiltration
Content
def _install_sandbox_auth_hooks() -> None:
    """Use qianfan-desk's session proxy when no Miaoda key is available."""
    if os.environ.get("MIAODA_API_KEY") or _has_cli_api_key():
        return

    session_id = os.environ.get("DUMATE_SESSION_ID")
Confidence
95% confidence
Finding
os.environ.get("MIAODA_API_KEY

Env Variable Harvesting

High
Category
Data Exfiltration
Content
"X-Dumate-Session-Id": session_id,
        "X-Appbuilder-Dumate-Account-Id": account_id,
    }
    dtoken = os.environ.get("DUMATE_DTOKEN")
    if dtoken:
        extra_headers["Authorization"] = f"Bearer {dtoken}"
Confidence
97% confidence
Finding
os.environ.get("DUMATE_DTOKEN

Context Leakage

High
Category
Data Exfiltration
Content
app_id: str,
    fetch_timeout: int = 10,
) -> Optional[str]:
    """Extract the conversationId (contextId) for an existing app by reading its trajectory.

    Scans ALL trajectory events and returns the MOST RECENT (last) non-empty contextId
    found, checking two paths per event:
Confidence
90% confidence
Finding
Extract the conversation

VirusTotal

VirusTotal findings are pending for this skill version.

View on VirusTotal

Static analysis

No suspicious patterns detected.