Back to skill

Security audit

Task Panner Validator for Agents

Security checks for vulnerabilities and agentic risk

Overview

This skill is not malicious, but it needs review because it advertises safe automated task execution while its approval, rollback, and integrity checks can give false confidence.

Install only if you treat this as a lightweight planning helper, not a security boundary. Keep auto_approve off for real operations, use dry_run first, require your executor to enforce its own allowlist and confirmations, avoid trusting loaded plan approval state, and do not rely on the built-in rollback or checksum behavior for destructive work.

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
task_planner.py:132
Finding

Plan Integrity and Approval State Can Be Bypassed

Content
View full analysis
bool: """Verify plan hasn't been tampered with""" if not self.checksum: return True return self.checksum == self.calculate_checksum() ``` ```python # Check if plan is approved if plan.status != TaskStatus.APPROVED and not self.auto_approve: self.logger.error("Plan must be approved before execution") return False, [] # Auto-approve if enabled if self.auto_approve and plan.status == TaskStatus.PENDING: if not self.approve_plan(plan): return False, [] ``` ```python plan = TaskPlan( task_id=data['task_id'], title=data['title'], description=data['description'], steps=steps, created_at=data['created_at'], status=TaskStatus(data['status']), approved_by=data.get('approved_by'), approved_at=data.get('approved_at'), completed_at=data.get('completed_at'), metadata=data.get('metadata', {}), checksum=data.get('checksum') ) ``` ### Technical Analysis Integrity verification fails open when a plan has no checksum. A persisted plan can therefore omit the `checksum` field or set it to `null`, after which `verify_integrity()` reports success. More importantly, `execute_plan()` does not verify the plan checksum immediately before execution. It trusts the mutable `status` property and accepts any plan marked `APPROVED`. Approval is not cryptographically or logically bound to the checksum that was validated at approval time. Consequently, executable fields such as step actions and parameters can be changed after approval without invalidating the approval. Loaded JSON can also directly supply an approved status even though the plan was never approved by the current process. Execution-time per-step validation does not eli ...[truncated 1860 chars]
Remediation
View remediation
bool: if not self.checksum: return False return hashlib.compare_digest( self.checksum, self.calculate_checksum() ) ``` 2. Revalidate the complete plan immediately before changing its status to `RUNNING`: ```python is_valid, warnings = self.validate_plan(plan) if not is_valid: return False, [] ``` 3. Store the exact checksum approved by the approver, such as `approved_checksum`, and require it to equal the current calculated checksum before execution. 4. Do not trust persisted approval state by default. Loaded plans should be reset to `PENDING` unless approval is authenticated with a trusted digital signature or verified external authorization record. 5. Ensure the checksum covers every security-relevant field, including: - Step actions and parameters. - Safety and rollback flags. - Retry configuration. - Plan metadata that influences execution. - Step order and expected outputs where relevant. 6. Prevent silent post-approval mutation by using immutable plan objects or by automatically clearing approval whenever an executable field changes. 7. Add tests for missing checksums, forged approved status, post-approval mutation, and execution-time integrity failure. ]]>

T09 · Insecure Skill Coding Practices

Error
Location
task_planner.py:178
Finding

Dangerous Operations Are Allowed by Default Despite Safety Warnings

Content
View full analysis
bool: """ Approve a task plan for execution Args: plan: TaskPlan to approve approved_by: User or system approving the plan Returns: Success status """ is_valid, warnings = self.validate_plan(plan) if not is_valid: self.logger.error(f"Plan validation failed: {warnings}") return False if warnings: self.logger.warning(f"Plan has warnings: {warnings}") plan.status = TaskStatus.APPROVED plan.approved_by = approved_by plan.approved_at = datetime.now().isoformat() self.logger.info(f"Plan approved: {plan.task_id}") return True ``` ### Technical Analysis The condition controlling rejection is inverted relative to the documented purpose of `safety_check`. Dangerous actions are rejected only when `safety_check` is `False`. With its default and documented value of `True`, actions containing terms such as `delete`, `remove`, `format`, `shutdown`, or `destroy` only generate warnings and remain valid. `approve_plan()` treats warnings as non-blocking and marks the plan approved. Sensitive system paths are similarly advisory and never set `is_safe` to `False`. The implementation therefore presents a safety validator without reliably enforcing a safety boundary. This is especially risky because the project is advertised for AI agents, DevOps automation, and system administration. The ...[truncated 1575 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
task_planner.py:312
Finding

Rollback Function Reports Success Without Restoring State

