T09 · Insecure Skill Coding Practices
- Location
scripts/shopee_goods_search.py:59- Finding
Unrestricted Base URL Enables Arbitrary Network Requests and Insecure Credential Transport
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill is mostly a read-only Shopee research tool, but it under-discloses sensitive GeekBI login-token handling and gives the scripts broader network and local storage behavior than users would expect.
Review before installing. This skill sends Shopee research queries to GeekBI and may require a GeekBI login. It stores GeekBI bearer tokens locally in multiple places and exposes a base-url option that should not be used with untrusted or non-HTTPS endpoints. Only install it if you trust the publisher and are comfortable with local token persistence; clear auth state after use if the workspace is shared.
scripts/shopee_goods_search.py:59Unrestricted Base URL Enables Arbitrary Network Requests and Insecure Credential Transport
scripts/geekbi_auth.py:371Bearer Tokens Are Replicated in Plaintext Across Multiple Filesystem Locations
scripts/geekbi_auth.py:498Unvalidated Server-Supplied Action URLs Create a Phishing and Unsafe Navigation Channel
If the implementation persists login state and access tokens, handles web login challenges, and refreshes authentication tokens while the skill description omits these behaviors, operators cannot accurately assess the credential-handling risk. Hidden or undocumented auth flows are dangerous because they introduce secrets storage, session management, and possible account misuse surfaces beyond the stated read-only analytics purpose.
If the implementation persists login state and access tokens, handles web login challenges, and refreshes authentication tokens while the skill description omits these behaviors, operators cannot accurately assess the credential-handling risk. Hidden or undocumented auth flows are dangerous because they introduce secrets storage, session management, and possible account misuse surfaces beyond the stated read-only analytics purpose.
The skill declares no explicit tool scope even though its documented workflow invokes local scripts that imply file read, network, and shell execution. Without an allowlist or permissions boundary, the runtime may grant broader capabilities than users or reviewers expect, increasing the chance of unintended file access, arbitrary command execution, or uncontrolled outbound requests.
This file contains natural-language strings that force a specific language/locale for descriptions and user-visible messages. Under the policy, locale constraints should either be optional for the user or clearly justified as region-specific; that justification is not present in this file.
The module docstring and manifest indicate this file manages GeekBI authentication for the current Shopee product search skill, but the user-config storage path is hardcoded under "temu-research-skill". This inline implementation detail actively contradicts the skill identity implied by the file and manifest, causing auth state to be stored in another skill's namespace.
SQP-3 applies to all file types and includes language or locale policy violations. The module docstring is written as an instructionally fixed Chinese description with no indication that language is configurable or user-selected, which can violate a policy requiring language choice rather than forcing a specific locale.
The natural-language strings in the docstring, argument descriptions, validation errors, and output messages are all fixed in Chinese, with no option for the user to select another language or locale. Under the stated policy, forcing a specific language without user opt-in is a natural-language policy violation.
This Python file is a code file, so SQP-2 applies to safety-relevant operations such as network calls that transmit user or system data. The file defines an external API base URL for Shopee-related requests, but there is no nearby comment, docstring detail, logging, or user-facing notice in this file explaining that query parameters may be sent to a remote service.
This code performs an authenticated HTTP request to a remote API, which may transmit system or user-associated authentication context, but the script provides no user-facing notice at runtime beyond a generic description. Aside from the brief module docstring, there is no explicit warning, log message, or comment disclosing that a live authenticated network call will occur.