Back to skill

Security audit

Team Tasks.Skip

Security checks for vulnerabilities and agentic risk

Overview

This skill is a useful local task coordinator, but it ships hard-coded external Telegram destinations and an unsafe project-file path construction that can read or overwrite JSON files outside its task directory.

Install only if you control the Telegram destinations or remove/replace them first, and avoid using confidential project data until project-name validation and safer JSON writes are fixed. Use simple project slugs and do not rely on this for concurrent multi-agent writes without locking.

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

T09 · Insecure Skill Coding Practices

Error
Location
scripts/task_manager.py:41
Finding

Project Name Path Traversal Allows JSON Files Outside the Task Directory to Be Read or Overwritten

Content
View full analysis
str: return os.path.join(TASKS_DIR, f"{project}.json") def load_project(project: str) -> dict: path = task_file(project) if not os.path.exists(path): print(f"Error: project '{project}' not found at {path}", file=sys.stderr) sys.exit(1) with open(path) as f: return json.load(f) def save_project(project: str, data: dict): path = task_file(project) os.makedirs(os.path.dirname(path), exist_ok=True) with open(path, "w") as f: json.dump(data, f, indent=2, ensure_ascii=False) ``` ### Technical Analysis The user-controlled `project` argument is incorporated directly into a filesystem path without validation or a containment check. `os.path.join()` does not guarantee that the resulting path remains beneath `TASKS_DIR`: - An absolute project name causes `os.path.join()` to discard `TASKS_DIR`. - A project name containing `../` components can traverse outside the intended directory. - The `.json` suffix limits targets to filenames ending in `.json`, but does not prevent access to sensitive JSON configuration or state files. - `save_project()` creates parent directories and writes directly to the resolved path. - `init --force` permits replacement of an existing target. The effective access is limited to files readable or writable by the operating-system account running the Skill. No privilege escalation beyond that account was identified. ### Attack Path 1. An attacker supplies a crafted project argument through a command that loads or saves project data. 2. For disclosure, the attacker uses an absolute or traversal-based name, for example: ```bash python3 scripts/task_manager.py status /tmp/sensitive --json ``` 3. The CLI resolves the path as `/tmp/se ...[truncated 1073 chars]
Remediation
View remediation
str: if not PROJECT_RE.fullmatch(project): raise ValueError("Invalid project identifier") return project ``` 2. Resolve and verify the final path remains under the configured task directory: ```python def task_file(project: str) -> str: validate_project(project) base = os.path.realpath(TASKS_DIR) candidate = os.path.realpath(os.path.join(base, f"{project}.json")) if os.path.commonpath([base, candidate]) != base: raise ValueError("Project path escapes task directory") return candidate ``` 3. Explicitly reject absolute paths, path separators, `.` components, and `..` components. 4. Avoid exposing full resolved paths in errors unless needed for trusted diagnostics. 5. Require an explicit confirmation or safer replacement policy before overwriting existing files. 6. Add tests covering absolute paths, traversal sequences, nested paths, symbolic-link edge cases, and platform-specific separators. ]]>

other

Warning
Location
SKILL.md:128
Finding

Hard-Coded Telegram Destinations Can Disclose Project Context and Agent Results

Content
View full analysis
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/task_manager.py:45
Finding

Unlocked Non-Atomic Project Updates Permit State Corruption and Lost Agent Results

Content
View full analysis
dict: path = task_file(project) if not os.path.exists(path): print(f"Error: project '{project}' not found at {path}", file=sys.stderr) sys.exit(1) with open(path) as f: return json.load(f) def save_project(project: str, data: dict): path = task_file(project) os.makedirs(os.path.dirname(path), exist_ok=True) with open(path, "w") as f: json.dump(data, f, indent=2, ensure_ascii=False) ``` ### Technical Analysis The Skill advertises parallel DAG dispatch and shared multi-agent state, but all updates use an unlocked read-modify-write sequence: 1. A command loads the complete JSON document. 2. It modifies an in-memory copy. 3. It truncates and rewrites the complete project file. If two processes update the same project concurrently, both can read the same original state. The process that writes last silently replaces the earlier process's changes. There is no version check, compare-and-swap operation, or inter-process lock. Writing directly to the destination also means interruption, process termination, disk exhaustion, or an I/O failure can leave an empty or partially written JSON file. ### Attack Path 1. Two agents or orchestrator processes operate on the same DAG project concurrently. 2. Both call commands such as `result`, `log`, or `update`. 3. Both commands load the same pre-update project document. 4. Process A records one agent's result and writes the file. 5. Process B records a different result using its stale copy and writes afterward. 6. Process A's result or status transition is lost. 7. Alternatively, a process is interrupted after the destination has been truncated but before `json.dump()` completes, leaving invalid JSON. 8. Subsequent command ...[truncated 766 chars]
Remediation
View remediation
Vulnerability Patterns
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Tool MisuseTool Parameter Abuse, Chaining Abuse, Unsafe Defaults
  • Rogue AgentSelf-Modification, Session Persistence
