Back to skill

Security audit

GSAP动画生成工具

Security checks for vulnerabilities and agentic risk

Overview

This GSAP animation skill relies on an external API and plaintext API-key storage, but its documentation and code contain unrelated gaokao configuration references that make the true scope unclear.

Install only if you trust xiaobenyang.com with your animation prompts and any code snippets you submit. Treat the API key as sensitive, avoid pasting proprietary code or secrets into debugging/optimization requests, and delete or protect the generated .env file if you proceed. The gaokao-related leftovers should be fixed by the publisher before routine use.

Vulnerability Patterns
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • Insecure Skill Coding PracticesFinds exploitable flaws such as hardcoded secrets or command injection
  • Skill Instruction HijackingAlters the agent's session goals or safety constraints when the skill loads
  • Agent Memory PoisoningWrites attacker-controlled rules into memory that affect later sessions
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
Findings (3)

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/config.py:44
Finding

API Key Persisted in a Plaintext Environment File

Content
View full analysis
bool: """将API key保存到.env文件""" try: env_path = Path(".env") lines = [] if env_path.exists(): lines = env_path.read_text(encoding="utf-8").splitlines() found = False new_lines = [] for line in lines: if line.startswith("XBY_APIKEY="): new_lines.append(f"XBY_APIKEY={api_key}") found = True else: new_lines.append(line) if not found: new_lines.append(f"XBY_APIKEY={api_key}") env_path.write_text("\n".join(new_lines) + "\n", encoding="utf-8") os.environ["XBY_APIKEY"] = api_key return True except Exception as e: print(f"保存API key失败: {e}") return False ``` ### Technical Analysis The function persistently writes the user's API key as plaintext to a predictable `.env` file in the current working directory. No file permissions are explicitly enforced, no symlink protection is applied, and the project does not contain a `.gitignore` demonstrating that the credential file is excluded from source control. The permissions assigned to a newly created file therefore depend on the process umask and surrounding environment. In a shared or improperly configured environment, the resulting file may be readable by other local users or processes. Because the location is relative to the working directory, the secret can also be written into a repository, shared workspace, backup, or archive without the user realizing it. This behavior is explicitly requested by `SKILL.md:17-19`, so it is not hidden credential theft. Nevertheless, the storage mechanism does not provide adequate protection for sensitive authentication material. ### Attack Path ...[truncated 948 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/tools.py:79
Finding

User-Provided Source Code Is Transmitted to an External API Without a Specific Privacy Warning

Content
View full analysis
Dict[str, Any]: """ Expert debugging for GSAP animation problems with solutions Args: issue: Description of the animation problem or unexpected behavior code: Problematic animation code (optional but helpful) expected_behavior: What should happen vs what is happening Returns: """ arguments = { "issue": issue, "code": code, "expected_behavior": expected_behavior } return call_api("1777316659553283", "debug_animation_issue", arguments) ``` The network client serializes and transmits those parameters to the external service: ```python headers = { "XBY-APIKEY": api_key, "func": tool_name, "mcpid": mcp_id, "Content-Type": "application/json", } t0 = time.time() try: resp = self._session.post( url=url, headers=headers, data=json.dumps(params), timeout=settings.timeout_seconds, ) resp.raise_for_status() ``` The same exposure applies to `optimize_for_performance()` at `scripts/tools.py:98-113`, which forwards the complete `animation_code` argument. ### Technical Analysis The debugging and optimization tools transmit arbitrary user-provided code to `https://mcp.xiaobenyang.com/api`. The Skill documentation describes a remote API workflow, meaning the transmission is not covert. However, it does not provide a specific warning that pasted source code leaves the local environment, request confirmation before uploading code, or i ...[truncated 1586 chars]
Remediation
View remediation

T08 · Insecure Dependencies

Note
Location
requirements.txt:1
Finding

Dependencies Are Not Pinned to Reviewed Versions

