T09 · Insecure Skill Coding Practices
- Location
scripts/skillpay.js:6- Finding
Hardcoded Billing API Credential Used as an Authentication Fallback
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This paid content skill is mostly coherent, but it embeds a billing API key and auto-charges through an external service while overstating its AI capabilities.
Review this carefully before installing. It can contact SkillPay, send the supplied user ID, and attempt to deduct 0.001 USDT per generation. The embedded API key should be removed and rotated, billing should require explicit consent, and the description should clarify that the current generator is template-based rather than real AI generation.
scripts/skillpay.js:6Hardcoded Billing API Credential Used as an Authentication Fallback
templates/xiaohongshu.js:6Unnecessary Filesystem Probe Outside the Skill Directory
If the skill advertises paid AI generation, video scripts, and multi-platform support but only implements a narrower static template generator or omits billing integration, users may be induced to provide payment credentials or make purchasing decisions based on false functionality claims. Misrepresentation around paid features is especially risky because it can create financial harm and erode trust.
If the skill advertises paid AI generation, video scripts, and multi-platform support but only implements a narrower static template generator or omits billing integration, users may be induced to provide payment credentials or make purchasing decisions based on false functionality claims. Misrepresentation around paid features is especially risky because it can create financial harm and erode trust.
If the skill advertises paid AI generation, video scripts, and multi-platform support but only implements a narrower static template generator or omits billing integration, users may be induced to provide payment credentials or make purchasing decisions based on false functionality claims. Misrepresentation around paid features is especially risky because it can create financial harm and erode trust.
If the skill advertises paid AI generation, video scripts, and multi-platform support but only implements a narrower static template generator or omits billing integration, users may be induced to provide payment credentials or make purchasing decisions based on false functionality claims. Misrepresentation around paid features is especially risky because it can create financial harm and erode trust.
A live SkillPay API key is hardcoded directly in the source as a fallback value, which means anyone with repository, package, build artifact, or log access can extract it and invoke billing APIs. In a billing integration, this can enable unauthorized balance checks, charges, or payment-link generation under the skill owner's account, making the impact materially higher than a generic secret exposure.
The chargeUser function performs a real monetary deduction via a POST request, but there is no confirmation prompt, logging, or other visible user disclosure at the point of charge. Although comments describe the fee in code, those comments are developer-facing only and do not warn the end user before a charge is attempted.
The skill declares access to an environment secret (SKILLPAY_API_KEY) and appears to require networked billing behavior, but it does not declare any explicit tool scope such as permissions or allowed-tools. This weakens least-privilege guarantees and makes it harder for users or the platform to understand and constrain what the skill can access externally.
The manifest description is written entirely in Chinese and presents the skill as a Chinese-content generator, but it does not state that the language restriction is optional or region-specific. This can violate language/locale policy because the skill appears to impose a specific language without user opt-in.
The script's usage, content type names, and payment/help text are presented only in Chinese, which imposes a specific language on users. There is no indication that users can opt into another language or that the locale restriction is required for a region-specific purpose.
checkBalance sends userId to an external API endpoint, which is a network transmission of user-related data. The code contains no user-facing notice, prompt, or logging indicating that balance lookups share identifiers with a third-party billing service.
getPaymentLink posts user_id and amount to a remote billing endpoint, but the code provides no user-facing disclosure that this data is being transmitted externally. This is relevant to privacy and financial workflow safety because it initiates interaction with a payment provider.
This JavaScript template hard-codes all generated article text in Chinese, including the title framing, section headings, and call-to-action strings. That imposes a specific language on all outputs without any user opt-in or documented justification, which matches the locale-policy violation criteria.
This JavaScript skill generates Chinese-language output and comments throughout the file, including the produced template text and hashtags, with no indication that the user can opt into another language. That creates a natural-language policy concern because the skill effectively forces a specific language rather than offering user choice or documenting a justified locale restriction.
The package description is written as a Chinese-only label ("AI内容生成器 - 收费版"), which indicates a language-specific skill presentation without any visible user choice or justification in this file. Under the policy rule, locale or language constraints should be optional or clearly documented as region-specific.
The file's natural-language description mixes English with Chinese billing text and presents key cost information in Chinese only. This can violate language/locale policy when users are not given an explicit language choice or opt-in for Chinese messaging.
No suspicious patterns detected.