Back to skill

Security audit

Android应用商店部署工具

Security checks for vulnerabilities and agentic risk

Overview

This skill appears to be a remote Android deployment helper, but it asks for and transmits high-value deployment credentials with weak disclosure and some mismatched documentation.

Review carefully before installing. Use only disposable or least-privilege credentials, avoid production signing keys and broad GitHub PATs, assume entered deployment data may be sent to xiaobenyang.com, and remove or rotate any API key stored in .env if you stop using the skill.

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
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
Findings (23)

Lp3

Medium
Category
MCP Least Privilege
Confidence
91% confidence
Finding
The skill documentation describes capabilities to read environment variables, read/write files, and make network calls, yet it declares no permissions or equivalent user-facing disclosure. In a deployment tool that handles API keys, signing keys, service-account files, and GitHub tokens, this lack of transparent capability declaration increases the chance of users exposing sensitive material without informed consent.

Description-Behavior Mismatch

High
Confidence
95% confidence
Finding
The skill claims to support Android Play Store deployment, but the API-key instructions and project path reference an unrelated 'gaokao' skill and external site. This mismatch is a strong integrity red flag: users may be induced to provide credentials to an unrelated service, and reviewers cannot trust that the documented data flows match the stated purpose.

Intent-Code Divergence

High
Confidence
90% confidence
Finding
The workflow states that the model only routes to local tool functions, but the documented structure includes a generic API client and mandatory API-key handling. This contradiction obscures the actual trust boundary and may cause users to expose repository, signing, or Play credentials under the false assumption that processing is purely local.

Intent-Code Divergence

Medium
Confidence
88% confidence
Finding
The return-handling section says tool outputs are raw API data and should be directly shown to the user, which conflicts with the described higher-level deployment tooling. In a credential-heavy workflow, raw responses may include echoed inputs, tokens, file paths, validation details, or other sensitive operational data that should be filtered before display.

Missing User Warnings

Medium
Confidence
94% confidence
Finding
The skill requires collection and persistence of an API key but provides no warning about storage location, retention, redaction, or whether the key is sent to third parties. Users may disclose a secret without understanding that it could be written to disk or reused across sessions.

Missing User Warnings

Medium
Confidence
95% confidence
Finding
The skill asks for signing credentials such as keystore passwords and related deployment secrets without any explicit handling guidance or risk notice. These secrets can directly enable malicious app signing or unauthorized releases if exposed through logs, prompts, API calls, or stored configuration.

Missing User Warnings

Medium
Confidence
96% confidence
Finding
Requesting a GitHub Personal Access Token with repo scope without explaining sensitivity, minimum scopes, and storage/transport practices is dangerous. A leaked PAT can enable repository read/write actions, workflow abuse, secret enumeration, or broader supply-chain compromise depending on scope.

Missing User Warnings

Medium
Confidence
96% confidence
Finding
The skill requests a service-account JSON path plus signing credentials for deployment testing and validation without warning about the implications of exposing these materials. Combined, these inputs can allow unauthorized Play Store interactions, artifact signing, or environment compromise if mishandled.

Missing User Warnings

Medium
Confidence
91% confidence
Finding
The code persists an API key into a local .env file automatically, without confirmation, permission hardening, or warning about plaintext secret storage. If the workspace is shared, committed, backed up, or exposed through logs/artifacts, the credential can be disclosed and reused.

Missing User Warnings

Medium
Confidence
96% confidence
Finding
The function forwards highly sensitive signing credentials (keystore path, store password, key alias, and key password) to an external API via call_api. Even if intended for legitimate workflow testing, sending these secrets off-box materially increases exposure risk because the receiving service, logs, telemetry, or intermediaries could capture credentials that enable signing malicious app updates.

Missing User Warnings

Low
Confidence
83% confidence
Finding
The function sends a service account JSON file path and package metadata to an external API. While the path is less sensitive than the file contents, it still discloses credential location and deployment configuration, which can aid targeting or mishandling; in this skill context, such inputs may also prompt the remote service to access or process privileged account material indirectly.

Ssd 3

Medium
Confidence
95% confidence
Finding
The explicit instruction to present raw tool output directly to users is risky because many of these tools process secrets, file paths, configuration data, and validation responses. Raw output may accidentally include API keys, PATs, service-account details, keystore metadata, or environment-derived values, creating immediate secret leakage.

Credential Access

High
Category
Privilege Escalation
Content
default_year: int = 2025

    def model_post_init(self, __context):
        # 强制从 .env 文件读取 XBY_APIKEY
        env_path = Path(".env")
        if env_path.exists():
            content = env_path.read_text(encoding="utf-8")
Confidence
88% confidence
Finding
The code force-reads .env manually to extract XBY_APIKEY, bypassing normal settings handling and encouraging plaintext secret access from the project directory. In a developer tool context, this increases the chance that secrets are loaded from an untrusted workspace file or accidentally exposed through repository sharing and CI artifacts.

