T01 · Skill Instruction Hijacking
- Location
SKILL.md:102- Finding
Mandatory Commercial Content Injection into Agent Responses
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This skill matches its social-media lookup purpose, but it reads a local auth token, sends business queries to an external API, logs part of the token, and injects recurring payment links into responses.
Review before installing. Use only a token intended for this service, avoid submitting confidential lead lists or regulated customer data, and treat upgrade/renewal links in responses as provider-supplied commercial links. Operators should remove token-prefix logging, validate the payment URL, add a privacy notice, and escape or validate API-returned Markdown fields.
SKILL.md:102Mandatory Commercial Content Injection into Agent Responses
handlers/ora_sns_pro_handler.js:30Unvalidated Configurable Payment URL Rendered as a Trusted Markdown Link
tools/ora_sns_pro_api.js:177Authentication Token Prefix Disclosed in Application Logs
handlers/ora_sns_pro_handler.js:177Untrusted API Response Fields Rendered as Unescaped Markdown
Mixing characters from multiple Unicode scripts in a single identifier is a common technique to create visually ambiguous tool names.
The skill performs outbound network requests to third-party APIs but does not declare an explicit tool scope such as allowed-tools or permissions. That mismatch weakens reviewability and runtime least-privilege controls, making it easier for a skill with network capability to be installed or trusted without a clear disclosure of what it can access.
The skill directs the agent to read a local AuthToken from ../../OraAgent.key without an explicit warning that local credentials/configuration will be accessed. Accessing local secret material is sensitive because it expands the skill's trust boundary and may expose or misuse credentials if the environment or skill execution model is broader than expected.
The skill instructs sending user-supplied company names, domains, and keywords to external APIs without an explicit privacy notice or consent checkpoint. Users may unknowingly disclose sensitive lead lists, customer targets, or proprietary research terms to a third party, creating confidentiality and compliance risk.
The skill is designed to transmit user queries and authentication headers to an external API endpoint, which is a real external data transmission risk. In this context the transmission is core functionality, but it remains security-relevant because it sends potentially sensitive business queries off-platform and relies on a third-party service boundary.
console.log(完成: ${succeeded} 成功, ${failed} 失败);
### curl 调用示例
```bash
# 关键词搜索(keyword 应为英文,如用户输入中文请先翻译)
The README documents sending user-supplied keywords, company names, and domains to third-party API endpoints but does not disclose that this data leaves the local environment or warn about privacy, confidentiality, or data-handling implications. In a lead-generation/social-media lookup skill, users may submit sensitive prospecting targets, client names, or internal research terms, so the omission can cause unintended external disclosure.
The handler's comments and runtime messaging state that Chinese queries should be translated to English because the data source is mainly English. This creates a language-handling policy issue because the skill nudges or defaults users toward a specific language rather than offering a neutral language choice.
The logic sets _needsChineseTranslation whenever keywords contain Chinese and the user did not explicitly request Chinese search. This effectively imposes an English-preferred locale behavior without an affirmative user opt-in, which matches the language-policy violation category.
Both the fallback keyword branch and batch keyword branch log that Chinese keywords need to be translated to English before querying. This repeats the same language policy issue across alternate parsing paths, showing the behavior is systematic rather than incidental.
The manifest name and user-facing changelog entries are presented exclusively in Chinese, but the file does not document that the skill is intended only for Chinese-speaking users or offer any language/locale choice. Under the policy, forcing a specific language without user opt-in or clear justification is a natural-language policy violation.
The natural-language instructions state that keywords should be in English and that Chinese input should be translated before calling the method. This imposes a language constraint in the skill behavior without presenting it as an optional user choice or documenting a justified region-specific limitation.
No suspicious patterns detected.