Security v2.2.2

Clawdbot Security Check

Clawdbot Self-Security Audit Framework

Installation

openclaw skill add thesethrose/clawdbot-security-check

Technical Specification

Clawdbot Self-Security Audit Framework

This skill empowers Clawdbot to audit its own security posture using first-principles reasoning. Rather than relying on a static script, Clawdbot learns the framework and applies it dynamically to detect vulnerabilities, understand their impact, and recommend specific remediations.

Core Philosophy

"Security through transparency and self-awareness." β€” Inspired by α΄…α΄€Ι΄Ιͺα΄‡ΚŸ ᴍΙͺᴇssΚŸα΄‡Κ€

Clawdbot should know its own attack surface. This skill embeds that knowledge directly.

Security Principles

Running an AI agent with shell access requires caution. Focus on three areas:

  1. Who can talk to the bot β€” DM policies, group allowlists, channel restrictions
  2. Where the bot is allowed to act β€” Network exposure, gateway binding, proxy configs
  3. What the bot can touch β€” Tool access, file permissions, credential storage

Start with the smallest access possible and widen it as you gain confidence.

Trust Hierarchy

Apply appropriate trust levels based on role:

Level Entity Trust Model
1 Owner Full trust β€” has all access
2 AI Trust but verify β€” sandboxed, logged
3 Allowlists Limited trust β€” only specified users
4 Strangers No trust β€” blocked by default

Audit Commands

Use these commands to run security audits:

  • clawdbot security audit β€” Standard audit of common issues
  • clawdbot security audit --deep β€” Comprehensive audit with all checks
  • clawdbot security audit --fix β€” Apply guardrail remediations

The 12 Security Domains

When auditing Clawdbot, systematically evaluate these domains:

1. Gateway Exposure πŸ”΄ Critical

What to check:

  • Where is the gateway binding? (gateway.bind)
  • Is authentication configured? (gateway.auth_token or CLAWDBOT_GATEWAY_TOKEN env var)
  • What port is exposed? (default: 18789)
  • Is WebSocket auth enabled?

How to detect:

cat ~/.clawdbot/clawdbot.json | grep -A10 '"gateway"'
env | grep CLAWDBOT_GATEWAY_TOKEN

Vulnerability: Binding to 0.0.0.0 or lan without auth allows network access.

Remediation:

# Generate gateway token
clawdbot doctor --generate-gateway-token
export CLAWDBOT_GATEWAY_TOKEN="$(openssl rand -hex 32)"

2. DM Policy Configuration 🟠 High

What to check:

  • What is dm_policy set to?
  • If allowlist, who is explicitly allowed via allowFrom?

How to detect:

cat ~/.clawdbot/clawdbot.json | grep -E '"dm_policy|"allowFrom"'

Vulnerability: Setting to allow or open means any user can DM Clawdbot.

Remediation:

{
  "channels": {
    "telegram": {
      "dmPolicy": "allowlist",
      "allowFrom": ["@trusteduser1", "@trusteduser2"]
    }
  }
}

3. Group Access Control 🟠 High

What to check:

  • What is groupPolicy set to?
  • Are groups explicitly allowlisted?
  • Are mention gates configured?

How to detect:

cat ~/.clawdbot/clawdbot.json | grep -E '"groupPolicy"|"groups"' 
cat ~/.clawdbot/clawdbot.json | grep -i "mention"

Vulnerability: Open group policy allows anyone in the room to trigger commands.

Remediation:

{
  "channels": {
    "telegram": {
      "groupPolicy": "allowlist",
      "groups": {
        "-100123456789": true
      }
    }
  }
}

4. Credentials Security πŸ”΄ Critical

What to check:

  • Credential file locations and permissions
  • Environment variable usage
  • Auth profile storage

Credential Storage Map:

Platform Path
WhatsApp ~/.clawdbot/credentials/whatsapp/{accountId}/creds.json
Telegram ~/.clawdbot/clawdbot.json or env
Discord ~/.clawdbot/clawdbot.json or env
Slack ~/.clawdbot/clawdbot.json or env
Pairing allowlists ~/.clawdbot/credentials/channel-allowFrom.json
Auth profiles ~/.clawdbot/agents/{agentId}/auth-profiles.json
Legacy OAuth ~/.clawdbot/credentials/oauth.json

How to detect:

