Back to skill

Security audit

unisound-prescription-assist

Security checks for vulnerabilities and agentic risk

Overview

The skill is coherent as a prescription-assistance tool, but it handles sensitive patient data and its privacy protections are weaker than the documentation claims.

Review before installing or using with real patient data. Do not submit names, IDs, phone numbers, addresses, record numbers, or other identifiers unless the remote model service and legal/privacy arrangements explicitly allow it. Use only an approved HTTPS model endpoint, avoid overriding --base, and use a narrowly scoped AppKey that can be rotated. Clinicians should treat the output as decision support, not an authoritative prescription.

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 (2)

T09 · Insecure Skill Coding Practices

Error
Location
scripts/run.py:131
Finding

Patient information is transmitted without the promised de-identification

Content
View full analysis
int: prompt = f"""请根据以下信息,为患者提供处方开具辅助建议。 【处方信息】 {prescription_info.strip()} 请严格按照要求输出 JSON + 摘要。""" print("正在分析处方信息...") result = llm([sys_msg(SYSTEM_PROMPT), user_msg(prompt)]) ``` ### Technical Analysis There is no de-identification, redaction, field filtering, or validation between loading the clinical record and transmitting it to the model API. `prescription_info` is interpolated into the outbound prompt without modification. Although the documentation discourages users from supplying names, identification numbers, and telephone numbers, a warning is not a technical control. Unstructured clinical records commonly contain direct and indirect identifiers, including names, contact details, dates, record numbers, addresses, and rare diagnoses. This discrepancy creates a false security expectation: operators may reasonably rely on the explicit statement that de-identification occurs automatically and therefore submit records containing protected health information. ### Attack Path 1. A clinician supplies a text or JSON input containing patient identifiers and clinical information. 2. `load_input()` reads the record and returns its contents without redaction. 3. `run_prescription()` interpolates the entire record into `prompt`. 4. `make_llm_caller()` pas ...[truncated 958 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Error
Location
scripts/run.py:44
Finding

Configurable API endpoint can receive the bearer credential and sensitive clinical records

Content
View full analysis
` header. - The full model request, including patient and prescription information. This is a trust-boundary failure because a credential intended for the internal medical model is forwarded to whichever destination is supplied through `--base`. ### Attack Path 1. An attacker influences an invocation command, deployment configuration, wrapper script, or setup instruction. 2. The attacker sets `--base` to an endpoint they control, such as `https://attacker.example/v1` or a plain HTTP URL. 3. `make_llm_caller()` const ...[truncated 995 chars]
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • System Prompt LeakageDirect Leakage, Indirect Extraction, Tool-Based Exfiltration
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (4)

Ae4

Medium
Category
analysis-evasion
Confidence
80% confidence
Finding

Suspicious Unicode normalization or mixed-script content

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
95% confidence
Finding

The skill documentation describes code that reads input files, writes output files, and sends patient prescription data to a remote medical model API, but it does not declare any explicit tool permissions or allowed-tools scope. In a medical context this is dangerous because the skill handles sensitive health data and can perform network egress and filesystem access without clear least-privilege boundaries, increasing the risk of unintended data exposure or misuse.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The file’s natural-language instructions and usage documentation are presented only in Chinese, which imposes a specific language/locale on users without stating that this is optional. The policy for SQP-3 flags language or locale constraints when the skill does not offer the user a language choice or explicit opt-in.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The system prompt and user-facing instructions require the model to operate and format output entirely in Chinese, including a fixed Chinese summary marker and Chinese JSON field semantics. This is a language policy constraint embedded in natural-language instructions, and the file does not offer a user language choice or explain a justified region-specific limitation.

Content

No source excerpt is available for this finding.