Content
View full analysis
=2.31.0 pydantic>=2.7.0 pydantic-settings>=2.2.0 python-dotenv>=1.0.1 ``` ### Technical Analysis Every dependency is specified using an open-ended minimum-version constraint. Installation can therefore select any later version available from the configured package index, including versions that were never tested or reviewed with this project. No malicious or typosquatted package was identified in the declared dependencies. The risk arises from unconstrained future resolution: a compromised upstream release, newly introduced vulnerability, or incompatible behavioral change could be installed automatically. The absence of hashes also prevents installers from verifying packages against artifacts explicitly approved by the project. ### Attack Path 1. A user or deployment system installs the project dependencies at a later date. 2. The package resolver selects newer versions permitted by the `>=` constraints. 3. A selected release contains a compromised artifact, exploitable vulnerability, or unsafe behavioral change. 4. The package executes during installation, import, or normal application operation. 5. The resulting impact occurs with the privileges of the process installing or running the Skill. This path requires compromise or vulnerability in a future dependency release; no currently malicious dependency was established by the reviewed files. ### Impact Assessment The possible impact depends on the affected dependency and execution context. A malicious package release could potentially access files, environment variables, API keys, and network resources available to the Python process. A merely incompatible release could instead cause availability failures or alter security-relevant behavior. Because exploitation depends on a sepa ...[truncated 161 chars]
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
Findings (36)

Tp2

High
Category
MCP Tool Poisoning
Confidence
85% confidence
Finding

Mixing characters from multiple Unicode scripts in a single identifier is a common technique to create visually ambiguous tool names.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

The skill advertises animation generation but also describes reading and writing API keys, persisting credentials, and maintaining unrelated service configuration, including gaokao-oriented defaults. This kind of hidden capability expansion is dangerous because it obscures sensitive data handling and suggests the skill may be repurposed or mislabeled.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

The skill advertises animation generation but also describes reading and writing API keys, persisting credentials, and maintaining unrelated service configuration, including gaokao-oriented defaults. This kind of hidden capability expansion is dangerous because it obscures sensitive data handling and suggests the skill may be repurposed or mislabeled.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

High
Category
Not specified by scanner
Confidence
99% confidence
Finding

The API-key onboarding and project structure reference an unrelated xiaobenyang_gaokao_skill and external key flow, which strongly suggests code/documentation reuse from a different product. This mismatch is especially risky because it solicits secrets under a false pretense and may route them to an unexpected third-party service.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

High
Category
Not specified by scanner
Confidence
99% confidence
Finding

The workflow text appears to describe an unrelated gaokao/school-search API pattern instead of a GSAP animation skill, indicating the skill may be mislabeled, copy-pasted, or intentionally disguising its actual function. In security terms, this undermines informed consent and makes it harder for users and reviewers to assess what data the skill will collect and where it will send it.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

High
Category
Not specified by scanner
Confidence
98% confidence
Finding

The configuration module is clearly mismatched with the declared GSAP animation tool: it references an unrelated '高考' skill domain, a hard-coded remote service, and credential handling for a different API namespace. In a supply-chain context, this kind of domain mismatch is a strong indicator of repurposed or hidden functionality and increases the chance that users disclose secrets to an unexpected backend.

Content

No source excerpt is available for this finding.

Credential Access

High
Category
Privilege Escalation
Confidence
60% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · scripts/config.py (reported line 13)May include surrounding context.

python
model_config = SettingsConfigDict(
        env_prefix="XBY_GAOKAO_",
        env_file=".env",
        env_file_encoding="utf-8",
        extra="ignore",
    )

Credential Access

High
Category
Privilege Escalation
Confidence
78% confidence
Finding

This code explicitly opens and parses the local .env file to extract a specific API credential outside the normal settings abstraction. In the context of a mismatched skill package, direct credential harvesting logic is more suspicious because it targets a secret unrelated to the advertised animation functionality.

Content

Scanner excerpt · scripts/config.py (reported line 31)May include surrounding context.

python
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")

Credential Access

High
Category
Privilege Escalation
Confidence
78% confidence
Finding

The existence check precedes direct reading of .env for secret extraction, contributing to a code path whose purpose is to locate and ingest local credentials. In this package context, that behavior broadens secret exposure and is not well justified by the advertised animation-tool purpose.

Content

Scanner excerpt · scripts/config.py (reported line 32)May include surrounding context.

python
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():

Credential Access

High
Category
Privilege Escalation
Confidence
60% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · scripts/config.py (reported line 39)May include surrounding context.

python
if line.startswith("XBY_APIKEY="):
                    self.api_key = line.split("=", 1)[1].strip()
                    break
        # 如果环境变量有值,覆盖 .env 的值
        env_val = os.getenv("XBY_APIKEY", "")
        if env_val:
            self.api_key = env_val

Credential Access

High
Category
Privilege Escalation
Confidence
89% confidence
Finding

This function persists API keys into a plaintext .env file, creating a durable local secret store that may be readable by other users, backup systems, or accidentally committed to source control. Because the skill's declared purpose does not justify credential persistence, the behavior is especially risky and suspicious in context.

Content

Scanner excerpt · scripts/config.py (reported line 48)May include surrounding context.

python
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()

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
90% confidence
Finding

The skill declares no explicit tool scope while the documentation indicates capabilities involving environment access, file read/write, and network calls. Without least-privilege restrictions, a host agent may grant broader execution authority than users expect, increasing the blast radius of any misuse or prompt-injection-induced action.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The skill instructs the agent to request and persist an API key but does not explain storage location, retention, masking, reuse, or user consent. Poorly documented credential handling increases the chance of secret exposure, overcollection, and unsafe persistence in local files or logs.

Content

No source excerpt is available for this finding.

Ssd 3

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The instruction to directly present raw API data creates a concrete path for exposing secrets or sensitive user-provided content returned by the external service. Because this skill also requests API keys and communicates with a third-party endpoint, the context makes unfiltered output more dangerous than in a purely local, non-sensitive tool.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

This file implements a generic upstream MCP API client rather than logic narrowly scoped to GSAP animation generation. Because it accepts externally supplied mcp_id, tool_name, and params and forwards them to a remote endpoint, it expands the skill into a general remote action proxy, increasing the attack surface and enabling unintended capabilities beyond the declared purpose.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
83% confidence
Finding

This file uses Chinese-only natural-language strings in docstrings and user-facing error messages, such as the client description and API failure text. Under the stated policy, forcing a specific language without user opt-in is a natural-language policy violation unless the locale restriction is explicitly documented and justified.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The call_tool method allows arbitrary remote tool invocation by placing tool_name in the func header and forwarding attacker-controlled params directly to the upstream API. In the context of a GSAP animation skill, this is over-broad authority: if an attacker can influence these inputs, they may trigger unrelated remote capabilities, cause data exfiltration, or abuse the configured API key under the skill's trust boundary.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

This file persists an API key to a local .env file even though the manifested skill is an animation-generation tool, where long-term credential storage is not obviously necessary. Unnecessary persistence expands the secret exposure window, making accidental source control commits, local disclosure, or reuse by unrelated code more likely.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The code writes a supplied API key directly into a plaintext .env file and updates process environment state without any confirmation, warning, or visible user-consent mechanism. That makes secret persistence easy to trigger implicitly and increases the risk of accidental disclosure through filesystem access, backups, logs, or version control.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The function sends the user's free-form animation request, context, and complexity to an external API despite the skill being presented as a GSAP generation tool rather than a remote data-processing service. This creates a data-transparency and privacy risk because users may provide proprietary product details, roadmap information, or internal code assumptions without realizing that the data leaves the local skill boundary.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The file shows user-provided request data being sent to an external API with no visible warning, notice, or consent mechanism. In a developer tool context, users may reasonably paste sensitive implementation details, making silent exfiltration to a remote service a meaningful privacy and trust-boundary problem.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

Multiple wrapper functions send project data, code, framework details, plugin selections, and debugging content to an external API without any visible disclosure in this file. Because this is a software-development skill, the context increases danger: users are especially likely to submit proprietary code, internal architecture, or confidential performance/debugging information.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The debugging helper forwards user-supplied code, issue descriptions, and expected behavior to an external API. Debugging inputs frequently contain proprietary source code, secrets, internal URLs, or business logic, so undisclosed transmission materially increases confidentiality and compliance risk.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
82% confidence
Finding

The file presents core instructions primarily in Chinese while multiple tool-selection and parameter descriptions are written in English, and it does not state that users may choose their preferred language. This can amount to an implicit language policy constraint without opt-in or explicit justification.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
89% confidence
Finding

Directing the agent to display raw API responses without filtering can leak sensitive fields, debugging metadata, echoed user input, or unexpected content from the upstream service. Even if the service is benign, blindly surfacing raw payloads increases exposure to accidental disclosure.

Content

No source excerpt is available for this finding.