T09 · Insecure Skill Coding Practices
- Location
scripts/recall.py:160- Finding
Bearer Credential and Sensitive Query Exposure over Unencrypted HTTP
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This skill coherently calls a configured LibRAG knowledge-base recall API, with some disclosure and transport-safety caveats users should understand.
Install only if you intend to send knowledge-base questions to your configured LibRAG service. Keep the API key private, prefer a loopback or HTTPS base_url, avoid confidential questions if the endpoint or logs are not trusted, and rotate the key if it may have been exposed.
scripts/recall.py:160Bearer Credential and Sensitive Query Exposure over Unencrypted HTTP
The skill invokes a Python script that reads local configuration and performs outbound network requests, but it does not declare an explicit tool scope such as permissions or allowed-tools. This weakens least-privilege controls and increases the chance the skill is invoked with broader capabilities than users or the host expect, especially since it handles secrets like an API key and can contact arbitrary endpoints from config.
The name and description explicitly position the skill for Chinese scenarios only ("zh", "适用于中文场景下") without indicating that users may choose another language or that the restriction is mandatory for compliance reasons. This can violate language/locale policy expectations when no opt-in or justification is provided.
The trigger phrases are broad, natural-language requests such as '去知识库里查一下' and '从文档中找到答案', which can easily overlap with ordinary user intent and cause accidental invocation. In this skill, unintended activation is more concerning because execution reads local config and sends the user's query plus a stored API key to an external service, potentially exposing data or causing unauthorized retrieval from a knowledge base.
This code sends the user-provided question and multiple request parameters to a remote API endpoint, and includes a bearer API key in the request headers. The script has no confirmation prompt, warning print, or inline user-facing disclosure before transmitting that data, so users may not realize their query content is being sent off-host.
The display name and description explicitly present the skill as Chinese-only ("中文召回", "做中文知识库检索") with no indication that users can opt into another language or locale. This can violate language/locale policy when a skill appears to force a specific language without documented justification or user choice.