Only the latest release receives security fixes.
| Version | Supported |
|---|---|
| 0.10.x | ✅ |
| < 0.8 | ❌ |
Please do not open a public GitHub issue for security vulnerabilities.
Email: casablanque@proton.me
Response time: within 72 hours
Include in your report:
- Description of the vulnerability
- Steps to reproduce
- Potential impact
- Suggested fix (if any)
Things we care about most:
- API token exposure or leakage (stored in
~/.zt-config.json) - Privilege escalation via systemd service or cloudflared config
- Unintended public exposure of tunnels (bypass of Zero Trust policy)
- Supply chain issues in CI/CD (GitHub Actions, dependencies)
- Cloudflare platform vulnerabilities — report those to Cloudflare directly
- Issues in
cloudflareditself — report to cloudflare/cloudflared
- Credentials are stored at
~/.zt-config.jsonwith mode0600 - Tunnel credentials are stored at
~/.zt/tunnels/<name>/<id>.jsonwith mode0600 - cfzt never transmits credentials anywhere except the Cloudflare API over HTTPS
- The Gitleaks CI scan checks all commits for accidentally leaked secrets
zt down --remotedeletes by name, not by ownership. Cloudflare Tunnels have no "created by zt" marker the way a zt-managed DNS record does, so--remoteresolves and tears down whatever tunnel exists on the account under that exact name — including one you created manually via the Cloudflare dashboard, if it happens to share the name. It's opt-in and off by default (a plainzt downonly ever acts on tunnels in local state) specifically so this can't happen from a typo on your own machine. Reserve--remotefor automated contexts — CI tearing down its own PR preview — where the caller already knows the name is exclusively theirs, and treat reusing tunnel names between manually-managed and zt-managed tunnels as unsafe.