# Security Policy

## Supported Versions

Clawker is currently in **alpha**. Security fixes are applied to the latest version only.

| Version | Supported |
|---------|-----------|
| Latest (main branch) | Yes |
| Older releases | No |

## Reporting a Vulnerability

If you discover a security vulnerability in Clawker, please report it responsibly.

**Do NOT open a public GitHub issue for security vulnerabilities.**

Instead, please use one of the following methods:

1. **GitHub Security Advisories** (preferred): Use [GitHub's private vulnerability reporting](https://github.com/schmitthub/clawker/security/advisories/new) to submit a report directly.

2. **Email**: Contact the maintainer at the email address listed in the Git commit history.

### What to Include

- Description of the vulnerability
- Steps to reproduce
- Potential impact
- Suggested fix (if any)

### What to Expect

- **Acknowledgment** within 48 hours
- **Assessment** within 1 week
- **Fix or mitigation plan** communicated within 2 weeks

For accepted vulnerabilities, we will:
- Develop and test a fix
- Release a patched version
- Credit you in the release notes (unless you prefer anonymity)

For declined reports, we will explain our reasoning.

## Security Model

Clawker's security model is documented in the project's design docs. Key points:

- **Containers are the security boundary** — Clawker protects the host from what happens inside containers
- **Network firewall** is enabled by default (outbound blocked except allowlisted domains)
- **Docker socket access** is disabled by default
- **Git credentials** are forwarded (never copied) via the host proxy
- **Label-based isolation** ensures Clawker never touches non-Clawker Docker resources

## Note for Security Testers

**TCP/SSH port-level routing:** Raw TCP and SSH connections have no domain-level metadata (no SNI equivalent), so Clawker cannot inspect the intended destination. Instead, eBPF routes **all** outbound traffic on a whitelisted port to Envoy, which forwards it to the whitelisted domain's IP. A successful `connect()` on port 22 does **not** mean you have reached your intended target — the connection was silently redirected to the whitelisted service (e.g., GitHub). Any data you send goes to that corporate service, not your C2. Always verify the remote banner or certificate before concluding you have egress.

Multi-domain support for TCP/SSH ports is a [tracked limitation](https://github.com/schmitthub/clawker/issues/235), deferred for after the control plane work. See [docs.clawker.dev/threat-model](https://docs.clawker.dev/threat-model) for the full threat model.

## Scope

The following are considered security issues:

- Container escape or host filesystem access beyond configured bind mounts
- Credential leakage (API keys, OAuth tokens, git credentials)
- Firewall bypass allowing unauthorized network access
- Operations on non-Clawker Docker resources (label isolation failure)
- Privilege escalation within the container beyond intended permissions

The following are **not** in scope:

- Vulnerabilities in Docker itself (report to Docker)
- Vulnerabilities in Claude Code (report to Anthropic)
- Issues requiring physical access to the host machine
- Social engineering attacks