Findings (23)

Tool Parameter Abuse

High
Category
Tool Misuse
Confidence
80% confidence
Finding

Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).

Content

Scanner excerpt · README.md (reported line 49)May include surrounding context.

md
-p "code-agent,test-agent,docs-agent,monitor-bot"

# 2. Assign tasks to each stage
$TM assign my-api code-agent "Implement Flask REST API: GET/POST/DELETE /items"
$TM assign my-api test-agent "Write pytest tests, target 90%+ coverage"
$TM assign my-api docs-agent "Write README with API docs and examples"
$TM assign my-api monitor-bot "Security audit and deployment readiness check"

Tool Parameter Abuse

High
Category
Tool Misuse
Confidence
80% confidence
Finding

Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).

Content

Scanner excerpt · SKILL.md (reported line 63)May include surrounding context.

md
-p "code-agent,test-agent,docs-agent,monitor-bot"

# 2. Assign tasks to each stage
$TM assign my-api code-agent "Implement Flask REST API: GET/POST/DELETE /items"
$TM assign my-api test-agent "Write pytest tests, target 90%+ coverage"
$TM assign my-api docs-agent "Write README with API docs and examples"
$TM assign my-api monitor-bot "Security audit and deployment readiness check"

Tool Parameter Abuse

High
Category
Tool Misuse
Confidence
80% confidence
Finding

Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).

Content

Scanner excerpt · SKILL.md (reported line 146)May include surrounding context.

md
-p "code-agent,test-agent,docs-agent,monitor-bot"

# 2. Assign tasks to each stage
$TM assign my-api code-agent "Implement Flask REST API: GET/POST/DELETE /items"
$TM assign my-api test-agent "Write pytest tests, target 90%+ coverage"
$TM assign my-api docs-agent "Write README with API docs and examples"
$TM assign my-api monitor-bot "Security audit and deployment readiness check"

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

The documentation claims one behavior while the underlying capability set reportedly includes undeclared workflows and does not actually perform the advertised dispatch action. This mismatch is dangerous because operators may trust the documented boundaries while hidden or undocumented behaviors enable unexpected actions, data handling, or workflow branching in a multi-agent system.

Content

No source excerpt is available for this finding.

Hidden Instructions

High
Category
Prompt Injection
Confidence
70% confidence
Finding

Hidden instructions were detected in comments or invisible text. These could contain malicious directives. Manual review is recommended.

Content

Scanner excerpt · docs/dev-team-agents-detail.svg (reported line 30)May include surrounding context.

text
<marker id="am" markerWidth="8" markerHeight="6" refX="8" refY="3" orient="auto"><polygon points="0 0,8 3,0 6" fill="#f59e0b"/></marker>
  </defs>

  <!-- 背景 -->
  <rect width="1100" height="960" fill="url(#bg)" rx="14"/>

  <!-- 标题 -->

Hidden Instructions

High
Category
Prompt Injection
Confidence
70% confidence
Finding

Hidden instructions were detected in comments or invisible text. These could contain malicious directives. Manual review is recommended.

Content

Scanner excerpt · docs/dev-team-agents-detail.svg (reported line 57)May include surrounding context.

text
<text x="730" y="178" text-anchor="middle" fill="#ffffff44" font-size="9">sessions_send</text>
  <text x="760" y="348" text-anchor="middle" fill="#ffffff44" font-size="9">sessions_send</text>

  <!-- ══════════════════════════════════════ -->
  <!-- Agent 1: Code Agent 🔧                  -->
  <!-- ══════════════════════════════════════ -->
  <rect x="40" y="200" width="460" height="290" rx="14" fill="#3b82f608" stroke="#3b82f644" stroke-width="1.2"/>

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
98% confidence
Finding

The manifest says the skill supports two modes: linear and dag. The README explicitly presents a third mode, 'Debate', as a first-class feature with commands and workflow, which expands the advertised behavior beyond the manifest description.

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
86% confidence
Finding

The skill describes file and environment interactions but does not declare an explicit tool scope such as permissions or allowed-tools. In a multi-agent orchestration context, missing scope boundaries increases the chance that an agent or caller invokes broader capabilities than intended, especially when the skill also references local paths and external messaging workflows.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The skill instructs use of the unrelated message tool to post agent results to Telegram, extending the skill from local task coordination into outbound communications. That expands the trust boundary and creates a risk of accidental data exfiltration, especially since project outputs may contain code, file paths, internal details, or sensitive debugging information.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The documentation tells operators to forward agent results into a Telegram group without an explicit warning that project data is leaving the local workflow boundary. In practice, this can disclose proprietary code status, filenames, implementation details, or incident information to external recipients or persistent chat logs.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

