Back to skill

Security audit

automate-todo

Security checks for vulnerabilities and agentic risk

Overview

The skill mostly matches its TODO automation purpose, but it includes an unsafe rollback instruction that can erase unrelated local repository changes.

Review this skill before installing and use it only in a clean branch, disposable worktree, or after committing/stashing unrelated work. Do not allow the `git restore .` rollback unless you intentionally want to discard tracked local changes across the repository. The bundled script itself appears limited to reorganizing TODO.md, and no hidden network, credential, or persistence behavior was found.

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

Error
Location
SKILL.md:43
Finding

Repository-Wide Rollback Can Destroy Unrelated Local Changes

Content
View full analysis

Vulnerability Details

File Location: SKILL.md, lines 43–49
Vulnerability Type: Unsafe repository-wide rollback
Risk Level: High

Vulnerable Code Snippet:

markdown
    - Else if update and test attempts are 3 or more, then:
      - Undo failing updates, and add the corresponding `TODO` items back to
        the **Current** `TODO.md` section as incomplete, then:
        - Note completed `TODO` items and resolve to `CHANGELOG.md Updating`
          section of this skill
        - Resolve to `Closing` section of this skill as either:
          - Updates **partially applied**, and:
            - Revert relevant files according to failing and passing updates
          - Updates **not applied**, and:
            - Restore all relevant files, so essentially:
              - In the terminal run: `git restore .`

Technical Analysis

The Skill instructs the Agent to execute git restore . when updates cannot be applied successfully. This command restores all tracked files within the current repository working tree from the Git index. It is not restricted to files modified by the Skill and is not preceded by a check for pre-existing local changes.

Consequently, the rollback procedure cannot distinguish the Skill's changes from unrelated unstaged work created by the user or another process. Although the stated purpose is to restore files affected by the failed update, the command has repository-wide scope and violates least-change principles.

The issue does not require command injection or elevated operating-system privileges. It arises directly from following the documented failure-handling workflow in a repository containing unrelated unstaged modifications.

Attack Path

  1. A user invokes the Skill in a Git repository that already contains unrelated unstaged changes to tracked files.
  2. The Skill processes items from TODO.md and modifies repository files.
  3. The resulting update fa ...[truncated 1168 chars]
Remediation
View remediation

Remediation Suggestions

Replace the repository-wide rollback with a transaction-like, file-scoped recovery procedure:

  1. Before making changes, detect and report pre-existing modifications using git status --porcelain.
  2. Record the exact files the Skill intends to modify.
  3. Preserve each target file's original content, or create a temporary patch containing only the Skill's changes.
  4. On failure, restore only files and hunks changed by the Skill rather than the entire working tree.
  5. Prefer performing automation in an isolated Git worktree or temporary branch.
  6. If a broad rollback is unavoidable, require explicit user confirmation after displaying the exact files and changes that would be discarded.
  7. Never run git restore . automatically when pre-existing unstaged changes are present.

A safer instruction would require targeted paths, such as restoring an explicit allowlist of files after verifying that those files had no pre-existing user changes. For mixed files, restore only the Skill-generated hunks from a captured reverse patch.

Vulnerability Patterns
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • 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 (5)

Missing User Warnings

High
Category
Not specified by scanner
Confidence
97% confidence
Finding

The skill includes destructive restoration behavior culminating in git restore . without any explicit warning or confirmation step. In practice this can wipe tracked in-progress changes across the repository, causing data loss and violating least surprise for users invoking a TODO automation skill.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The description contains broad trigger phrases such as using the skill whenever asked to automate TODO items or maintain a roadmap, which can cause the skill to activate for ordinary requests that do not imply consent for sweeping repository edits. Over-broad invocation increases the chance of unintended file modification and execution of risky workflow steps.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
88% confidence
Finding

The skill directs the agent to create and modify multiple repository files including TODO.md, CHANGELOG.md, manifests, documentation, and roadmap files, but it does not clearly warn that it will perform automatic file changes. In an autonomous execution setting, lack of disclosure increases the risk of unintended edits and trust boundary violations.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The skill explicitly instructs running git restore ., which reverts all tracked changes in the repository, not just files touched by TODO automation. In an agentic context this creates unnecessary destructive capability and can discard unrelated user work without confirmation, exceeding the skill's stated scope.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The skill instructs execution of a local Node.js script from the repository without any explicit warning or confirmation. Running local code is a meaningful security boundary because repository scripts may be modified, malicious, or simply unsafe in the current environment.

Content

No source excerpt is available for this finding.