Back to skill

Security audit

master-atisha

Security checks for vulnerabilities and agentic risk

Overview

This is mostly a coherent religious teaching skill, but it needs review because it can send user search queries to an outside FoJin service without clear consent or redaction.

Before installing, consider whether you are comfortable with doctrinal search terms or parts of your question being sent to fojin.app when local sources are insufficient. Avoid including private personal details, confidential text, or secrets in questions, and ask the agent to stay offline for sensitive requests.

Vulnerability Patterns
  • Insecure Skill Coding PracticesFinds exploitable flaws such as hardcoded secrets or command injection
  • Skill Instruction HijackingAlters the agent's session goals or safety constraints when the skill loads
  • Agent Memory PoisoningWrites attacker-controlled rules into memory that affect later sessions
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
Findings (1)

T09 · Insecure Skill Coding Practices

Warning
Location
SKILL.md:38
Finding

Uncontrolled Disclosure of User Queries to a Third-Party Service

Content
View full analysis

Vulnerability Details

File Location: SKILL.md:38-43
Related Configuration: meta.json:15
Vulnerability Type: External transmission of potentially sensitive user input without consent or redaction
Risk Level: Medium

Vulnerable Code Snippet

markdown
**调用**(仅当 `citation_contract.live_retrieval_allowed == true`;用 `curl` 或宿主 HTTP 能力):

GET https://fojin.app/api/search/content?q=<URL编码查询>&size=5     # 全文检索
GET https://fojin.app/api/search/semantic?q=<URL编码查询>&top_k=5   # 语义检索

The corresponding configuration enables this behavior:

json
"live_retrieval_allowed": true

Technical Analysis

The Skill directs the agent to URL-encode a search query and send it to the external fojin.app service whenever local sources are considered insufficient. Although the Skill validates retrieved source metadata and explicitly treats returned text as untrusted data, it does not apply equivalent safeguards to outbound data.

Specifically, there is no requirement to:

  • Obtain explicit user consent before contacting the third party.
  • Reduce the user’s question to minimal, non-sensitive search terms.
  • Detect or redact credentials, personal information, confidential text, or other secrets.
  • Warn users that query strings may be retained in application, proxy, gateway, browser, or monitoring logs.
  • Offer or enforce an offline-only mode for sensitive requests.

Because the query is transmitted in the URL of a GET request, it is also more likely to be captured by infrastructure logs than data sent in a request body. This is a data-disclosure flaw rather than remote code execution: the retrieved content is expressly treated as untrusted citation data and is not instructed to be executed.

Attack Path

  1. A user asks a doctrinal question containing private context, personal information, confidential material, or credential-like data.
  2. The agent determines that the bundled offline excerpts do not adequately cover the ...[truncated 1203 chars]
Remediation
View remediation

Remediation Suggestions

  1. Require explicit, informed user consent before performing live retrieval.
  2. Extract only the minimum doctrinal keywords needed for a search rather than transmitting the complete user question.
  3. Detect and remove personal information, authentication material, private document text, and other secrets before constructing a request.
  4. Abort remote retrieval when sensitive content cannot be safely separated from the search terms.
  5. Prefer a POST request body over a GET query string where the service supports it, while recognizing that POST alone does not replace consent or redaction.
  6. Document the external-service privacy boundary, including what is transmitted and the possibility of third-party logging.
  7. Provide an explicit offline-only mode and make it the default for requests containing sensitive context.
  8. Add outbound-query tests covering API keys, passwords, email addresses, identifiers, private notes, and confidential excerpts.
  9. Consider an allowlist that permits only normalized titles, source identifiers, section names, and non-sensitive doctrinal terminology in remote searches.
Vulnerability Patterns
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
Findings (6)

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The trigger condition is explicitly broad: it says to invoke whenever a user's question 'touches' Kadam, lamrim foundations, or bodhicitta cultivation, even without explicit request. That can cause the skill to activate in loosely related conversations and override user intent, increasing the chance of unsolicited persona adoption, unnecessary retrieval/tool use, or policy-shaping behavior in contexts where the user did not ask for this specialized mode.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
84% confidence
Finding

The style instructions are written as prescriptive Chinese output guidance, and the file does not state that language selection is optional or user-driven. Because SQP-3 applies to all file types, this is a potential language/locale policy issue unless the skill explicitly provides opt-in or justification for restricting responses to Chinese.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
98% confidence
Finding

This markdown file presents all instructional content in Chinese and does not indicate that users can choose another language or that the skill is intentionally limited to a Chinese-speaking audience. Under the language/locale policy, forcing a specific language without user opt-in is a natural-language policy concern.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The skill content is entirely written as Chinese-only behavioral instructions and does not provide any mechanism to preserve the user's language preference or ask for consent before switching languages. This can cause unwanted language coercion, reduce accessibility, and increase the chance that safety-critical guidance is misunderstood by non-Chinese-speaking users.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
88% confidence
Finding

The skill's persona guidance mandates a specific stylistic register ('简洁、直接、慈悲恳切') and role voice, which may steer responses into a fixed religious/locale presentation without explicit opt-in. While not directly a security compromise, this can reduce user control and lead to misaligned outputs if the user wanted neutral analysis, translation, or comparative discussion rather than in-character teaching.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
83% confidence
Finding

The index and all usage guidance are written exclusively in Chinese, with no indication that users may choose another language or that the file is intentionally restricted to a Chinese-speaking audience. Under the stated policy, a skill that implicitly forces a specific language without opt-in can be a natural-language policy violation.

Content

No source excerpt is available for this finding.