Back to skill

Security audit

Local Approvals

Security checks across malware telemetry and agentic risk

Overview

This is a local approval-management tool, but its persistent category-based auto-approval can let future agent requests skip human review too broadly.

Install only if approval commands are controlled by a trusted user or trusted wrapper. Do not let the agents being governed run approve or approve --learn themselves. Use learned categories only for narrow, low-risk actions, review categories and pending/history files regularly, and reset approvals after mistakes or suspicious behavior.

SkillSpector

By NVIDIA
Vulnerability Patterns
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • 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 (14)

Lp3

Medium
Category
MCP Least Privilege
Confidence
68% confidence
Finding
The skill documentation describes a CLI that reads and writes local state files and references underlying code capabilities, but the skill metadata does not declare any permissions. Missing permission declarations weaken reviewability and can cause operators to underestimate the file, write, or possible network access the implementation may require.

Missing User Warnings

Medium
Confidence
84% confidence
Finding
The `approve <id> --learn` option persistently adds a category to an auto-approve list, allowing future requests in that category to bypass per-request review. Although the doc mentions this behavior, it does not foreground the security consequence strongly enough, which can lead users to grant durable trust too broadly.

Autonomous Decision Making

Medium
Category
Excessive Agency
Content
---
name: local-approvals
description: Local approval system for managing agent permissions. Use CLI to approve/deny requests, view history, and manage auto-approved categories.
---

# Local Approvals Skill
Confidence
78% confidence
Finding
auto-approve

Autonomous Decision Making

Medium
Category
Excessive Agency
Content
# Local Approvals Skill

A local approval system that manages agent permissions with auto-approve lists and approval history tracking.

## Quick Start
Confidence
78% confidence
Finding
auto-approve

Autonomous Decision Making

Medium
Category
Excessive Agency
Content
The skill maintains two JSON files in the state directory:

- **state.json**: Auto-approve lists and approval history
- **pending.json**: Pending approval requests

Location: `~/.openclaw/skills/local-approvals/`
Confidence
74% confidence
Finding
Auto-approve

Autonomous Decision Making

Medium
Category
Excessive Agency
Content
The `core.py` module provides the underlying functionality:

- `check_auto_approve(agent, category)` - Check if a category is auto-approved
- `submit_request(agent, category, operation, reasoning)` - Submit a pending request
- `learn_category(agent, category)` - Add category to auto-approve list
- `get_request(request_id)` - Retrieve a request by ID
Confidence
79% confidence
Finding
auto_approve

Autonomous Decision Making

Medium
Category
Excessive Agency
Content
The `core.py` module provides the underlying functionality:

- `check_auto_approve(agent, category)` - Check if a category is auto-approved
- `submit_request(agent, category, operation, reasoning)` - Submit a pending request
- `learn_category(agent, category)` - Add category to auto-approve list
- `get_request(request_id)` - Retrieve a request by ID
Confidence
79% confidence
Finding
auto-approve

Autonomous Decision Making

Medium
Category
Excessive Agency
Content
- `check_auto_approve(agent, category)` - Check if a category is auto-approved
- `submit_request(agent, category, operation, reasoning)` - Submit a pending request
- `learn_category(agent, category)` - Add category to auto-approve list
- `get_request(request_id)` - Retrieve a request by ID
- `update_request(request_id, decision, reviewer)` - Update request with decision
- `list_pending(agent)` - List pending requests
Confidence
83% confidence
Finding
auto-approve

Autonomous Decision Making

Medium
Category
Excessive Agency
Content
- `get_request(request_id)` - Retrieve a request by ID
- `update_request(request_id, decision, reviewer)` - Update request with decision
- `list_pending(agent)` - List pending requests
- `get_agent_approvals(agent)` - Get agent's auto-approved categories

## Best Practices
Confidence
72% confidence
Finding
auto-approve

Autonomous Decision Making

Medium
Category
Excessive Agency
Content
## Best Practices

1. **Review before approving**: Always check the operation and reasoning before approving
2. **Use auto-learn carefully**: Only use `--learn` for trusted categories that you want to auto-approve
3. **Check history regularly**: Review `history` to understand approval patterns
4. **Reset when needed**: Use `reset` to clear an agent's auto-approve list if you suspect issues
Confidence
76% confidence
Finding
auto-approve

Autonomous Decision Making

Medium
Category
Excessive Agency
Content
1. **Review before approving**: Always check the operation and reasoning before approving
2. **Use auto-learn carefully**: Only use `--learn` for trusted categories that you want to auto-approve
3. **Check history regularly**: Review `history` to understand approval patterns
4. **Reset when needed**: Use `reset` to clear an agent's auto-approve list if you suspect issues

## Examples
Confidence
76% confidence
Finding
auto-approve

Autonomous Decision Making

Medium
Category
Excessive Agency
Content
# Auto-learn the category if requested
        if auto_learn:
            learn_category(updated['agent'], updated['category'])
            print(f"   📚 Category '{updated['category']}' added to auto-approve for agent '{updated['agent']}'")
        
        return True
Confidence
81% confidence
Finding
auto-approve

Autonomous Decision Making

Medium
Category
Excessive Agency
Content
state = _load_state()
    
    # Get the auto-approve list for this agent
    agent_approvals = state.get("auto_approve", {}).get(agent, [])
    
    # Check if category is in the list
    return category in agent_approvals
Confidence
78% confidence
Finding
auto_approve

Autonomous Decision Making

Medium
Category
Excessive Agency
Content
state["auto_approve"][agent] = []
    
    # Add category if not already present
    if category not in state["auto_approve"][agent]:
        state["auto_approve"][agent].append(category)
        _save_state(state)
        return True
Confidence
86% confidence
Finding
auto_approve

VirusTotal

64/64 vendors flagged this skill as clean.

View on VirusTotal

Static analysis

No suspicious patterns detected.