Back to skill

Security audit

Automation Dedup Guard

Security checks for vulnerabilities and agentic risk

Overview

The skill is openly for cleaning duplicate WorkBuddy automations, but it can permanently delete automation records and history by default with weak duplicate checks and optional unattended recurring execution.

Review this carefully before installing. Use only `--dry-run` first, make a database backup, verify that same-name automations are truly duplicates, and avoid the recurring setup unless you are comfortable with unattended permanent cleanup.

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/automation_dedup_guard.py:107
Finding

Default Destructive Deduplication Can Permanently Delete Legitimate Automations

Content
View full analysis
1: # 按创建时间倒序,最新的保留 items_sorted = sorted(items, key=lambda x: x['created_at'], reverse=True) keep = items_sorted[0] dups = items_sorted[1:] duplicates[name] = { 'keep': keep, 'duplicates': dups, 'count': len(items) } return duplicates def cleanup_duplicates(conn, duplicates, dry_run=True): """删除重复任务(同时清理关联的运行记录)""" cursor = conn.cursor() results = [] total_runs_removed = 0 for name, info in duplicates.items(): for dup in info['duplicates']: did = dup['id'] if dry_run: results.append({ 'id': did, 'name': name, 'runs': '?', 'dry_run': True }) else: # 先删除关联的运行记录 cursor.execute("DELETE FROM automation_runs WHERE automation_id = ?", (did,)) runs_removed = cursor.rowcount total_runs_removed += runs_removed # 再删除任务本身 cursor.execute("DELETE FROM automations WHERE id = ?", (did,)) if cursor.rowcount > 0: results.append({ ...[truncated 3981 chars]
Remediation
View remediation
Vulnerability Patterns
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (3)

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
89% confidence
Finding

The skill describes code behavior that can read environment variables (WORKBUDDY_DB_PATH) and interact with a local database, but the manifest does not declare any explicit tool scope or permissions boundaries. This makes the skill's capabilities less transparent to the hosting agent and increases the risk of unintended data access or execution in contexts where the user did not clearly consent to filesystem or environment-derived inputs.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The skill advertises broad trigger scenarios like duplicate tasks, task list growth, or general cleanup needs, which are common complaints and may cause the agent to invoke the skill in ambiguous situations. Because the skill performs permanent deletions without backups, overly loose activation criteria raise the chance of accidental execution and destructive changes to a user's automation database.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

This code file contains natural-language content in the module docstring that defines usage instructions exclusively in Chinese. Under the policy, forcing a specific language without opt-in is a natural-language policy violation unless the locale restriction is justified, which is not stated here.

Content

No source excerpt is available for this finding.