Content
View full analysis
bool: """Rollback to a specific checkpoint""" if not self.checkpoint_stack: self.logger.warning("No checkpoints available for rollback") return False try: checkpoint = self.checkpoint_stack[checkpoint_index] self.logger.info(f"Rolling back to checkpoint: {checkpoint['step_id']}") # Here you would implement actual rollback logic return True except IndexError: self.logger.error(f"Invalid checkpoint index: {checkpoint_index}") return False ``` ### Technical Analysis The checkpoint contains only a serialized copy of the step's metadata. It does not capture external filesystem, database, service, or API state. `rollback_to_checkpoint()` selects a checkpoint, logs a rollback message, and returns `True` without invoking a compensating action or restoring any state. This creates a false security signal inconsistent with the documented claim that the checkpoint system can revert failed operations. Callers that trust the Boolean return value may continue execution or report recovery success while destructive changes remain active. ### Attack Path 1. A rollback-capable step invokes an executor operation that modifies an external resource. 2. The planner stores only the step metadata as a checkpoint. 3. The operation fails partially or a later step requires rollback. 4. The application calls `rollback_to_checkpoint()`. 5. The method performs no restoration but returns `True`. 6. The application treats the workflow as recovered even though the external change remains in place. ### Impact Assessment This issue does not itself grant additional privileges. Its impact is failure to contain or recover from operat ...[truncated 531 chars]
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
Findings (58)

Credential Access

High
Category
Privilege Escalation
Confidence
70% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · GITHUB_SETUP.md (reported line 176)May include surrounding context.

md
### Authentication Issues

If you get authentication errors, you may need to use a Personal Access Token:

1. Go to GitHub Settings → Developer settings → Personal access tokens
2. Generate new token (classic)

Credential Access

High
Category
Privilege Escalation
Confidence
70% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · GITHUB_SETUP.md (reported line 178)May include surrounding context.

md
If you get authentication errors, you may need to use a Personal Access Token:

1. Go to GitHub Settings → Developer settings → Personal access tokens
2. Generate new token (classic)
3. Select scopes: `repo` (full control)
4. Use token as password when pushing

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
- 💡 Browse [examples.py](examples.py) for real code

Autonomous Decision Making

Medium
Category
Excessive Agency
Confidence
85% confidence
Finding

Skill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.

Content

Scanner excerpt · API.md (reported line 12)May include surrounding context.

Main interface for creating, validating, and executing task plans.

python
TaskPlanner(auto_approve: bool = False)

Parameters:

Autonomous Decision Making

Medium
Category
Excessive Agency
Confidence
85% confidence
Finding

Skill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.

Content

Scanner excerpt · API.md (reported line 16)May include surrounding context.

Main interface for creating, validating, and executing task plans.

python
TaskPlanner(auto_approve: bool = False)

Parameters:

Autonomous Decision Making

Medium
Category
Excessive Agency
Confidence
85% confidence
Finding

Skill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.

Content

Scanner excerpt · API.md (reported line 20)May include surrounding context.

Main interface for creating, validating, and executing task plans.

python
TaskPlanner(auto_approve: bool = False)

Parameters:

Autonomous Decision Making

Medium
Category
Excessive Agency
Confidence
85% confidence
Finding

Skill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.

Content

Scanner excerpt · QUICKSTART.md (reported line 22)May include surrounding context.

Main interface for creating, validating, and executing task plans.

python
TaskPlanner(auto_approve: bool = False)

Parameters:

Autonomous Decision Making

Medium
Category
Excessive Agency
Confidence
85% confidence
Finding

Skill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.

Content

Scanner excerpt · QUICKSTART.md (reported line 259)May include surrounding context.

Main interface for creating, validating, and executing task plans.

python
TaskPlanner(auto_approve: bool = False)

Parameters:

Autonomous Decision Making

Medium
Category
Excessive Agency
Confidence
85% confidence
Finding

Skill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.

Content

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

Main interface for creating, validating, and executing task plans.

python
TaskPlanner(auto_approve: bool = False)

Parameters:

Autonomous Decision Making

Medium
Category
Excessive Agency
Confidence
85% confidence
Finding

Skill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.

Content

Scanner excerpt · README_TR.md (reported line 44)May include surrounding context.

Main interface for creating, validating, and executing task plans.

python
TaskPlanner(auto_approve: bool = False)

Parameters:

Autonomous Decision Making

Medium
Category
Excessive Agency
Confidence
85% confidence
Finding

Skill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.

Content

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

Main interface for creating, validating, and executing task plans.

python
TaskPlanner(auto_approve: bool = False)

Parameters:

Autonomous Decision Making

Medium
Category
Excessive Agency
Confidence
85% confidence
Finding

Skill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.

Content

Scanner excerpt · examples.py (reported line 40)May include surrounding context.

python
Main interface for creating, validating, and executing task plans.

