Back to skill

Security audit

租房押金纠纷助手

Security checks for vulnerabilities and agentic risk

Overview

This is a coherent China rental-dispute helper, but its local script has an unsafe input-file handling bug that could let a crafted filename run code on the user's machine.

Review before installing. The skill's purpose is legitimate and local, but do not run its script on JSON files or paths from untrusted sources until the Python path handling is fixed. Treat generated letters and legal analysis as drafts only, verify local law and dates, and avoid storing case files with sensitive personal or dispute details in shared or synced folders unless you intend that exposure.

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

Error
Location
scripts/rental-dispute.sh:55
Finding

Arbitrary Python Code Execution Through Unsafe Input Path Interpolation

Content
View full analysis
/dev/null || die "E-JSON-PARSE: Failed to read key '$key' from '$file'" } ``` The same unsafe construction is used in `json_keys()` and `json_len()`. Additional inline `python3 -c` blocks interpolate the `--input` path directly into Python source when generating evidence and timeline output. ### Technical Analysis The value supplied through `--input` is assigned to the shell variable `input` and later passed as the `file` argument to `json_get`, `json_keys`, and `json_len`. The script embeds that value directly inside a single-quoted Python string: ```python with open('$file') as f: ``` Shell quoting does not make this safe because the interpolation occurs while constructing Python source code. If the filename contains a single quote followed by a valid Python expression, the filename can terminate or alter the intended Python string and introduce executable Python syntax. The `require_input()` function only checks that the supplied path refers to an existing regular file: ```bash [ -f "$input" ] || die "E-FILE-NOT-FOUND: Input file '$input' not found." ``` This existence check does not sanitize the filename and does not prevent source-code injection. Unix filenames can contain quotes, spaces, semicolons, and most other char ...[truncated 2470 chars]
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (11)

Tp2

High
Category
MCP Tool Poisoning
Confidence
85% confidence
Finding

Mixing characters from multiple Unicode scripts in a single identifier is a common technique to create visually ambiguous tool names.

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
70% confidence
Finding

Without declared permissions the skill's intent is opaque and cannot be validated.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The invocation guidance names only Chinese phrases like '押金不退' and '房东扣押金' as the user-request context. This creates a language-specific activation policy without any opt-in or explanation that the skill is intended only for Chinese-language or region-specific disputes.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

The field description specifies "Amount in RMB," which imposes a specific regional/currency context in natural language. In a general rental-dispute skill schema, this is a locale-specific policy choice that is not justified or paired with user opt-in in this file.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
88% confidence
Finding

This CLI handles highly sensitive personal and legal-dispute data, and its interface advertises an --output option without warning users that generated files may contain names, dispute narratives, payment details, and complaint materials. In shared machines or synced directories, users may unknowingly create persistent plaintext records that are later exposed to other local users, backups, or cloud sync targets.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The analyze command description states that it maps disputes to applicable Chinese laws and regulations, and the rest of the script consistently generates China-specific legal workflows and Chinese-language materials. Because this .sh file is a code file and the policy applies to natural-language strings in all file types, this appears to impose a specific legal/locale context without offering user choice or clearly limiting the skill to China-only use in the invocation flow.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The manifest's success path tells users to generate and then send a demand letter as if it were ready for external use, without any instruction to review the contents for legal accuracy, factual completeness, or local applicability. In a legal-dispute context, this can cause users to send inaccurate or overstated claims, harming their position, escalating conflict, or creating compliance and liability issues.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
85% confidence
Finding

The document explicitly states a 'Default output for Chinese users,' which imposes a language/locale behavior based on inferred user identity rather than an explicit choice. The policy allows locale constraints when the user is offered a language choice or when the constraint is clearly justified as region-specific, but this section does not present an opt-in or alternative.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
86% confidence
Finding

The schema descriptions specify monetary values only in 'RMB', and the file does not indicate that the skill is explicitly limited to a China-specific jurisdiction or that users can opt into this locale/currency assumption. Because SQP-3 applies to all file types and covers language/locale policy issues, this is a natural-language policy concern in the schema metadata.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Low
Category
Not specified by scanner
Confidence
96% confidence
Finding

The code calculates issue_date as today plus 7 days in L0982, which implies the negotiation template should present a dynamic deadline. However, the firm-script output hard-codes 2026-06-25 at L1090 instead of using the computed value, so the implementation contradicts the apparent documented/template intent of producing case-specific negotiation text.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
82% confidence
Finding

The display name and description are in Chinese and the workflow is tailored to Chinese complaint channels such as 12315 and housing authorities. This imposes a specific language/locale context in the manifest without any opt-in or explicit locale-selection mechanism.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.