T09 · Insecure Skill Coding Practices
- Location
scripts/geekbi_auth.py:52- Finding
Bearer Tokens Are Replicated Across Multiple Plaintext State Files
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill mostly does the advertised GeekBI/Ozon keyword lookup, but it needs Review because login tokens are stored in multiple local places and authenticated requests can be pointed at unvalidated API hosts.
Review this before installing if you will authenticate to GeekBI. Treat any .geekbi/agent-auth.json and GeekBI user-config auth files as sensitive, avoid custom --base-url values, and prefer installing only after the publisher restricts API origins, stores tokens in one appropriate credential location, uses an Ozon-specific namespace, and documents login-state handling.
scripts/geekbi_auth.py:52Bearer Tokens Are Replicated Across Multiple Plaintext State Files
scripts/ozon_keyword_search.py:42Unrestricted API Base URL Permits Authentication and Sensitive Requests to Untrusted or Plaintext Origins
The skill claims to provide Ozon keyword analytics, but part of the detected behavior is limited to site-list querying and site resolution rather than the advertised keyword metrics and analysis. This is a security concern because description-behavior mismatch undermines trust boundaries and can conceal auxiliary capabilities that users did not intend to authorize, even if the hidden behavior is not overtly malicious.
The skill claims to provide Ozon keyword analytics, but part of the detected behavior is limited to site-list querying and site resolution rather than the advertised keyword metrics and analysis. This is a security concern because description-behavior mismatch undermines trust boundaries and can conceal auxiliary capabilities that users did not intend to authorize, even if the hidden behavior is not overtly malicious.
The skill declares no explicit tool scope while the implementation reportedly has file, network, and shell capabilities. That creates a least-privilege failure: the agent may invoke broader capabilities than users or reviewers expect, increasing the attack surface for data access, command execution, or unintended outbound requests.
The invocation description is broad enough to trigger on general e-commerce discussions, which can cause over-invocation of a networked skill in contexts where the user did not clearly request it. In practice this increases the chance of unnecessary external queries, unintended data sharing, and confusion about when the agent is using third-party services.
The natural-language description specifies handling of '中文词' and the document is written as if Chinese is the default interaction language, but it does not state that language choice is optional or user-selected. This can violate language/locale policy when users have not opted into Chinese output.
The module and many user-visible exception and CLI messages are written only in Chinese, which imposes a specific language on users without opt-in. Under the stated policy, forcing a language/locale without offering choice or documenting a justified region-specific constraint is a natural-language policy violation.
The auth state is stored under a directory segment named "temu-research-skill" even though this skill is for Ozon. That namespace mismatch can cause credential/state confusion, accidental sharing with another skill, or loading the wrong login state if multiple skills coexist on the same system, which is a real security boundary failure for local token storage.
The code unlinks stored authentication state files in clear_auth_state() across multiple locations, which is a destructive file operation affecting user session data. There is no confirmation prompt, log/print disclosure in this function, and the module docstring does not warn that invoking clear will remove persisted login state.
The display name, description, and default prompt are all written only in Chinese, which implies a fixed language choice in the skill's user-facing interface. Under the language/locale policy, this is a natural-language policy concern when no user choice or opt-in is provided.
The file-level docstring is written entirely in Chinese and describes the skill behavior in a way that assumes Chinese-language usage, while the script offers no language or locale choice. Under the policy, forcing a specific language without opt-in can be a natural-language policy violation unless the locale constraint is clearly documented and justified.