Based on the official repository
github.com/gl0di/clawseccheck, latest release v0.30.1 (2026-06-21) MIT license · Zero dependencies (Python standard library only) · Single author (gl0di)
Concept
OpenClaw has recently become a frequent target for attackers. Between vulnerabilities in OpenClaw itself and a wave of LLM-friendly attack techniques, the threat landscape has grown noisy. ClawSecCheck was built to address this problem.
ClawSecCheckis alocal, read-only, offline security self-audit tool for OpenClaw AI agents. It can be installed as an OpenClaw skill and used conversationally, or run as a standard CLI.
"A one-command security self-audit for your own agent."
The core design principle is not "scan someone else's agent" but audit your own agent yourself. That sidesteps ownership-proof and legal gray-area problems entirely. The tool grades your configuration A through F, surfaces the most urgent gaps in plain language, and hands you copy-paste-ready fixes along with a shareable grade badge.
OpenClaw agents read user messages, remember conversations, hold keys, and act on the user's behalf. Those exact privileges are what attackers target — a single poisoned message or a single malicious skill can quietly turn an agent against its owner. ClawSecCheck inspects and grades your configuration to catch that risk before it materializes.
Operating Principles
- Conversation-driven auditing: run inside OpenClaw and it walks the whole process conversationally, even if the agent doesn't know any flags (guided mode).
- Read-only: never modifies configuration or skills. There is no
--fixfeature at all. - Offline, zero-transmission: no network calls, no API keys, no telemetry. It only reads
~/.openclaw/openclaw.jsonand workspace bootstrap markdown files. - Honesty first: anything it can't determine is marked
UNKNOWNand excluded from scoring.UNKNOWNis never treated asPASS.
Internally, it invokes exactly one thing — the platform's own audit — read-only, and merges the result. No shell access, no --fix, a timeout exists, and it can be skipped with --no-native.
openclaw security audit --json
What Does It Check?
Lethal Trifecta — the flagship framework
This is the headline metric ClawSecCheck surfaces at the top of every report. When untrusted input × sensitive data access × external (egress/execution) actionall hold true simultaneously, a compromise becomes fatal or trivial. The tool recommends keepingat most 2 of the 3 satisfied, and displays Score, Grade, and Trifecta ratio together at the top (the shareable badge exposes only the grade).
Check families (by check ID)
Checks are implemented under the following ID scheme: exposure/permissions/secrets (B1-B12), supply chain (B13-B15), preparedness (B16-B17), agent behavior (B18-B24), injection/deep exposure (B26 onward), capability/host expansion (B43, B50s), plus native audit merging (A1) and the risk engine (RISK).
| Check family | Representative items |
|---|---|
| B1-B12 | Gateway exposure/channel auth, plaintext secrets, least privilege, execution sandbox, TLS, local model hygiene |
| B6 | Checks bootstrap files (SOUL.md, AGENTS.md, TOOLS.md) for prompt-injection-inducing directives |
| B13 | Static inspection of installed third-party skill content. Detects ClawHavoc-style malware and base64-hidden payloads. From v0.21, Python AST parsing catches obfuscation like exec(base64.b64decode(...)); from v0.23, it traces taint from credential files flowing to network sinks |
| B14 / B15 | Egress surface / MCP server trust boundary |
| B16 / B17 | Presence of threat monitoring / autonomy and heartbeat |
| B18-B24 | Subagent delegation, data-at-rest exposure, identity/memory file write protection, tool output trust boundary, self-modification, approval bypass, deep MCP hardening |
| B26 | Untrusted context exposure (contextVisibility="all" default) |
| B30 / B31 / B32 | Sender identity strength / the tools.deny:["write"] footgun that fails to block apply_patch/exec / control-plane change reachability |
| B33 | Known-vulnerable version gate (checked against meta.lastTouchedVersion) |
| B38 / B39 / B41 / B42 | Browser SSRF (e.g. 169.254.169.254) / session visibility and cross-user leakage / credential blast radius / install-time supply chain (preinstall hooks, world-writable skill directories) |
| B43 / B44 (attestation layer) | Supplements static scanning — which can't see real tool/verb usage — with agent self-reported inventory. Classifies into EXEC/DESTRUCTIVE/EGRESS/MAILBOX_CONFIG/REVERSIBLE and checks drift against config (confidence ATTESTED, experimental) |
| B50-B54 (Host Watch) | Whether the host the agent runs on is itself monitored: network IDS, host auditing, file integrity, EDR, host firewall. LOW severity, never causes a FAIL |
| A1 | Runs the platform's own openclaw security audit and merges it into the same report (does not affect the score) |
The dirty-input sanitizer, action gate, and taint labeling (B26-B28) are still on the roadmap — the largest remaining coverage gap. That's also why some items remain marked UNKNOWN.
Risk engine — RISK-01 through RISK-10
Beyond individual checks, the tool separately detects ten capability chains — combinations where a breach becomes catastrophic once two or more properties hold simultaneously.
| ID | Severity | Chain |
|---|---|---|
| RISK-01 | CRITICAL | Untrusted sender → exec/write/escalation tool → host/filesystem |
| RISK-02 | HIGH | Untrusted input → sensitive data reachability → egress/execution (Lethal Trifecta) |
| RISK-03 | HIGH | Untrusted ingress + no sandbox → direct exec/write on the host |
| RISK-04 | HIGH | Mutable identity (name-matching) → escalation/exec tool → privilege escalation |
| RISK-05 | HIGH | Browser SSRF (private network) → secrets/credentials → exfiltration |
| RISK-06 | CRITICAL | Open/untrusted surface → control-plane endpoint → full takeover |
| RISK-07 | HIGH | Exec/write with no approval gate → writable bootstrap/identity files → persistent compromise |
| RISK-08 | MEDIUM | Multi-user channel → shared session (dmScope="main") → cross-user leakage |
| RISK-09 | CRITICAL | Malicious installed skill (B13 fail) → reachable secrets → egress → exfiltration |
| RISK-10 | MEDIUM | Untrusted input → host exec/write → no host detection → invisible compromise |
Each chain only fires when every link has positive evidence (evidence-gated), keeping false positives low. The risk engine doesn't alter the deterministic A-F score and is surfaced separately, showing worst-case paths at a glance without score inflation.
How Scoring Works
Scoring uses a weighted pass rate (CRITICAL=10, HIGH=6, MEDIUM=3, LOW=1), with an added honesty hard cap: any unresolved CRITICAL caps the score at 49, and any unresolved HIGH caps it at 79 — so you can't earn an A while carrying a fatal hole.
| Grade | Score |
|---|---|
| A | 90+ |
| B | 80-89 |
| C | 70-79 |
| D | 50-69 |
| F | <50 |
UNKNOWN items are never scored, and advisory checks never move the grade. The shareable card exposes only grade, score, and Trifecta ratio, keeping findings private — because sharing shouldn't hand attackers a map.
Strengths
- Privacy-first, fully local: no accounts, no API keys, no telemetry, no network requests. The only thing it stores by default is a single owner-only local score history line (
~/.clawseccheck/history.jsonl), which you can opt out of with--no-history. - Covers what native audits miss: inspects bootstrap files (
SOUL.md,AGENTS.md,TOOLS.md) — which the platform's own audit doesn't check — from a prompt-injection angle (B6). - Pre-install risk assessment: vet skills before installing/trusting them with
--vet <skill>, and connected MCP servers with--vet-mcp(SAFE/SUSPICIOUS/DANGEROUS). Most tools only look at skills and miss the MCP-server supply-chain gap this targets — especially important since the ClawHavoc incident. - Active injection testing:
--canary(manual injection self-test),--redteam(tool poisoning, MCP response injection, memory poisoning, multi-agent, approval bypass, dirty-to-exfiltration scenarios), and--dryrun(runtime behavior testing with fake secrets and fake tools). - Honest design:
UNKNOWN != PASS, and limitations aren't hidden behind a green score. Risk chains only fire with evidence. - Completely free, open-source, zero dependencies: MIT license, pure Python standard library.
- Multiple output formats and CI gating: human-readable reports,
--json,--sarif(SARIF 2.1.0),--html,--badge(SVG),--card. Gate CI with--fail-under 70and--exit-code.
Weaknesses and Limitations
- OpenClaw-ecosystem only: not applicable to other agent platforms.
- Requires awareness of conversational exposure: using it inside OpenClaw chat makes the report text part of that conversation, processed by whichever model provider you're already using. The scanner itself doesn't open a new channel, but this is worth being aware of.
- CLI usage requires a Python environment: pipx installation is recommended (
pip install .also works). On Windows, POSIX permission checks are skipped, and unicode-unsupported consoles fall back to ASCII. - Static, heuristic auditing: this is not runtime verification or formal proof, and false positives/negatives can occur. It cannot replace adversarial testing of a running agent. Its scope is also limited to config files, bootstrap markdown, and installed skill text.
- Very new, small-scale project: still pre-1.0 (0.x) and run by a single author. Flags, schema, and check IDs can change even in minor releases, and the contract only stabilizes at 1.0. In terms of maturity and validation history, it lags behind larger projects like ClawSec or ClawSecure. It's safer to note this explicitly when citing it in public reports or columns.
Comparison With Similar Projects
| Project | Form | Characteristics |
|---|---|---|
| ClawSec (prompt-security) | Skill suite | Targets OpenClaw, Hermes, PicoClaw, NanoClaw. Drift detection, skill integrity verification, NVD-based security advisory feed |
| ClawSecure | Cloud audit platform | Audits 3,000+ skills, OWASP ASI 10/10 coverage, 3-Layer Audit Protocol, continuous monitoring |
| ClawScan | CLI (npx clawscan) |
Detects malware, reverse shells, prompt injection, and unicode attacks before skill install, MIT |
| ClawVitals | Skill + plugin | Local execution health checks, config tampering/drift alerts, scoring |
| openclaw-security-scan(legendaryabhi) | Pure Bash CLI | No Python required, auto-fix for critical issues, JSON output for CI |
Getting Started
From OpenClaw chat (no terminal needed)
openclaw skills install clawseccheck # from ClawHub (unique slug)
openclaw skills install git:gl0di/clawseccheck # or directly from GitHub
Once installed, just ask audit my OpenClaw setup with clawseccheck and the grade plus the most urgent issues show up right in the chat. ClawHub skill page: https://clawhub.ai/gl0di/clawseccheck
Standard CLI
pipx install git+https://github.com/gl0di/clawseccheck # or pip install .
clawseccheck --home ~/.openclaw # afterward, just clawseccheck
python -m clawseccheck # works the same way
Running the bundled script directly
python3 audit.py # human-readable report + shareable card
python3 audit.py --json # machine-readable
python3 audit.py --card # badge only
python3 audit.py --sarif results.sarif # for GitHub Code Scanning upload (local record)
python3 audit.py --html report.html # standalone HTML report (owner-only)
python3 audit.py --fail-under 70 # exit 1 if score is below 70 (CI)
python3 audit.py --ascii # fallback for unicode-unsupported consoles
Integrity verification
python3 audit.py --verify-self # SHA-256 of ClawSecCheck's own source (tamper protection)
Releases are tagged and public, so for security-sensitive use, it's safer to review and pin a tag before updating rather than relying on blind auto-update.
Conversational commands and what happens under the hood
| User request | What happens internally |
|---|---|
| "Audit my OpenClaw setup" | Default audit: A-F grade + prioritized fix list + Trifecta |
| "Is this skill safe to install?" | --vet <skill> (SAFE/SUSPICIOUS/DANGEROUS) |
| "Are my MCP servers safe?" | --vet-mcp |
| "Am I vulnerable to prompt injection?" | --canary / --redteam |
| "Watch my setup for changes" | --monitor (drift/score-drop/new-skill/MCP/channel alerts) |
| "What should I fix first?" | --next (finding-based prioritization) |
| "Give me fix prompts" | --prompts (copy-paste fix prompt per finding) |
| "Share my grade" | --badge / --card (grade only, publicly) |
References
- Repository: https://github.com/gl0di/clawseccheck
- Security model: https://github.com/gl0di/clawseccheck/blob/main/SECURITY_MODEL.md
- Skill definition: https://github.com/gl0di/clawseccheck/blob/main/SKILL.md
- ClawHub skill page: https://clawhub.ai/gl0di/clawseccheck
This document is based on README v0.30.1. Being a pre-1.0 project, flags, schema, and check IDs may change in later releases.