ls -la ~/.clawdbot/credentials/
ls -la ~/.clawdbot/agents/*/auth-profiles.json 2>/dev/null
stat -c "%a" ~/.clawdbot/credentials/oauth.json 2>/dev/null

Vulnerability: Plaintext credentials with loose permissions can be read by any process.

Remediation:

chmod 700 ~/.clawdbot
chmod 600 ~/.clawdbot/credentials/oauth.json
chmod 600 ~/.clawdbot/clawdbot.json

5. Browser Control Exposure 🟠 High

What to check:

  • Is browser control enabled?
  • Are authentication tokens set for remote control?
  • Is HTTPS required for Control UI?
  • Is a dedicated browser profile configured?

How to detect:

cat ~/.clawdbot/clawdbot.json | grep -A5 '"browser"'
cat ~/.clawdbot/clawdbot.json | grep -i "controlUi|insecureAuth"
ls -la ~/.clawdbot/browser/

Vulnerability: Exposed browser control without auth allows remote UI takeover. Browser access allows the model to use logged-in sessions.

Remediation:

{
  "browser": {
    "remoteControlUrl": "https://...",
    "remoteControlToken": "...",
    "dedicatedProfile": true,
    "disableHostControl": true
  },
  "gateway": {
    "controlUi": {
      "allowInsecureAuth": false
    }
  }
}

Security Note: Treat browser control URLs as admin APIs.


6. Gateway Bind & Network Exposure 🟠 High

What to check:

  • What is gateway.bind set to?
  • Are trusted proxies configured?
  • Is Tailscale enabled?

How to detect:

cat ~/.clawdbot/clawdbot.json | grep -A10 '"gateway"'
cat ~/.clawdbot/clawdbot.json | grep '"tailscale"'

Vulnerability: Public binding without auth allows internet access to gateway.

Remediation:

{
  "gateway": {
    "bind": "127.0.0.1",
    "mode": "local",
    "trustedProxies": ["127.0.0.1", "10.0.0.0/8"],
    "tailscale": {
      "mode": "off"
    }
  }
}

7. Tool Access & Sandboxing 🟑 Medium

What to check:

  • Are elevated tools allowlisted?
  • Is restrict_tools or mcp_tools configured?
  • What is workspaceAccess set to?
  • Are sensitive tools running in sandbox?

How to detect:

cat ~/.clawdbot/clawdbot.json | grep -i "restrict|mcp|elevated"
cat ~/.clawdbot/clawdbot.json | grep -i "workspaceAccess|sandbox"
cat ~/.clawdbot/clawdbot.json | grep -i "openRoom"

Workspace Access Levels:

Mode Description
none Workspace is off limits
ro Workspace mounted read-only
rw Workspace mounted read-write

Vulnerability: Broad tool access means more blast radius if compromised. Smaller models are more susceptible to tool misuse.

Remediation:

{
  "restrict_tools": true,
  "mcp_tools": {
    "allowed": ["read", "write", "bash"],
    "blocked": ["exec", "gateway"]
  },
  "workspaceAccess": "ro",
  "sandbox": "all"
}

Model Guidance: Use latest generation models for agents with filesystem or network access. If using small models, disable web search and browser tools.


8. File Permissions & Local Disk Hygiene 🟑 Medium

What to check:

  • Directory permissions (should be 700)
  • Config file permissions (should be 600)
  • Symlink safety

How to detect:

stat -c "%a" ~/.clawdbot
ls -la ~/.clawdbot/*.json

Vulnerability: Loose permissions allow other users to read sensitive configs.

Remediation:

chmod 700 ~/.clawdbot
chmod 600 ~/.clawdbot/clawdbot.json
chmod 600 ~/.clawdbot/credentials/*

9. Plugin Trust & Model Hygiene 🟑 Medium

What to check:

  • Are plugins explicitly allowlisted?
  • Are legacy models in use with tool access?

How to detect:

cat ~/.clawdbot/clawdbot.json | grep -i "plugin|allowlist"
cat ~/.clawdbot/clawdbot.json | grep -i "model|anthropic"

Vulnerability: Untrusted plugins can execute code. Legacy models may lack modern safety.

Remediation:

{
  "plugins": {
    "allowlist": ["trusted-plugin-1", "trusted-plugin-2"]
  },
  "agents": {
    "defaults": {
      "model": {
        "primary": "minimax/MiniMax-M2.1"
      }
    }
  }
}

10. Logging & Redaction 🟑 Medium

What is logging.redactSensitive set to?

  • Should be tools to redact sensitive tool output
  • If off, credentials may leak in logs

How to detect:

cat ~/.clawdbot/clawdbot.json | grep -i "logging|redact"
ls -la ~/.clawdbot/logs/

Remediation:

{
  "logging": {
    "redactSensitive": "tools",
    "path": "~/.clawdbot/logs/"
  }
}

11. Prompt Injection Protection 🟑 Medium

What to check:

  • Is wrap_untrusted_content or untrusted_content_wrapper enabled?
  • How is external/web content handled?
  • Are links and attachments treated as hostile?

How to detect:

cat ~/.clawdbot/clawdbot.json | grep -i "untrusted|wrap"

Prompt Injection Mitigation Strategies:

  • Keep DMs locked to pairing or allowlists
  • Use mention gating in groups
  • Treat all links and attachments as hostile
  • Run sensitive tools in a sandbox
  • Use instruction-hardened models like Anthropic Opus 4.5

Vulnerability: Untrusted content (web fetches, sandbox output) can inject malicious prompts.

Remediation:

{
  "wrap_untrusted_content": true,
  "untrusted_content_wrapper": "<untrusted>",
  "treatLinksAsHostile": true,
  "mentionGate": true
}

12. Dangerous Command Blocking 🟑 Medium

What to check:

  • What commands are in blocked_commands?
  • Are these patterns included: rm -rf, curl |, git push --force, mkfs, fork bombs?

How to detect:

cat ~/.clawdbot/clawdbot.json | grep -A10 '"blocked_commands"'

Vulnerability: Without blocking, a malicious prompt could destroy data or exfiltrate credentials.

Remediation:

{
  "blocked_commands": [
    "rm -rf",
    "curl |",
    "git push --force",
    "mkfs",
    ":(){:|:&}"
  ]
}

13. Secret Scanning Readiness 🟑 Medium

What to check:

  • Is detect-secrets configured?
  • Is there a .secrets.baseline file?
  • Has a baseline scan been run?

How to detect:

ls -la .secrets.baseline 2>/dev/null
which detect-secrets 2>/dev/null

Secret Scanning (CI):

# Find candidates
detect-secrets scan --baseline .secrets.baseline

# Review findings
detect-secrets audit

# Update baseline after rotating secrets or marking false positives
detect-secrets scan --baseline .secrets.baseline --update

Vulnerability: Leaked credentials in the codebase can lead to compromise.


Audit Functions

The --fix flag applies these guardrails:

  • Changes groupPolicy from open to allowlist for common channels
  • Resets logging.redactSensitive from off to tools
  • Tightens local permissions: .clawdbot directory to 700, config files to 600
  • Secures state files including credentials and auth profiles

High-Level Audit Checklist

Treat findings in this priority order:

  1. πŸ”΄ Lock down DMs and groups if tools are enabled on open settings
  2. πŸ”΄ Fix public network exposure immediately
  3. 🟠 Secure browser control with tokens and HTTPS
  4. 🟠 Correct file permissions for credentials and config
  5. 🟑 Only load trusted plugins
  6. 🟑 Use modern models for bots with tool access

Access Control Models

DM Access Model

Mode Description
pairing Default - unknown senders must be approved via code
allowlist Unknown senders blocked without handshake
open Public access - requires explicit asterisk in allowlist
disabled All inbound DMs ignored

Slash Commands

Slash commands are only available to authorized senders based on channel allowlists. The /exec command is a session convenience for operators and does not modify global config.

Threat Model & Mitigation

Potential Risks

Risk Mitigation
Execution of shell commands blocked_commands, restrict_tools
File and network access sandbox, workspaceAccess: none/ro
Social engineering and prompt injection wrap_untrusted_content, mentionGate
Browser session hijacking Dedicated profile, token auth, HTTPS
Credential leakage logging.redactSensitive: tools, env vars

Incident Response

If a compromise is suspected, follow these steps:

Containment

  1. Stop the gateway process β€” clawdbot daemon stop
  2. Set gateway.bind to loopback β€” "bind": "127.0.0.1"
  3. Disable risky DMs and groups β€” Set to disabled

Rotation

  1. Change the gateway auth token β€” clawdbot doctor --generate-gateway-token
  2. Rotate browser control and hook tokens
  3. Revoke and rotate API keys for model providers

Review

  1. Check gateway logs and session transcripts β€” ~/.clawdbot/logs/
  2. Review recent config changes β€” Git history or backups
  3. Re-run the security audit with the deep flag β€” clawdbot security audit --deep

Reporting Vulnerabilities

Report security issues to: [email protected]

Do not post vulnerabilities publicly until they have been fixed.

Audit Execution Steps

When running a security audit, follow this sequence:

Step 1: Locate Configuration

CONFIG_PATHS=(
  "$HOME/.clawdbot/clawdbot.json"
  "$HOME/.clawdbot/config.yaml"
  "$HOME/.clawdbot/.clawdbotrc"
  ".clawdbotrc"
)
for path in "${CONFIG_PATHS[@]}"; do
  if [ -f "$path" ]; then
    echo "Found config: $path"
    cat "$path"
    break
  fi
done

Step 2: Run Domain Checks

For each of the 13 domains above:

  1. Parse relevant config keys
  2. Compare against secure baseline
  3. Flag deviations with severity

Step 3: Generate Report

Format findings by severity:

πŸ”΄ CRITICAL: [vulnerability] - [impact]
🟠 HIGH: [vulnerability] - [impact]
🟑 MEDIUM: [vulnerability] - [impact]
βœ… PASSED: [check name]

Step 4: Provide Remediation

For each finding, output:

  • Specific config change needed
  • Example configuration
  • Command to apply (if safe)

Report Template

═══════════════════════════════════════════════════════════════
πŸ”’ CLAWDBOT SECURITY AUDIT
═══════════════════════════════════════════════════════════════
Timestamp: $(date -Iseconds)

β”Œβ”€ SUMMARY ───────────────────────────────────────────────
β”‚ πŸ”΄ Critical:  $CRITICAL_COUNT
β”‚ 🟠 High:      $HIGH_COUNT
β”‚ 🟑 Medium:    $MEDIUM_COUNT
β”‚ βœ… Passed:    $PASSED_COUNT
└────────────────────────────────────────────────────────

β”Œβ”€ FINDINGS ──────────────────────────────────────────────
β”‚ πŸ”΄ [CRITICAL] $VULN_NAME
β”‚    Finding: $DESCRIPTION
β”‚    β†’ Fix: $REMEDIATION
β”‚
β”‚ 🟠 [HIGH] $VULN_NAME
β”‚    ...
└────────────────────────────────────────────────────────

This audit was performed by Clawdbot's self-security framework.
No changes were made to your configuration.

Extending the Skill

To add new security checks:

  1. Identify the vulnerability - What misconfiguration creates risk?
  2. Determine detection method - What config key or system state reveals it?
  3. Define the baseline - What is the secure configuration?
  4. Write detection logic - Shell commands or file parsing
  5. Document remediation - Specific steps to fix
  6. Assign severity - Critical, High, Medium, Low

Example: Adding SSH Hardening Check

## 14. SSH Agent Forwarding 🟑 Medium

**What to check:** Is SSH_AUTH_SOCK exposed to containers?

**Detection:**
```bash
env | grep SSH_AUTH_SOCK

Vulnerability: Container escape via SSH agent hijacking.

Severity: Medium


## Security Assessment Questions

When auditing, ask:

1. **Exposure:** What network interfaces can reach Clawdbot?
2. **Authentication:** What verification does each access point require?
3. **Isolation:** What boundaries exist between Clawdbot and the host?
4. **Trust:** What content sources are considered "trusted"?
5. **Auditability:** What evidence exists of Clawdbot's actions?
6. **Least Privilege:** Does Clawdbot have only necessary permissions?

## Principles Applied

- **Zero modification** - This skill only reads; never changes configuration
- **Defense in depth** - Multiple checks catch different attack vectors
- **Actionable output** - Every finding includes a concrete remediation
- **Extensible design** - New checks integrate naturally

## References

- Official docs: https://docs.clawd.bot/gateway/security
- Original framework: [α΄…α΄€Ι΄Ιͺα΄‡ΚŸ ᴍΙͺᴇssΚŸα΄‡Κ€ on X](https://x.com/DanielMiessler/status/2015865548714975475)
- Repository: https://github.com/TheSethRose/Clawdbot-Security-Check
- Report vulnerabilities: [email protected]

---

**Remember:** This skill exists to make Clawdbot self-aware of its security posture. Use it regularly, extend it as needed, and never skip the audit.