```python
TaskPlanner(auto_approve: bool = False)
```

**Parameters:**

Autonomous Decision Making

Medium
Category
Excessive Agency
Confidence
85% confidence
Finding

Skill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.

Content

Scanner excerpt · examples.py (reported line 115)May include surrounding context.

python
Main interface for creating, validating, and executing task plans.

```python
TaskPlanner(auto_approve: bool = False)
```

**Parameters:**

Autonomous Decision Making

Medium
Category
Excessive Agency
Confidence
85% confidence
Finding

Skill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.

Content

Scanner excerpt · examples.py (reported line 169)May include surrounding context.

python
Main interface for creating, validating, and executing task plans.

```python
TaskPlanner(auto_approve: bool = False)
```

**Parameters:**

Autonomous Decision Making

Medium
Category
Excessive Agency
Confidence
85% confidence
Finding

Skill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.

Content

Scanner excerpt · examples.py (reported line 206)May include surrounding context.

python
Main interface for creating, validating, and executing task plans.

```python
TaskPlanner(auto_approve: bool = False)
```

**Parameters:**

Autonomous Decision Making

Medium
Category
Excessive Agency
Confidence
85% confidence
Finding

Skill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.

Content

Scanner excerpt · examples.py (reported line 213)May include surrounding context.

python
Main interface for creating, validating, and executing task plans.

```python
TaskPlanner(auto_approve: bool = False)
```

**Parameters:**

Autonomous Decision Making

Medium
Category
Excessive Agency
Confidence
85% confidence
Finding

Skill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.

Content

Scanner excerpt · examples.py (reported line 237)May include surrounding context.

python
Main interface for creating, validating, and executing task plans.

```python
TaskPlanner(auto_approve: bool = False)
```

**Parameters:**

Autonomous Decision Making

Medium
Category
Excessive Agency
Confidence
85% confidence
Finding

Skill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.

Content

Scanner excerpt · examples.py (reported line 318)May include surrounding context.

python
Main interface for creating, validating, and executing task plans.

```python
TaskPlanner(auto_approve: bool = False)
```

**Parameters:**

Autonomous Decision Making

Medium
Category
Excessive Agency
Confidence
85% confidence
Finding

Skill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.

Content

Scanner excerpt · task_planner.py (reported line 334)May include surrounding context.

python
Main interface for creating, validating, and executing task plans.

```python
TaskPlanner(auto_approve: bool = False)
```

**Parameters:**

Autonomous Decision Making

Medium
Category
Excessive Agency
Confidence
85% confidence
Finding

Skill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.

Content

Scanner excerpt · task_planner.py (reported line 451)May include surrounding context.

python
Main interface for creating, validating, and executing task plans.

```python
TaskPlanner(auto_approve: bool = False)
```

**Parameters:**

Autonomous Decision Making

Medium
Category
Excessive Agency
Confidence
85% confidence
Finding

Skill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.

Content

Scanner excerpt · task_planner.py (reported line 456)May include surrounding context.

python
Main interface for creating, validating, and executing task plans.

```python
TaskPlanner(auto_approve: bool = False)
```

**Parameters:**

Autonomous Decision Making

Medium
Category
Excessive Agency
Confidence
85% confidence
Finding

Skill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.

Content

Scanner excerpt · test_basic.py (reported line 88)May include surrounding context.

python
Main interface for creating, validating, and executing task plans.

```python
TaskPlanner(auto_approve: bool = False)
```

**Parameters:**

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
86% confidence
Finding

This markdown file documents execute_plan and an executor_func that executes arbitrary step actions, including example actions such as api_call, but it does not include a user-facing warning that execution may affect external systems or data. Although safety validation is mentioned elsewhere, the documentation here lacks an explicit disclosure about the operational risk of running plan steps.

Content

No source excerpt is available for this finding.

Autonomous Decision Making

Medium
Category
Excessive Agency
Confidence
85% confidence
Finding

Skill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.

Content

Scanner excerpt · CHANGELOG.md (reported line 39)May include surrounding context.

md
- Plan persistence (save/load JSON)
- SHA-256 integrity verification
- Dry-run execution mode
- Auto-approve functionality
- Comprehensive logging
- Execution progress tracking
- Checkpoint system for rollbacks

Autonomous Decision Making

Medium
Category
Excessive Agency
Confidence
85% confidence
Finding

Skill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.

Content

Scanner excerpt · examples.py (reported line 207)May include surrounding context.

python
- Plan persistence (save/load JSON)
- SHA-256 integrity verification
- Dry-run execution mode
- Auto-approve functionality
- Comprehensive logging
- Execution progress tracking
- Checkpoint system for rollbacks

Static analysis

No suspicious patterns detected.