This SVG contains extensive natural-language labels and command guidance in Chinese, such as the title and workflow descriptions, but nowhere indicates that the language is optional or region-specific. Under the policy, forcing a specific language without user opt-in is a natural-language locale violation applicable to all file types.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The '语言规则' section specifies 'API 文档 → 英文' and '用户指南 → 中文' as mandatory language rules. This is a natural-language locale policy constraint presented without any user opt-in, alternative language option, or justification that the skill is region-specific.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The manifest says the skill supports two modes only: linear and dag. This SVG presents an additional 'Mode C · 多 Agent 辩论 (Debate)', expanding the advertised behavior beyond the manifest's declared scope and creating a description-behavior mismatch at the documentation level.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
98% confidence
Finding

The skill manifest describes two supported modes, linear and dag, focused on multi-agent development pipelines, but the file-level documentation and code implement a third 'debate' mode with debater management and multi-round cross-review/synthesis workflows. That is a material behavior expansion beyond the manifest's stated scope, not just an implementation detail.

Content

No source excerpt is available for this finding.

Session Persistence

Medium
Category
Rogue Agent
Confidence
80% confidence
Finding

Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.

Content

Scanner excerpt · scripts/task_manager.py (reported line 11)May include surrounding context.

python
Commands:
  init      Create a new project (--mode linear|dag|debate)
  add       Add a task to a DAG project
  add-debater Add a debater to a debate project
  round     Debate round actions (start/collect/cross-review/synthesize)
  status    Show current pipeline/DAG status

Session Persistence

Medium
Category
Rogue Agent
Confidence
80% confidence
Finding

Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.

Content

Scanner excerpt · scripts/task_manager.py (reported line 471)May include surrounding context.

python
Commands:
  init      Create a new project (--mode linear|dag|debate)
  add       Add a task to a DAG project
  add-debater Add a debater to a debate project
  round     Debate round actions (start/collect/cross-review/synthesize)
  status    Show current pipeline/DAG status

Session Persistence

Medium
Category
Rogue Agent
Confidence
80% confidence
Finding

Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.

Content

Scanner excerpt · scripts/task_manager.py (reported line 999)May include surrounding context.

python
Commands:
  init      Create a new project (--mode linear|dag|debate)
  add       Add a task to a DAG project
  add-debater Add a debater to a debate project
  round     Debate round actions (start/collect/cross-review/synthesize)
  status    Show current pipeline/DAG status

Context-Inappropriate Capability

Low
Category
Not specified by scanner
Confidence
89% confidence
Finding

Publishing hard-coded agent Telegram group session identifiers unnecessarily exposes internal routing details and couples the skill to specific external channels. While not an exploit by itself, it broadens operational exposure and can facilitate misdelivery, unauthorized contact attempts, or reuse of the skill in environments where those identifiers are inappropriate.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
85% confidence
Finding

The example message uses Chinese text ('完成') in a status update, which suggests a language preference baked into the skill instructions. The document does not indicate that language selection is user-configurable or that a specific locale is required for a justified reason.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Low
Category
Not specified by scanner
Confidence
92% confidence
Finding

The document explicitly says docs should be aligned with actual capabilities, naming debate and workspace as existing features that are not reflected accurately in SKILL.md. That indicates an intent/documentation mismatch between the skill's stated behavior and what the code implements.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
95% confidence
Finding

This SVG contains substantial Chinese-language instructional text throughout the diagram, such as the title and mode descriptions, without any indication that the content is optional, localized, or intended only for a Chinese-speaking audience. Because SQP-3 applies to all file types and covers language/locale policy violations, this is a natural-language policy issue.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Low
Category
Not specified by scanner
Confidence
72% confidence
Finding

The footer states 'JSON 状态文件驱动 — 无外部依赖' as a common property of the documented modes. However, the Debate section is presented as a multi-round review process without any visible JSON task-file/state-file mechanics, which conflicts with the file's own claim that this property applies uniformly across modes.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Low
Category
Not specified by scanner
Confidence
85% confidence
Finding

The manifest says the skill covers 'agent dispatch via sessions_send,' but this script never invokes any session-dispatch mechanism, network/API call, or agent-execution primitive; it only stores project/task state and emits status/ready information. That creates a semantic mismatch between the skill's described active dispatch capability and the actual behavior present here.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.