T09 · Insecure Skill Coding Practices
- Location
scripts/list.py:8- Finding
Path Traversal Through Unvalidated Record Type
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This skill is a legitimate local record-keeping tool, but its helper script can access or modify files outside its intended storage area if given unsafe inputs.
Review before installing. Use this only if you are comfortable with persistent local storage of notes, expenses, logs, and attachments. Avoid giving it arbitrary file paths or unusual record type names until the script validates record types and restricts attachment sources to approved uploads.
scripts/list.py:8Path Traversal Through Unvalidated Record Type
scripts/list.py:42Unrestricted Local File Copy Through Attachment Path
The trigger phrase 记一下 xxx is extremely broad and maps ordinary conversational language directly to a write action. Because the skill also says clear command-form inputs are executed immediately, benign user speech can be misinterpreted as consent to persist sensitive notes, expenses, logs, or attachments without deliberate activation.
Referenced artifact was not completely inspected
所有数据操作通过 `scripts/list.py`,模型不直接改 JSON:
Referenced artifact was not completely inspected
所有数据操作通过 `scripts/list.py`,模型不直接改 JSON:
Referenced artifact was not completely inspected
所有数据操作通过 `scripts/list.py`,模型不直接改 JSON:
Referenced artifact was not completely inspected
所有数据操作通过 `scripts/list.py`,模型不直接改 JSON:
Referenced artifact was not completely inspected
所有数据操作通过 `scripts/list.py`,模型不直接改 JSON:
Referenced artifact was not completely inspected
所有数据操作通过 `scripts/list.py`,模型不直接改 JSON:
Referenced artifact was not completely inspected
所有数据操作通过 `scripts/list.py`,模型不直接改 JSON:
Referenced artifact was not completely inspected
所有数据操作通过 `scripts/list.py`,模型不直接改 JSON:
The skill instructs the agent to read and write persistent local files via scripts/list.py and storage under workspace/memory/list-data/, but it does not declare any explicit tool scope or permissions boundary. This creates a mismatch between documented capabilities and actual behavior, increasing the risk of unintended file access or writes without clear platform enforcement or user visibility.
The activation guidance emphasizes frictionless recording but does not define enough trigger constraints or exclusions, making it easier for the orchestrator to invoke the skill on ambiguous everyday language. In a persistence-oriented skill, unclear boundaries materially raise the chance of unintended storage of user content.
The skill stores structured records and attachments persistently, including potentially sensitive financial notes, logs, and uploaded documents, but it does not clearly warn users about persistence, retention, or privacy implications. Users may unknowingly cause long-term storage of personal or confidential information that they expected to be transient.
The skill explicitly states that clear command-style inputs are saved immediately without confirmation, yet it does not prominently warn users about this no-confirmation write behavior at activation time. Combined with the broad trigger phrase, this can cause accidental persistence of sensitive or incorrect data from natural conversation.
The top-level docstring labels the tool in Chinese, and the script's user-facing messages are consistently hard-coded in Chinese, implying a fixed language choice. The file does not indicate that the skill is region-specific or provide any mechanism for user opt-in or language selection.
The delete command irreversibly removes a record from stored data and immediately writes the modified dataset back to disk. There is no confirmation prompt, warning message, or other user disclosure in this code path before the destructive operation occurs.
The cron example fixes the timezone to Asia/Shanghai, which is a locale-specific setting. Under the policy, locale constraints should either be user-selectable or clearly justified as region-specific; this file does neither.
When an image path is supplied, the script copies the file into an attachments directory and saves updated metadata to disk. Although file persistence is central to the script's function, this code path does not provide any explicit notice that the source file will be duplicated into local storage.
No suspicious patterns detected.