Back to skill

Security audit

Dev Project Tracker

Security checks for vulnerabilities and agentic risk

Overview

This project-tracking skill is not malicious, but it needs review because it can persist project/personnel details outside project files and later delete project directories during archival.

Install only if you are comfortable with project updates, decisions, and personnel details being written to long-term memory. Before use, narrow the trigger phrases, disable or require explicit approval for memory_store/personal-log writes, validate project and requirement names, and require a recoverable archive step with an exact deletion-target preview.

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)

other

Warning
Location
SKILL.md:39
Finding
Unnecessary Persistent Storage of Project and Personnel Information<![CDATA[ ## Vulnerability Details **File Location**: `SKILL.md`, lines 39-43 and 94-97 **Vulnerability Type**: Excessive persistent data storage **Risk Level**: Medium ### Complete Code Snippet ```markdown ### 记录日常进展 收到"记录进展"或项目相关更新时: 1. 在 `WORK_LOG.md` 顶部添加新条目(日期倒序) 2. 格式:`## YYYY-MM-DD` + 具体内容 3. 同步更新个人日志 `memory/YYYY-MM-DD.md` 4. 关键决策同时写入长期记忆(memory_store) ``` ```markdown ## 注意事项 - 项目进展写 WORK_LOG.md,**不混入个人日志** - 关键决策、人员信息同步到长期记忆 ``` ### Technical Analysis The skill instructs the agent to copy project updates into a daily personal-memory file and to store key decisions and personnel information in long-term memory. This persistent duplication is not required to maintain the project records because the same information is already stored in project-specific files such as `WORK_LOG.md`. The instructions are also internally inconsistent: they require synchronization with `memory/YYYY-MM-DD.md` while separately stating that project progress must not be mixed into personal logs. No consent requirement, data classification, filtering, retention period, or deletion procedure is defined. Project updates may contain confidential business information, personal information, credentials accidentally pasted by users, or attacker-controlled content. Persisting this material outside the project directory increases its lifetime and makes it potentially available to unrelated future sessions. This is classified as `other: Excessive Persistent Data Storage`, rather than T02, because the confirmed behavior is unnecessary persistent storage. The reviewed text does not explicitly instruct the agent to store attacker-controlled behavioral rules. ### Attack Path 1. A user or untrusted project artifact supplies a project update containing sensitive or misleading information. 2. The skill records the update in the project `WORK_LOG.md`. 3. Following the skill instructions, the agent also writes the update to `memory/YYYY-MM-DD.md`. 4. Decisions and personnel information ...[truncated 871 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Store project information only within the applicable `projects/<project>/<requirement>/` directory by default. 2. Remove automatic synchronization of project updates to personal daily-memory files. 3. Require explicit, informed user consent before writing any project information to long-term memory. 4. Limit long-term memory to a short, user-approved summary that excludes personnel details, credentials, internal links, and confidential technical information. 5. Apply data classification and secret-detection checks before any persistent memory write. 6. Define retention periods and provide a mechanism to inspect and delete all memory entries associated with a project. 7. Ensure project archival also identifies and removes related persistent-memory records when requested. 8. Resolve the contradictory instructions concerning whether project progress may be placed in personal logs. ]]>

T09 · Insecure Skill Coding Practices

Warning
Location
SKILL.md:72
Finding
Unsafe Path Construction Combined with Destructive Project Archival<![CDATA[ ## Vulnerability Details **File Location**: `SKILL.md`, lines 20-22 and 72-80 **Vulnerability Type**: Unvalidated filesystem path used by a destructive workflow **Risk Level**: Medium ### Complete Code Snippet ```markdown 每个需求/版本一个目录,放在 `projects/<project-name>/<requirement-name>/` 下: ``` projects/<project>/<requirement>/ ``` ``` ```markdown ### 生命周期管理 README.md 中必须包含 `状态` 和 `实际上线` 字段: | 阶段 | 状态 | 触发条件 | 操作 | |------|------|---------|------| | 活跃期 | 🟢 开发中 | 创建时 | 完整记录所有文件 | | 蒸馏期 | 🟡 已上线(蒸馏中) | 上线后2周 | WORK_LOG/ISSUES 压缩为摘要,tech/design 保留 | | 归档期 | 🔴 已归档 | 上线后3个月 | 压缩为 ARCHIVE.md,删除原目录 | 蒸馏/归档前必须通知负责人确认。 ``` ### Technical Analysis The skill constructs project paths from project and requirement names and later instructs the agent to delete the original directory during archival. It does not require validation or canonicalization of either path component. Missing safeguards include: - Rejection of absolute paths. - Rejection of `.` and `..` path components. - Canonical-path containment checks under the intended `projects/` root. - Detection of symbolic links. - Verification that the deletion target is a requirement directory. - A recoverable trash or backup step. - An exact deletion-target preview as part of confirmation. If project or requirement names are influenced by untrusted input, path traversal syntax or symlink redirection could cause filesystem operations to resolve outside the intended project root. Owner confirmation does not fully mitigate this issue because a confirmation request may present a logical project name rather than the canonical directory that will actually be deleted. The repository does not contain an implementation of the deletion operation, so this finding concerns an unsafe skill instruction rather than a confirmed shell-command injection. Exploitability depends on how an executing agent translates the archival instruction into filesystem operations. ### Attack Path 1. An attacker or untrusted user request ...[truncated 1478 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Restrict project and requirement identifiers to a conservative allowlist, such as ASCII letters, digits, underscores, and hyphens. 2. Reject empty values, absolute paths, path separators, null bytes, `.` components, and `..` components. 3. Resolve both the project root and target directory to canonical paths before every write, archive, or deletion operation. 4. Verify that the canonical target begins with the canonical `projects/` root followed by a path separator. 5. Refuse to archive or delete symbolic links and refuse targets containing symlinked parent components. 6. Require the target to contain an expected marker file and match the exact expected directory depth. 7. Display the canonical absolute target path and planned file list before requesting confirmation. 8. Replace direct deletion with a recoverable move to a dedicated quarantine or trash directory. 9. Create and verify the archive before removing source data. 10. Record archival actions in an audit log, including the canonical path, requesting user, confirmation, timestamp, and recovery location. ]]>
Vulnerability Patterns
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (15)

Natural-Language Policy Violations

Medium
Confidence
84% confidence
Finding
The skill's activation phrases and operating instructions are written only in Chinese, with no indication that another language is supported or that the user can opt in to Chinese-only behavior. This can violate language/locale policy when a skill implicitly requires a specific language without user choice or documented justification.

Vague Triggers

Medium
Confidence
91% confidence
Finding
The trigger phrases are broad and overlap with ordinary project conversation such as 'record progress' or 'project status'. That increases the risk of accidental activation, leading the agent to create files, modify project records, or persist information when the user may have been speaking conversationally rather than issuing an instruction.

Missing User Warnings

Medium
Confidence
91% confidence
Finding
The skill performs persistent writes to project files, personal logs, and long-term memory, but the description does not warn users about this retention behavior. Lack of disclosure undermines informed consent and can cause sensitive operational or personnel information to be stored durably without the user's awareness.

Description-Behavior Mismatch

Medium
Confidence
91% confidence
Finding
The skill is described as a project documentation manager, but it instructs the agent to also write progress and decisions into personal logs and long-term memory. This expands the data handling scope beyond the stated project-directory purpose, increasing the chance that user-provided project details, decisions, or sensitive context are retained in places the user did not expect.

Intent-Code Divergence

Medium
Confidence
97% confidence
Finding
The skill contains contradictory guidance: it says to sync project progress into a personal log, but later says project progress should not be mixed into personal logs. In practice, inconsistent instructions can cause unintended storage of project data in personal memory locations and make operator expectations unreliable.

Ssd 3

Medium
Confidence
94% confidence
Finding
The skill explicitly directs the agent to copy project updates and key decisions into persistent memory stores. Because those updates may include sensitive business context, user-provided details, or internal decisions, automatic retention outside the project files creates a meaningful data minimization and exposure risk.

Ssd 3

Medium
Confidence
96% confidence
Finding
The skill tells the agent to synchronize personnel information into long-term memory, which materially raises privacy and confidentiality risk. Personnel data is especially sensitive because it can include identities, responsibilities, and organizational relationships, and persistent storage increases the blast radius of later disclosure or misuse.

Natural-Language Policy Violations

Medium
Confidence
91% confidence
Finding
The file content is entirely in Chinese, including the title and instructional text, with no indication that the user can choose another language or that the template is intentionally limited to a Chinese-speaking context. This creates a natural-language locale policy concern because it implicitly enforces a specific language without opt-in or justification.

Natural-Language Policy Violations

Medium
Confidence
93% confidence
Finding
This markdown template uses Chinese for the title and usage instruction, which imposes a specific language on users without any visible opt-in or explanation. Under the language/locale policy rule, fixed-language natural-language content can be a policy violation when no choice or justification is provided.

Natural-Language Policy Violations

Medium
Confidence
98% confidence
Finding
This shell script’s description, usage examples, comments, error messages, and status output are written in Chinese throughout the file. Under the policy, forcing a specific language without user opt-in is a natural-language policy violation unless the locale restriction is explicitly documented and justified, which is not present here.

Missing User Warnings

Low
Confidence
76% confidence
Finding
The status-view feature instructs the agent to scan all directories under `projects/` to build a dashboard, but it does not disclose the breadth of that scan. In multi-project or multi-tenant environments, this can expose unrelated project metadata more broadly than the user intended.

Natural-Language Policy Violations

Low
Confidence
95% confidence
Finding
The file's headings and table labels are entirely in Chinese, which indicates a fixed language choice in the skill template. There is no visible opt-in, alternative locale, or explanation that this template is intended only for a Chinese-speaking or region-specific context.

Natural-Language Policy Violations

Low
Confidence
94% confidence
Finding
The markdown template is entirely written in Chinese, including the title, column headers, and status explanation, with no indication that users may choose another language. The policy explicitly flags language or locale constraints when a skill forces a specific language without user opt-in.

Natural-Language Policy Violations

Low
Confidence
95% confidence
Finding
This markdown template uses Chinese for the title, column headers, and status description, which imposes a specific language on users. The policy allows locale constraints only when they are optional or clearly justified, neither of which is indicated in this file.

Natural-Language Policy Violations

Low
Confidence
89% confidence
Finding
This README template uses Chinese headings and placeholders throughout, which effectively imposes a specific language on users of the skill artifact. The file does not indicate that Chinese is optional, user-selected, or required for a justified region-specific purpose.

Static analysis

No suspicious patterns detected.