Credential Access

High
Category
Privilege Escalation
Content
def model_post_init(self, __context):
        # 强制从 .env 文件读取 XBY_APIKEY
        env_path = Path(".env")
        if env_path.exists():
            content = env_path.read_text(encoding="utf-8")
            for line in content.splitlines():
Confidence
88% confidence
Finding
Creating a Path to .env and reading it directly participates in plaintext credential handling from the working directory. In this skill's context, the mismatch with the advertised Android deployment purpose makes the behavior more suspicious because it accesses an unrelated API key from a local file.

Credential Access

High
Category
Privilege Escalation
Content
def save_api_key_to_env(api_key: str) -> bool:
    """将API key保存到.env文件"""
    try:
        env_path = Path(".env")
        lines = []
        if env_path.exists():
            lines = env_path.read_text(encoding="utf-8").splitlines()
Confidence
93% confidence
Finding
This function is explicitly designed to save an API key into a .env file, i.e., persistent plaintext credential storage in the project workspace. That can leak secrets through source control mistakes, shared folders, local malware, support bundles, or CI packaging.

Credential Access

High
Category
Privilege Escalation
Content
def set_api_key(api_key: str) -> bool:
    """设置API key并持久化到.env"""
    if not api_key or not api_key.strip():
        return False
    api_key = api_key.strip()
Confidence
92% confidence
Finding
The function contract says it sets the API key and persists it to .env, normalizing unsafe secret persistence as part of routine usage. In a deployment-related skill, this can place long-lived credentials into developer workspaces where accidental disclosure is common.

Credential Access

High
Category
Privilege Escalation
Content
repo_name: GitHub repository name

    github_token: GitHub Personal Access Token with repo scope

    required_secrets: List of secret names to check for
Confidence
92% confidence
Finding
The skill explicitly accepts a GitHub Personal Access Token and then forwards it to an external API for secret validation. A PAT with repo scope is highly privileged; if exposed to the remote service, logs, or an attacker controlling that backend, it could enable repository compromise, secret manipulation, workflow tampering, or source exfiltration.

Unpinned Dependencies

Low
Category
Supply Chain
Content
requests>=2.31.0
pydantic>=2.7.0
pydantic-settings>=2.2.0
python-dotenv>=1.0.1
Confidence
93% confidence
Finding
The dependency is specified with a lower-bound version only, which allows future installs to resolve to different versions over time. This weakens build reproducibility and can unintentionally pull in vulnerable or breaking releases through the supply chain.

Unpinned Dependencies

Low
Category
Supply Chain
Content
requests>=2.31.0
pydantic>=2.7.0
pydantic-settings>=2.2.0
python-dotenv>=1.0.1
Confidence
93% confidence
Finding
Using an unpinned version range for this package makes installations non-deterministic and increases supply-chain risk. Different environments may install different versions, including versions later found to be vulnerable or incompatible.

Unpinned Dependencies

Low
Category
Supply Chain
Content
requests>=2.31.0
pydantic>=2.7.0
pydantic-settings>=2.2.0
python-dotenv>=1.0.1
Confidence
93% confidence
Finding
An unpinned dependency permits uncontrolled version resolution, which can introduce vulnerable transitive behavior or unexpected changes at install time. For deployment tooling, this can affect automation reliability and security posture.

Unpinned Dependencies

Low
Category
Supply Chain
Content
requests>=2.31.0
pydantic>=2.7.0
pydantic-settings>=2.2.0
python-dotenv>=1.0.1
Confidence
93% confidence
Finding
Specifying only a minimum version allows dependency drift and reduces reproducibility, making it harder to ensure that all users install the same vetted package set. This creates avoidable supply-chain exposure even if no exploit is present today.

Known Vulnerable Dependency: requests==2.31.0 — 5 advisory(ies): CVE-2024-47081 (Requests vulnerable to .netrc credentials leak via malicious URLs); CVE-2024-35195 (Requests `Session` object does not verify requests after making first request wi); CVE-2026-25645 (Requests has Insecure Temp File Reuse in its extract_zipped_paths() utility func) +2 more

Medium
Category
Supply Chain
Confidence
96% confidence
Finding
The requirement permits installation of requests 2.31.0, which has published advisories including credential leakage and request verification issues. In a deployment tool that may interact with external services, credentials, or automation endpoints, this increases the chance of sensitive data exposure or unsafe network behavior.

Known Vulnerable Dependency: python-dotenv==1.0.1 — 1 advisory(ies): CVE-2026-28684 (python-dotenv: Symlink following in set_key allows arbitrary file overwrite via )

Low
Category
Supply Chain
Confidence
85% confidence
Finding
The dependency version range includes python-dotenv 1.0.1, which is reported as vulnerable to symlink-following file overwrite behavior in set_key. In a developer automation or deployment context that may manipulate environment files, this could enable unintended file modification if an attacker can influence paths or workspace contents.

Static analysis

No suspicious patterns detected.