Security audit tool for OpenClaw deployments
Project description
ClawShield
ClawShield detects high-risk misconfigurations in OpenClaw agents before they become exposed attack surfaces.
It is the first release under the PolicyGate umbrella — a runtime policy enforcement framework for AI agents.
Why This Exists
AI agents are often deployed:
- Publicly bound to
0.0.0.0 - With authentication disabled
- Inside privileged or root containers
- With API keys sitting in
.envfiles - Without file permission hardening
These are not theoretical risks — they are common misconfigurations.
ClawShield surfaces them deterministically and exits non-zero in CI when thresholds are exceeded.
What ClawShield Checks
Network Exposure
- Public bind address (
0.0.0.0,::) - Authentication disabled while publicly exposed
Container Posture
- Containers running as root
- Containers running in privileged mode
Secrets Handling
- API keys present in
.envfiles - API key references inside config files
File Permissions
- World-writable config files
- World-readable or world-writable
.envfiles
What ClawShield Does NOT Check
- Runtime exploitability
- Kernel vulnerabilities
- Docker daemon hardening
- Firewall configuration
- Intrusion detection
- Secrets entropy analysis
- Cloud IAM posture
ClawShield is a static audit tool, not a runtime protection system.
Quick Start (Users)
pip install clawshield
Run audit:
clawshield path/to/openclaw.yaml
JSON mode:
clawshield --json path/to/openclaw.yaml
Fail CI on severity threshold:
clawshield --fail-on high path/to/openclaw.yaml
Severity ranking:
low < medium < high < critical
Exit Codes
| Code | Meaning |
|---|---|
| 0 | No findings at or above threshold |
| 1 | Findings at or above threshold |
Example JSON Output
{
"meta": {
"schema_version": "0.1",
"tool_version": "0.3.0",
"policy_path": "clawshield/policies/vps_public.yaml"
},
"facts": [
{
"key": "network.bind_address",
"value": "0.0.0.0",
"source": "openclaw_config:openclaw.yaml"
},
{
"key": "runtime.auth_enabled",
"value": false,
"source": "openclaw_config:openclaw.yaml"
}
],
"findings": [
{
"rule_id": "NET-001",
"title": "Public bind address with authentication disabled",
"severity": "critical",
"confidence": "high",
"evidence": [],
"recommended_actions": ["ACT-ENABLE-AUTH"],
"autofix_available": true
}
]
}
JSON output is deterministic and schema-versioned. Golden tests lock the schema to prevent drift.
Architecture
ClawShield consists of:
- Scanners — Collect facts from runtime and configuration
- Policy Engine — Evaluates YAML rules against collected facts
- Structured Output — Designed for automation and CI pipelines
Scanners are modular and isolated from the engine core.
Roadmap
- Continuous monitoring mode
- Additional runtime adapters
- Expanded Docker hardening checks
- Policy bundles
- Advanced secrets detection
- Signed policy packs
Status
Early release. Actively evolving.
Feedback and contributions welcome.
License
Apache 2.0
Security Disclaimer
ClawShield surfaces rule-based misconfigurations according to the active policy set. It does not guarantee system security.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file clawshield-0.4.1.tar.gz.
File metadata
- Download URL: clawshield-0.4.1.tar.gz
- Upload date:
- Size: 28.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
baccfb73f2c7165828ea749ae49e7f5101902faf2ba8c06d7147be1b0ec10823
|
|
| MD5 |
18b6aa13ee73207f0aafbe652b9c9bb5
|
|
| BLAKE2b-256 |
54702b5e31acc74efbba82198d8cf6e2d56e34ac8ca8d4c72b244724af95c693
|
File details
Details for the file clawshield-0.4.1-py3-none-any.whl.
File metadata
- Download URL: clawshield-0.4.1-py3-none-any.whl
- Upload date:
- Size: 22.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a743d747c2deed62517bfbdfa64ce79343dc4926c836eb8994415114fcd0c89f
|
|
| MD5 |
649177ab2dceda216a752a2681728317
|
|
| BLAKE2b-256 |
87f37aeb010aedd37d4f50d0d4a6214bdb6162b135dfdc5ff80fb37fd230e60b
|