T09 · Insecure Skill Coding Practices
- Location
handler.js:145- Finding
API Credentials and User Data Can Be Sent to an Unrestricted or Insecure Endpoint
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This skill has a clear paid-service discovery purpose, but it can send user data and API credentials to configurable external endpoints and invoke paid services without enforcing the documented confirmation gate.
Review this before installing if you plan to connect a real SkillForge account. Use only a trusted HTTPS platform URL, a narrowly scoped/revocable API key, and external spending limits. Do not allow automatic invocation of paid services unless the host enforces explicit per-call confirmation showing the service, destination, data being sent, and authoritative price.
handler.js:145API Credentials and User Data Can Be Sent to an Unrestricted or Insecure Endpoint
handler.js:371Paid Service Invocation Does Not Enforce Documented User Confirmation
handler.js:385Maximum Cost Limit Can Be Bypassed Through Caller-Controlled Price Data
handler.js:257Untrusted Marketplace Metadata Is Embedded in Agent-Facing Output
声明描述的是一个面向运行时的服务发现与调用技能;但给出的代码块只是 test.js 测试文件,其主要作用是验证 detectCapabilityGap、formatServiceList、formatInvocationResult 和关键词映射等函数是否按预期工作。代码中没有网络请求、没有服务查询、没有付费服务调用、没有自动推荐逻辑的实际执行,仅有测试数据构造、字符串检查、日志输出和 process.exit。因此该代码块的实际用途与声明的主要目的存在明显不一致。
The skill documentation and all user interaction examples are presented in Chinese, including example prompts and agent responses, with no indication that other languages are supported or that the language choice is optional. This can amount to a language/locale policy issue because the skill appears to assume a fixed language for invocation and usage without user opt-in.
The skill declares behavior involving external API discovery and invocation, but does not specify any tool scope such as permissions or allowed-tools. For a network-capable skill that can trigger paid remote calls, missing explicit scope weakens policy enforcement and makes unintended or overly broad network access more likely.
The natural-language content of the skill is entirely presented in Chinese, and there is no indication that users may select another language or that the skill is intentionally limited to a Chinese-speaking context. Under the stated policy, forcing a specific language without opt-in is a locale-policy concern.
The trigger phrases are broad and generic, covering common language such as finding APIs or missing capabilities. In an agent environment, this can cause the skill to activate in situations the user did not explicitly intend, increasing the chance of unsolicited external discovery or progression toward paid service usage.
The auto-activation criteria are vague, such as when the agent believes a task needs an external API or a capability is missing. Because this skill is designed to discover and potentially call paid third-party services, ambiguous activation can lead to unreviewed data being sent off-platform, accidental charges, or untrusted service selection without meaningful user consent.
Comments and returned messages such as initialization errors, discovery results, and invocation output are written exclusively in Chinese. This can violate language/locale policy when the skill forces a specific language without offering user selection or documenting a justified locale constraint.
Skill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.
auto_discover: true,
discover_limit: 3,
max_cost_per_call: 1.00,
auto_confirm_free: false
};
/**
The skill sends arbitrary user-provided input to an external paid service endpoint, but this file does not enforce any user consent, destination disclosure, or data-sensitivity checks before transmission. In an agent setting, this can leak sensitive prompts, files, or derived secrets to third-party providers and may also trigger unintended charges.
The manifest explicitly advertises 'automatic discovery and invocation' of external AI services, but it does not define clear trigger constraints, approval gates, or scope limits in the package metadata. In a skill that can invoke paid third-party services, vague autonomy increases the risk of unexpected outbound requests, unintended data sharing, and surprise billing when the host agent decides a local capability is missing.
The manifest description states the skill will 'automatically discover and call paid AI services,' yet there is no explicit warning in the package metadata about billing, external data transfer, or user consent requirements. Because this skill's purpose is service discovery and invocation of paid services, omission of a strong warning materially increases the chance of unauthorized spend or unreviewed transmission of prompts/data to third parties.
The presence of an 'auto_confirm_free' option enables autonomous approval behavior for at least a subset of external service invocations. Even though the default is false, this kind of autonomous decision-making is risky in a service-discovery skill because 'free' services can still exfiltrate sensitive data, perform unreviewed actions, or establish unsafe trust in third-party providers without human review.
"default": 1.0,
"minimum": 0
},
"auto_confirm_free": {
"type": "boolean",
"description": "是否自动确认免费服务",
"default": false
The description states that the skill will automatically discover and call paid AI services, but it does not prominently warn users that external services may be contacted, that costs may be incurred, or that data may leave the local environment. This weakens informed consent and makes accidental disclosure of prompts or billable usage more likely when the skill is triggered.
The trigger keywords are very broad and include generic terms like '服务', 'API', '工具', and '调用', which can cause the skill to activate in many unrelated conversations. Because this skill is designed to discover and call external paid services, over-triggering increases the chance of unintended network access, cost-incurring actions, or recommendations being made without sufficiently clear user intent.
The automatic 'capability_missing' trigger allows the skill to activate whenever the agent detects a capability gap, but the metadata does not define clear boundaries, approval requirements, or safe fallback behavior. In the context of a discovery skill that may contact external paid services, this ambiguity can lead to silent escalation from a local failure into unsolicited third-party service discovery or invocation.
This JavaScript file contains user-facing console output and descriptive strings entirely in Chinese, including the skill title and test result messages. Under the policy rule, forcing a specific language without opt-in is a locale-policy issue unless the constraint is explicitly justified, which is not present here.
Service discovery sends task/capability-derived information plus a bearer API credential to an external platform without any user-facing notice or consent flow in this code. Even if discovery sends less data than invocation, task descriptions can still reveal sensitive intent, and the automatic outbound call expands the privacy and trust boundary.
The primary user-facing description is in Chinese only, with no indication of language choice or localization support. This can violate a language/locale policy when a skill forces a specific language without user opt-in or documented regional justification.
Dependency has known vulnerabilities (CVEs). Using packages with unpatched security flaws exposes the environment to known exploits.
The skill name and description are written only in Chinese, with no indication that language is configurable or intentionally limited to a Chinese-speaking context. This can constitute a locale/language policy issue because the skill appears to impose one language without user opt-in or documented justification.