Back to skill

Security audit

极鲸云速卖通数据分析与市场调研

Security checks for vulnerabilities and agentic risk

Overview

The skill is a coherent AliExpress research integration, but it stores GeekBI bearer login tokens in multiple local places, including the installed skill and current workspace, which warrants review before use.

Install only if you are comfortable authenticating to GeekBI and having a local bearer-token state file created. Before using it in sensitive workspaces, review or change the auth storage behavior so tokens are kept in one dedicated user config or OS credential store location, not in the skill directory or project workspace; clear old .geekbi state after testing.

Vulnerability Patterns
  • 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
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
Findings (1)

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/geekbi_auth.py:69
Finding
Bearer Tokens Are Mirrored Across Multiple Local Storage Locations<![CDATA[ ## Vulnerability Details **File Location**: `scripts/geekbi_auth.py:69-90`, `scripts/geekbi_auth.py:371-377` **Vulnerability Type**: Excessive credential persistence and cross-skill state collision **Risk Level**: Medium ### Vulnerable Code ```python def _user_config_state_path(): return _absolute_path( user_config_path("GeekBI", appauthor=False, ensure_exists=True) / "temu-research-skill" / AUTH_FILE_NAME ) def _skill_state_path(): return _absolute_path(Path(__file__).parent.parent / AUTH_STATE_DIR / AUTH_FILE_NAME) def _workspace_state_path(): return _absolute_path(Path(os.getcwd()) / AUTH_STATE_DIR / AUTH_FILE_NAME) def _resolve_stores(): candidates = ( ResolvedStore(_user_config_state_path(), "user-config-directory"), ResolvedStore(_skill_state_path(), "skill-directory"), ResolvedStore(_workspace_state_path(), "working-directory"), ) ``` ```python def _write_state_files(stores, payload): normalized = _normalize_state(payload) errors = [] written = 0 for store in stores: try: _write_state_file(store, normalized) written += 1 except OSError as error: errors.append(f"{store.kind}: {_storage_probe_reason(error)}") ``` ### Technical Analysis The authentication state includes the GeekBI bearer access token. Instead of storing that credential in one dedicated user configuration location, the implementation mirrors the same state into up to three locations: 1. A user configuration directory. 2. The installed Skill directory. 3. A `.geekbi` directory beneath the current working directory. This duplication exceeds the minimum persistence required for authenticated AliExpress API access. Skill and workspace directories are more likely to be processed by development tools, workspace synchronization, backup software, artifact packaging, or other processes running under the same user account. The user configur ...[truncated 2063 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Store authentication state in one dedicated user configuration location, for example: ```python user_config_path("GeekBI", appauthor=False) / "aliexpress-research-skill" / AUTH_FILE_NAME ``` 2. Remove the Skill-directory and working-directory stores from `_resolve_stores`; bearer credentials should never be mirrored into source trees or arbitrary workspaces. 3. Correct the `temu-research-skill` namespace to an AliExpress-specific namespace to enforce separation between Skills. 4. Prefer an operating-system credential manager, such as Keychain, Credential Manager, or Secret Service, rather than a plaintext JSON token file. 5. During migration, read a legacy state file only when necessary, write its state to the corrected secure location, and securely remove all obsolete copies. 6. Ensure logout and token revocation remove every historical copy, including the incorrectly named Temu path and any prior workspace or Skill-directory files. 7. On platforms where restrictive POSIX modes are unavailable, apply platform-native access controls or fail safely rather than silently accepting weaker protection. 8. Add automated tests asserting that authentication never writes beneath the Skill installation directory or current working directory and that AliExpress and Temu authentication namespaces cannot collide. ]]>
Vulnerability Patterns
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (2)

Lp3

Medium
Category
MCP Least Privilege
Confidence
90% confidence
Finding
The skill instructs use of local scripts and external data queries, implying file read, network, and shell-like execution capabilities, yet it declares no permissions or capability boundaries. This creates a transparency and policy-enforcement gap: an orchestrator or reviewer cannot reliably constrain what the skill may access, increasing the chance of unintended data access or external requests.

Vague Triggers

Medium
Confidence
78% confidence
Finding
The trigger description is broad enough to capture many ordinary commerce-research requests, which can cause over-activation of this skill when the user did not specifically request AliExpress or this data source. Over-broad routing is dangerous because it may steer conversations into unnecessary tool use and external data access, reducing user control and increasing the chance of inappropriate disclosure or misleading source selection.

Static analysis

No suspicious patterns detected.