Back to skill

Security audit

团队周报助手 / Team Weekly

Security checks for vulnerabilities and agentic risk

Overview

This skill appears to be a legitimate Chinese-language team reporting tool that stores team and worklog data locally, with privacy and report-rendering caveats but no hidden exfiltration or system persistence found.

Install only if you are comfortable with a Chinese-language workflow that saves team rosters and individual worklogs on disk. Use a private `TW_DATA_DIR`, avoid entering highly sensitive HR or confidential project details unless appropriate controls exist, verify delete requests before running them, and render generated Markdown/Mermaid reports in a hardened viewer when records may include untrusted input.

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
scripts/utils.py:454
Finding

Persistent Markdown and Mermaid Injection Through Unescaped Worklog Data

Content
View full analysis
str: """生成 Markdown 格式表格。 Args: headers: 表头列表。 rows: 数据行列表,每行为字符串列表。 Returns: Markdown 表格字符串。 """ if not headers: return "" lines = [] # 表头 lines.append("| " + " | ".join(str(h) for h in headers) + " |") # 分隔线 lines.append("| " + " | ".join("---" for _ in headers) + " |") # 数据行 for row in rows: # 确保行的列数与表头一致 padded = list(row) + [""] * (len(headers) - len(row)) lines.append("| " + " | ".join(str(c) for c in padded[:len(headers)]) + " |") return "\n".join(lines) ``` A stored task description and other worklog fields are passed directly to that table builder: ```python for name, info in sorted(by_member.items()): md_lines.append(f"### {name}") md_lines.append("") detail_headers = ["日期", "任务", "项目", "分类", "工时"] detail_rows = [] for task in sorted(info["tasks"], key=lambda t: t["date"]): detail_rows.append([ task["date"], task["task_description"], task.get("project", "-"), task.get("category", "其他"), format_hours(task.get("hours", 0)), ]) md_lines.append(build_markdown_table(detail_headers, detail_rows)) md_lines.append("") ``` Member and project names are also interpolated directly into Mermaid syntax: ```python if by_ ...[truncated 4599 chars]
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • 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 (18)

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding

This skill describes local data-management operations beyond simple report generation, including modification of team records and references to log-management capabilities that are not clearly disclosed at the top level. Hidden or under-disclosed state-changing behavior is dangerous because users may invoke what appears to be a reporting assistant while unintentionally causing persistent local data changes, including destructive actions such as record deletion.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
91% confidence
Finding

This skill describes local data-management operations beyond simple report generation, including modification of team records and references to log-management capabilities that are not clearly disclosed at the top level. Hidden or under-disclosed state-changing behavior is dangerous because users may invoke what appears to be a reporting assistant while unintentionally causing persistent local data changes, including destructive actions such as record deletion.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
91% confidence
Finding

This skill describes local data-management operations beyond simple report generation, including modification of team records and references to log-management capabilities that are not clearly disclosed at the top level. Hidden or under-disclosed state-changing behavior is dangerous because users may invoke what appears to be a reporting assistant while unintentionally causing persistent local data changes, including destructive actions such as record deletion.

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
93% confidence
Finding

The skill invokes environment-variable reads and local file-backed scripts but does not declare any explicit tool scope or permissions boundary. That creates an authorization ambiguity: an agent/runtime may grant broader file or execution capabilities than users expect, increasing the risk of unintended access to local data or unsafe script execution paths.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The description states the agent 'always uses Chinese' when communicating with users. This is a natural-language locale policy constraint applied universally, with no user choice or opt-in, which matches the policy-violation category for forced language selection.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The README states that team work logs and generated reports are stored on disk in a local directory, but it does not clearly warn users that potentially sensitive employee activity, project details, and performance-related data will persist locally. In a team-reporting context, this can create privacy, compliance, and accidental disclosure risks if the host system is shared, backed up insecurely, or the storage path is synced to external services without the user's awareness.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
88% confidence
Finding

The template includes realistic employee names, per-person task details, dates, projects, and work-hour breakdowns without any guidance to anonymize or minimize personal data. In a team-reporting skill, users may copy the structure directly with real employee data, which can lead to unnecessary exposure of personnel activity and performance information in generated reports.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The personal performance-report template explicitly structures employee evaluation data, including total hours, trends, project involvement, and efficiency judgments, but provides no warning about confidentiality, fairness, or restricted use. This creates a meaningful risk of generating sensitive HR-style assessments that could be inappropriately shared, stored, or used for personnel decisions without proper safeguards.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The weekly report includes per-member detailed work records, including dates, task descriptions, projects, categories, and hours, without any access-control check, redaction option, or explicit privacy safeguard in this module. In a team-reporting skill, this may expose employee activity data to unauthorized users or broader audiences than intended, creating a confidentiality and workplace privacy risk.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

模块文档明确说明其功能是“团队与成员管理模块”,并提供团队创建、成员增删改查、本地 JSON 存储等能力。结合实现可见,代码只管理团队元数据与成员列表,没有任何周报/月报生成或工作进展汇总逻辑,因此与技能清单描述存在明显语义偏差。

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
84% confidence
Finding

The remove_member operation permanently deletes local team state based on a single name or ID match with no confirmation, undo, or safeguard. In agent-driven or automated workflows, malformed input, ambiguous names, or accidental invocation could cause unintended integrity loss in team data.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

This Python file contains natural-language documentation and CLI/help text in Chinese, starting with the module docstring and continuing throughout user-facing messages. Under the policy rule, forcing a specific language without user opt-in is a locale/language policy violation unless the constraint is explicitly justified, which is not present here.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The module description and all user-facing report content are written exclusively in Chinese, indicating the skill operates in a fixed language. There is no visible option for the user to choose another language or any justification that this is a region-specific tool, which conflicts with the language/locale policy criteria.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
88% confidence
Finding

The module description and all user-facing strings are written exclusively in Chinese, with no indication that the user can choose another language or that the skill is restricted to a Chinese-only context. Under the policy, hard-coding a locale/language without opt-in can be a natural-language policy violation unless clearly justified.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The delete_worklog flow permanently rewrites the stored worklog file after removing the matching entry, but there is no confirmation prompt, warning message, or explanatory comment indicating that this is a destructive action. In main(), the delete action executes directly from input data and only prints success after the deletion has already happened.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
88% confidence
Finding

The module name, description, and all user-facing documentation strings in this file are written only in Chinese, which imposes a specific language context without offering any language or locale choice. Under the stated policy, forcing a language without opt-in is a natural-language policy concern.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Low
Category
Not specified by scanner
Confidence
85% confidence
Finding

init_team 和后续成员添加逻辑依赖 check_subscription(),并在成员数量超过限制时提示升级付费版。对于一个声明用途是自动收集团队进展并生成周报/月报的技能,这种订阅分级与营销限制并非完成核心功能的直接、明显要求。

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Low
Category
Not specified by scanner
Confidence
81% confidence
Finding

remove_member 会永久修改本地团队数据,属于团队管理操作。虽然维护成员名单可能对周报助手有辅助作用,但 manifest 当前没有表明该技能负责组织/成员生命周期管理,因此该能力超出了已陈述的直接用途。

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.