T09 · Insecure Skill Coding Practices
- Location
references/config-guide.md:10- Finding
Plaintext credential storage is explicitly encouraged
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill mostly does the advertised bidding-monitoring work, but it tells users to store procurement-site credentials in plaintext and can print account identifiers, so it needs careful review before installation.
Install only if you are comfortable with a browser-based tool visiting many procurement sites and writing daily results locally. Do not place real passwords in references/gx_websites.json unless you can protect that file, keep it out of source control and shared archives, and accept the risk; prefer a separate secret manager or runtime-only credentials. Avoid using --auth-only in logged or shared terminals if account identifiers are sensitive.
references/config-guide.md:10Plaintext credential storage is explicitly encouraged
scripts/gx_bidding_monitor.py:264Configured account identifiers are exposed in terminal and automation logs
SKILL.md:19Unnecessary third-party packages are installed without version or integrity constraints
The documented purpose is narrow, but the behavior described by analysis includes handling account-related information, generating outbound message content, and writing artifacts to disk. This mismatch is dangerous because users may authorize the skill for simple monitoring without realizing it stores data, inventories login-required targets, or processes credential-adjacent information, which expands privacy and security risk beyond the stated scope.
The skill advertises executable behavior involving file access and shell execution but does not declare any tool scope or permission boundaries in the manifest. That creates an unnecessary trust gap: operators cannot easily determine what capabilities the skill needs, and a runtime may grant broader access than expected, increasing the chance of unintended file modification or command execution.
The guide explicitly instructs users to place usernames and passwords in a JSON file, which encourages plaintext credential storage without any warning, encryption, or secret-management controls. In a skill that scans many third-party bidding platforms, compromise of that file could expose multiple accounts and enable unauthorized access, data scraping, or account misuse.
The manifest describes the skill as filtering 'power/electric bidding notices only,' but this file enumerates broad categories such as real estate, provincial SOEs, central enterprises, industry, and other enterprise procurement platforms. That expands the apparent monitoring scope well beyond power/electric bidding and indicates a semantic mismatch between the claimed purpose and the configured target set.
subprocess module calls execute external commands. Without careful input validation, this enables command injection.
def run(cmd, timeout=25):
try:
r = subprocess.run(cmd, capture_output=True, text=True, timeout=timeout)
return r.stdout, r.stderr, r.returncode
except Exception as e:
return '', str(e), 1
The script prints login-required platform details and, when present, outputs associated account identifiers to stdout. Exposing credential-related data in console output is unnecessary for basic monitoring and can leak sensitive information into logs, terminal history, shared sessions, or screenshots.
Authentication account information is written directly to stdout without any privacy guardrails. Console output may be captured by logs or visible to other users, making this a straightforward information disclosure issue.
The script persists scan results and generated message content into the user workspace without explicit consent or disclosure. While this is normal application behavior in many tools, it can create privacy and retention risks if the collected data contains sensitive procurement details or if the workspace is broadly accessible.
The skill instructs users to place their own credentials into a configuration file but provides no warning about plaintext storage, access control, or secret-handling practices. In a tool that targets 50+ procurement platforms, this increases the likelihood of credential leakage through source control, local workspace exposure, backups, or logs.
The module description and all user-facing CLI/help strings are fixed in Chinese, which can impose a language constraint on users without opt-in. The file does not state that the skill is intentionally restricted to a Chinese-speaking or Guangxi-specific operator audience.
Detected: suspicious.install_untrusted_source