T09 · Insecure Skill Coding Practices
- Location
SKILL.md:131- Finding
Sensitive Account-Binding Credential Collected Through the Conversation
- Content
View full analysis
Vulnerability Details
File Location:
SKILL.md:131-146
Vulnerability Type: Sensitive credential exposure through an insecure collection channel
Risk Level: HighVulnerable Code Snippet
markdown ### Step 2: Ask the user for the XinJianXue AI authorization code and complete the binding **The AI must stop here and ask the user for the XinJianXue AI authorization code.** It is a one-time credential, **usable only to bind the license above to the user's account**, and for nothing else. Use this fixed wording: > "Open the official website **www.xinjianxue.com → sign in → "Personal Center" (个人中心) → "AI Assistant Authorization Code" (AI 助手授权码)**, and send me the 8-character authorization code shown there; I need it to complete the account binding. > Reminder: this code is a **sensitive one-time credential** that is voided the moment the binding succeeds — please confirm you are talking to the official XinJianXue AI assistant (service domain `www.xinjianxue.com`) and send it only to me, this one AI; do not post it in a group chat, do not screenshot or share it, and do not give it to any other AI." `POST /api/xinjianxue/ai/license/bind` with body: ```json { "license": "XJX-AI-xxxxxxxxxxxxxxxx", "auth_code": "<the 8-character code the user sent>" }On success it returns
api_key(the business credential).⚠️ The AI authorization code is a sensitive one-time credential (8 characters, case-sensitive); it is voided once binding succeeds, and it may only be used for this one binding.
text ### Technical Analysis The Skill explicitly classifies the eight-character authorization code as a sensitive, one-time account-binding credential, but instructs the user to paste it into the AI conversation. This places the secret in the model context and may also expose it to conversation history, platform telemetry, application logs, debugging systems, or any other component with access to the transcript. The warning against sharing the code ...[truncated 1889 chars]- Remediation
View remediation
Remediation Suggestions
- Replace chat-based credential collection with an OAuth-style authorization-code flow, browser redirect, or device authorization flow.
- Require the user to enter the authorization code only on the external service's authenticated HTTPS page, not into the AI conversation.
- Return to the Agent only a short-lived, single-purpose, audience-bound confirmation token that cannot independently bind another license.
- Bind the authorization transaction server-side to the exact pending license, user session, intended Agent instance, expiration time, and a cryptographic nonce.
- Make authorization codes short-lived and atomically single-use, with rate limiting and replay detection.
- Redact authorization codes from prompts, transcripts, telemetry, proxy logs, exception reports, and tracing systems.
- If compatibility requires temporary conversational entry, use a host-provided secret-input interface that bypasses model context and persistent chat history.
- Notify users of new bindings through an independent channel and provide a self-service method to review and revoke unauthorized bindings.
