T09 · Insecure Skill Coding Practices
- Location
scripts/package.py:22- Finding
Plaintext API credentials may be included in distributable skill archives
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This skill should be reviewed because it asks for real publishing credentials while its publishing and analytics code appears to simulate success rather than perform real platform actions.
Install only after reviewing the code and treating it as a demo, not a real publisher. Do not place real platform secrets in scripts/config.json or publish/share archives made by scripts/package.py unless secrets are removed. Use test accounts, isolate dependencies in a virtual environment, and do not rely on reported publish URLs or analytics as real platform data.
scripts/package.py:22Plaintext API credentials may be included in distributable skill archives
README.md:279Installation instructions use unpinned third-party dependencies
scripts/auto_publish.py:200Simulated publishing and analytics are returned as successful real operations
The README instructs users to place live platform API credentials directly into a local JSON config file but provides no warning about secret sensitivity, file permissions, accidental commits, or safer secret-storage options. This increases the risk of credential leakage through source control, backups, shared workstations, or logs, which could allow unauthorized posting or account/API abuse.
The README presents single and batch publishing as routine commands but does not clearly warn that these operations will perform real external posting actions to connected user accounts. Users may execute examples assuming they are dry-run or demo behavior, causing unintended publication, reputational harm, policy violations, or spam across multiple platforms.
The skill promotes automated multi-platform publishing and bulk uploads to external accounts without any warning about the risks of unintended posting, account policy violations, or accidental mass distribution. This is dangerous because users may connect privileged creator accounts and trigger irreversible external actions at scale without informed consent or safeguards.
The instructions tell users to place API keys, access tokens, and client secrets directly into a JSON file, but provide no guidance on secure storage, least privilege, rotation, or exclusion from version control. Exposed publishing credentials could let an attacker post content, access account data, or abuse linked platform accounts across multiple services.
The file-level description and all user-facing CLI/help text are written only in Chinese, which imposes a specific language on users without any opt-in or alternative. The policy explicitly calls out language or locale constraints as violations when the skill does not offer user choice or clearly justify the restriction.
This script performs real publication to external platforms in batch mode unless --dry-run is explicitly set, but it does not require an affirmative confirmation or present a strong warning about irreversible external side effects. In an automation or agent-skill context, that increases the risk of unintended data transmission, accidental account actions, or mass posting using configured credentials.
Dynamic import() can load arbitrary modules at runtime, bypassing static analysis and potentially importing malicious code.
"index": i,
"item": item,
"result": result,
"timestamp": str(__import__('datetime').datetime.now())
})
# 输出进度
This code file contains natural-language strings that force a specific language/locale for the skill interface, including the module description and command-line help/output text. The policy requires either user language choice or a clearly justified documented locale constraint, neither of which is present here.
The module docstring and user-facing CLI messages are written only in Chinese, which imposes a specific language on users without opt-in or alternative locale support. This matches the policy category for language/locale constraints because the script does not offer a language choice or document a justified region-specific limitation.
The module title and description are written entirely in Chinese, and the user-facing logs, CLI help text, and output throughout the file also assume Chinese as the only interaction language. This creates a natural-language locale constraint without opt-in or documentation that the skill is intended only for a Chinese-language environment.
The generate() docstring says the video_path argument is optional and used for analyzing video content, and analyze_video() is documented as analyzing video content. In reality, the code only checks the filename extension and then produces random tags without opening or inspecting the video file, which directly contradicts the documented behavior.
The module presents itself as a post-publication tracker and initializes platform-specific trackers, but every tracker returns fabricated hard-coded metrics after a sleep delay. In an agent skill context, this is dangerous because downstream automation or users may treat the output as real platform analytics, causing deceptive reporting, bad decisions, or silent integrity failures.
This Python file contains natural-language descriptions, help text, and output messages exclusively in Chinese, starting with the module docstring and continuing through the command-line interface. Under the policy rule, forcing a specific language without opt-in is a natural-language policy violation because users are not offered an alternative locale or language selection.
The skill advertises post-publication analytics tracking without warning that account/content performance data may be collected, transmitted, stored, or exposed in logs and reports. While common for publishing tools, the lack of disclosure can lead to privacy misunderstandings and unsafe handling of potentially sensitive account analytics.
The script's docstring, CLI description, argument help text, and runtime messages are written only in Chinese, which imposes a specific language on users. There is no indication that the tool is region-specific or that users can choose their preferred language/locale.
The user-facing note strings are written only in Chinese across multiple platform entries, and the file does not indicate that the skill is region-specific or that users may choose another language. This can violate a language/locale policy when a skill imposes a specific language without opt-in or justification.
The constructor accepts keyword_db_path and load_keyword_db() is documented as loading a keyword database, with comments saying it should load from a file or API. However, the implementation does not use db_path at all and instead returns a fixed in-memory dictionary, which diverges from the stated behavior.
No suspicious patterns detected.