Please do not open a public GitHub issue for security problems.
Report privately via one of:
- GitHub Security Advisory (preferred): Open a draft advisory
- Email:
security@dxfrontier.com
Include:
- A description of the issue and its impact
- Steps to reproduce
- Affected version(s) (
pair-claude --versiononce available, or commit SHA) - Your environment (OS, Go version, Tailscale yes/no)
We'll acknowledge within 5 business days and aim to release a fix within 30 days for confirmed issues.
Pair-Claude is designed for trusted networks — typically a Tailscale tailnet shared between teammates. The trust boundary is your network: anyone who can reach the listening port is treated as authorized to attempt to use a token.
In scope (please report):
- Token disclosure via timing attacks, log files, or response leaks
- Authentication bypass on
/api/*endpoints - Cross-site scripting in the embedded viewer
- Command injection through input parsing or claude args
- Memory unsafety in the PTY layer
- Path traversal in the embedded static-file server
- Denial of service that affects the host beyond the wrapper itself
Out of scope (by design — see README §Security Model):
- No TLS. Tailscale provides end-to-end encryption. Running Pair-Claude on a public network without a TLS terminator in front is not a supported configuration.
- Read-write by default.
\shareproduces a token that allows typing into the live session. This is intentional for pair programming. Use\share --readonlyfor observers. - Shared token, not per-user. All viewers with the URL share the same token. Pair-Claude does not authenticate individual users.
- 8-hour token lifetime. Tokens persist until expiry,
\revoke, or process exit. - Trusting the network. If an attacker is already on your tailnet, they are already inside the trust boundary.
| Version | Supported |
|---|---|
| 0.1.x | ✅ |
We currently maintain only the latest minor release. Once 1.0 ships, this table will be updated.